Этот пример иллюстрирует, как вычислить классические и находящиеся на диске запасы по амплитуде и фазе цикла управления, смоделированного в Simulink®. Чтобы вычислить запасы устойчивости, линеаризуйте модель, чтобы извлечь ответы разомкнутого контура в одной или нескольких рабочих точках интереса. Затем используйте allmargin
или diskmargin
вычислить классические или находящиеся на диске запасы устойчивости, соответственно.
В данном примере используйте модель 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
дает запас по амплитуде на каждой из тех частот. Запас по амплитуде является суммой, которой усиление цикла может варьироваться на той частоте при сохранении устойчивости с обратной связью.
Вычислите запасы устойчивости на объекте выход.
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)
Это показывает находящиеся на диске запасы по амплитуде и фазе в зависимости от частоты. MMo
значения возвращены diskmargin
соответствуйте самому слабому дисковому полю через частоту.
Когда вы используете linearize
, можно обеспечить несколько рабочих точек, чтобы сгенерировать массив линеаризации системы. allmargin
и diskmargin
может работать с линейными массивами моделей, чтобы возвратить поля в нескольких рабочих точках. Например, линеаризуйте систему корпуса в три раза снимка состояния симуляции.
Snap = [0; 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
содержит классическую граничную информацию в течение соответствующего времени снимка состояния. Например, исследуйте классические поля на вторую запись, 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]
Существует только один набор многоконтурных полей в течение каждого раза снимка состояния, таким образом, MMoSnap
массив структур 3 на 1.
Как прежде, можно также построить многоконтурные поля. Существует теперь три кривые, один в течение каждого раза снимка состояния. Нажмите на кривую, чтобы идентифицировать, какому времени снимка состояния она соответствует.
diskmarginplot(-LoSnap)
allmargin
| diskmargin
| diskmarginplot
| linearize
(Simulink Control Design)