Этот пример иллюстрирует, как вычислить классические и дисковые поля усиления и фазы цикла управления, смоделированного в Simulink ®. Чтобы вычислить запасы устойчивости, линеаризируйте модель, чтобы извлечь отклики без разомкнутого контура в одной или нескольких интересующих рабочих точках. Затем используйте allmargin
или diskmargin
для вычисления классических или дисковых запасов устойчивости, соответственно.
В данном примере используйте модель 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)
allmargin
| diskmargin
| diskmarginplot
| linearize
(Simulink Control Design)