Запасы устойчивости модели Simulink

Этот пример иллюстрирует, как вычислить классические и дисковые поля усиления и фазы цикла управления, смоделированного в Simulink ®. Чтобы вычислить запасы устойчивости, линеаризируйте модель, чтобы извлечь отклики без разомкнутого контура в одной или нескольких интересующих рабочих точках. Затем используйте allmargin или diskmargin для вычисления классических или дисковых запасов устойчивости, соответственно.

MIMO- Цикла управления

В данном примере используйте модель Simulink airframemarginEx.slx. Эта модель основана на примере Обрезка и Линеаризация планера (Simulink Control Design).

open_system('airframemarginEx.slx')

Система является двухканальным циклом обратной связи. Объект является подсистемой с одним входом и двумя выходами Airframe Model, и контроллер является системой с двумя входами, с одним выходом, входы которой являются нормальным ускорением az и скорость тангажа q, и чей выход является Fin Deflection сигнал.

Передаточные функции цикла

Чтобы вычислить запасы по амплитуде и запасы по фазе для этой системы обратной связи, линеаризируйте модель, чтобы получить передаточные функции без разомкнутого контура на выходах и входах объекта. Это можно сделать с помощью точек анализа линеаризации типа переноса контура. Для получения дополнительной информации о точках анализа линеаризации см. «Задание фрагмента модели для линеаризации» (Simulink Control Design).

Создайте точку анализа передачи контура для входа объекта управления, который является первым выходным портом q Control подсистема.

ioInput = linio('airframemarginEx/q Control',1,'looptransfer');

Точно так же создайте точки анализа для выходов объекта управления. Поскольку существует два выхода, задайте эти точки анализа как вектор объектов ввода-вывода линеаризации.

ioOutput(1) = linio('airframemarginEx/Airframe Model',1,'looptransfer');
ioOutput(2) = linio('airframemarginEx/Airframe Model',2,'looptransfer');

Линеаризируйте модель, чтобы получить передаточные функции без разомкнутого контура. В данном примере используйте рабочую точку, заданную в модели. Передачей цикла на входе объекта является SISO, в то время как передачей цикла на выходах является 2 на 2.

Li = linearize('airframemarginEx',ioInput);   % SISO
Lo = linearize('airframemarginEx',ioOutput);  % MIMO

Классическое усиление и Запасы по фазе

Для вычисления классических запасов по амплитуде и запасов по фазе используйте allmargin. Для передаточной функции без разомкнутого контура, allmargin принимает цикл отрицательной обратной связи.

Передаточная функция разомкнутого контура, возвращенная linearize команда является фактическим линеаризированным разомкнутым контуром характеристикой модели в точке анализа. Таким образом, для разомкнутого контура L, реакция с обратной связью всей модели является положительной обратной связью цикла.

Поэтому используйте -L чтобы сделать allmargin вычислите запасы устойчивости с положительной обратной связью. Вычислите классический коэффициент усиления и запасов по фазе на входе объекта.

Si = allmargin(-Li)
Si = 

  struct with fields:

     GainMargin: [0.1633 17.6572]
    GMFrequency: [1.5750 47.5284]
    PhaseMargin: 44.4554
    PMFrequency: 5.3930
    DelayMargin: 14.3869
    DMFrequency: 5.3930
         Stable: 1

Структура Si содержит информацию о классических запасах устойчивости. Для образца, Li.GMFrequency задает две частоты, на которых фаза отклика без разомкнутого контура пересекает -180 °. Li.GainMargin задает запас по амплитуде на каждой из этих частот. Запас по амплитуде является величина, на которую коэффициент усиления цикла может изменяться на этой частоте при сохранении устойчивости замкнутого контура.

Вычислите запасы устойчивости на выходе объекта.

So = allmargin(-Lo);

Потому что существуют два выхода канала, allmargin возвращает массив, содержащий одну структуру для каждого канала. Каждая запись содержит поля, вычисленные для этого канала, при этом другой канал обратной связи закрыт. Индексируйте в структуру So для получения запасов устойчивости для каждого канала. Например, исследуйте поля относительно изменений усиления или изменений фазы в q выход объекта, который является вторым выходом.

So(2)
ans = 

  struct with fields:

     GainMargin: [0.3456 17.4301]
    GMFrequency: [3.4362 49.8484]
    PhaseMargin: [-78.2436 52.6040]
    PMFrequency: [1.5686 6.5428]
    DelayMargin: [313.5079 14.0324]
    DMFrequency: [1.5686 6.5428]
         Stable: 1

Дисковое усиление и Запасы по фазе

Дисковые поля обеспечивают более сильную гарантию устойчивости, чем классический коэффициент усиления и запасов по фазе. Дисковый анализ запаса моделей коэффициент усиления и изменений фазы как сложную неопределенность на разомкнутый контур отклика системы. Запас диска является наименьшей такой неопределенностью, которая совместима с стабильностью замкнутого цикла. (Общие сведения о полях диска см. в разделе Анализ устойчивости с использованием полей диска.)

Для вычисления дисковых полей используйте diskmargin. Как allmargin, а diskmargin команда принимает систему отрицательной обратной связи. Таким образом, используйте -Li для вычисления дисковых полей на входе объекта.

DMi = diskmargin(-Li)
DMi = 

  struct with fields:

           GainMargin: [0.4419 2.2628]
          PhaseMargin: [-42.3153 42.3153]
           DiskMargin: 0.7740
           LowerBound: 0.7740
           UpperBound: 0.7740
            Frequency: 4.2515
    WorstPerturbation: [1x1 ss]

Полевые DMi.GainMargin говорит вам, что коэффициент усиления без разомкнутого контура на входе объекта может изменяться в любом множителе между около 0,44 и около 2,26 без потери устойчивости системы с обратной связью. Дисковые поля учитывают изменения на всех частотах.

Для передаточной функции цикла MIMO, такой как ответ Lo На выходах объекта существует два типа дисковых запасов устойчивости. Циклы -в - времени являются запасами устойчивости в каждом канале с другими циклами закрытыми. Многоуровневые поля являются запасами для независимых изменений по усилению (или фазе) в обоих каналах одновременно. diskmargin вычисляет и то, и другое.

[DMo,MMo] = diskmargin(-Lo);

Поля цикла в момент времени возвращаются как массив структур DMo с одной записью для каждого канала. Например, исследуйте поля для изменений усиления или изменений фазы в q выход объекта с az цикл замкнут, и сравнить с классическими полями, заданными So(2) выше.

DMo(2)
ans = 

  struct with fields:

           GainMargin: [0.3771 2.6521]
          PhaseMargin: [-48.6811 48.6811]
           DiskMargin: 0.9047
           LowerBound: 0.9047
           UpperBound: 0.9047
            Frequency: 4.4982
    WorstPerturbation: [2x2 ss]

Многолучевой запас, MMo, учитывает циклическое взаимодействие путем рассмотрения одновременных изменений в усилении (или фазе) по всем каналам обратной связи. Это обычно дает наиболее реалистичную оценку запаса устойчивости для многоуровневых систем управления.

MMo
MMo = 

  struct with fields:

           GainMargin: [0.6238 1.6030]
          PhaseMargin: [-26.0867 26.0867]
           DiskMargin: 0.4633
           LowerBound: 0.4633
           UpperBound: 0.4643
            Frequency: 3.6830
    WorstPerturbation: [2x2 ss]

MMo.GainMargin показывает, что коэффициент усиления в обоих выходных каналах может изменяться независимо на коэффициенты между приблизительно 0,62 и 1,60 без ущерба для устойчивости замкнутого контура. MMo.PhaseMargin показывает, что стабильность сохраняется при независимых фазовых изменениях в каждом канале до ± 26 °. Использование diskmarginplot для графического анализа мультициклов.

diskmarginplot(-Lo)

Это показывает дисковое усиление и запасы по фазе как функцию частоты. The MMo значения, возвращенные diskmargin соответствуют самому слабому дисковому запасу по частоте.

Маржи в нескольких рабочих точках

Когда вы используете linearizeможно предоставить несколько рабочих точек, чтобы сгенерировать массив линеаризаций системы. allmargin и diskmargin может работать с линейными массивами моделей, чтобы вернуть поля в нескольких рабочих точках. Для примера линеаризируйте систему планера при трех моментальных снимках симуляции.

Snap = [0; 2; 5];
LiSnap = linearize('airframemarginEx',ioInput,Snap);
LoSnap = linearize('airframemarginEx',ioOutput,Snap);

LiSnap - массив линейных моделей SISO 3 на 1, один для передачи цикла на входе объекта, полученном во время каждого моментального снимка. Точно так же LoSnap - массив 3 на 1 линейных моделей с 2 входами, 2 выходами, представляющий передачи цикла на выходах объекта в каждый момент моментального снимка. Вычислите классический коэффициент усиления и запасов по фазе на входах объекта в три раза.

SiSnap = allmargin(-LiSnap);

Каждая запись в массиве структур SiSnap содержит классическую информацию о полях для соответствующего времени моментального снимка. Например, исследуйте классические поля для второй записи, t = 2 с.

SiSnap(2)
ans = 

  struct with fields:

     GainMargin: [0.0171 18.2489]
    GMFrequency: [0.0502 51.4426]
    PhaseMargin: 93.1051
    PMFrequency: 2.8476
    DelayMargin: 57.0662
    DMFrequency: 2.8476
         Stable: 1

Вычислите поля диска на выходах объекта.

[DMoSnap,MMoSnap] = diskmargin(-LoSnap);

Поскольку существует два канала обратной связи и три раза моментального снимка, массив структуры, содержащий цикл -в - времени дисковые поля, имеет размерности 2 на 3. Первая размерность предназначена для каналов обратной связи, а второе - для моментального снимка времени. Другими словами, DMoSnap(j,k) содержит поля для канала j во время моментального снимка k. Например, исследуйте поля диска во втором канале обратной связи во время третьего моментального снимка, t = 5 с.

DMoSnap(2,3)
ans = 

  struct with fields:

           GainMargin: [0.1345 7.4338]
          PhaseMargin: [-74.6771 74.6771]
           DiskMargin: 1.5257
           LowerBound: 1.5257
           UpperBound: 1.5257
            Frequency: 24.1993
    WorstPerturbation: [2x2 ss]

Существует только один набор полей multiloop для каждого времени моментального снимка, так что MMoSnap представляет собой массив структур 3 на 1.

Как и прежде, можно также построить график полей multiloop. Теперь существует три кривые, по одной на каждый моментальный снимок времени. Щелкните на кривой, чтобы определить время моментального снимка, которому он соответствует.

diskmarginplot(-LoSnap)

См. также

| | | (Simulink Control Design)

Похожие темы