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

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

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

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

open_system('airframemarginEx.slx')

Система является двухканальной обратной связью. Объект является с одним входом, 2D выходной подсистемой Airframe Model, и контроллер является 2D входом, система с одним выходом, входные параметры которой являются нормальным ускорением 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 дает поле усиления на каждой из тех частот. Поле усиления является суммой, которой усиление цикла может отличаться на той частоте при сохранении устойчивости с обратной связью.

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

So = allmargin(-Lo)
So = 

  2x1 struct array with fields:

    GainMargin
    GMFrequency
    PhaseMargin
    PMFrequency
    DelayMargin
    DMFrequency
    Stable

Индексируйте в структуру, чтобы получить запасы устойчивости для каждого канала. Например, исследуйте поля относительно изменений усиления или изменений фазы в 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

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

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

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

Цикл за один раз поля возвращен как массив структур DMo с одной записью для каждого канала. Например, исследуйте поля на изменения усиления или изменения фазы в q вывод объекта с замкнутым кругом az.

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

Многоконтурное поле, 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

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

Поля в нескольких рабочих точках

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

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

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

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

SiSnap = allmargin(-LiSnap)
SiSnap = 

  3x1 struct array with fields:

    GainMargin
    GMFrequency
    PhaseMargin
    PMFrequency
    DelayMargin
    DMFrequency
    Stable

Каждая запись в массиве структур 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
DMoSnap = 

  2x3 struct array with fields:

    GainMargin
    PhaseMargin
    DiskMargin
    LowerBound
    UpperBound
    Frequency

Первая размерность для каналов обратной связи, и второе в течение времен снимка состояния. Другими словами, 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.2045

Существует только один набор многоконтурных полей в течение каждого раза снимка состояния, таким образом, MMoSnap 1 3 массив структур. Исследуйте многоконтурные дисковые поля во второй раз снимка состояния, t = 2 с.

MMoSnap(2)
ans = 

  struct with fields:

     GainMargin: [0.3518 2.8423]
    PhaseMargin: [-51.2331 51.2331]
     DiskMargin: 0.9589
     LowerBound: 0.9589
     UpperBound: 0.9609
      Frequency: 1.1445

Смотрите также

|

Похожие темы