В этом примере показано, как использовать неопределенные объекты в Robust Control Toolbox™, чтобы смоделировать неопределенные системы и оценить устойчивую устойчивость и устойчивую производительность с помощью аналитических инструментов робастности.
Robust Control Toolbox позволяет вам создать неопределенные элементы, такие как физические параметры, значения которых не известны точно и комбинируют эти элементы в неопределенные модели. Можно затем легко анализировать удар неопределенности на производительности системы управления.
Например, рассмотрите модель объекта управления
где gamma
может расположиться в интервале [3,5] и tau
имеет среднее значение 0.5 с 30%-й изменчивостью. Можно создать неопределенную модель P (s), как в этом примере:
gamma = ureal('gamma',4,'range',[3 5]); tau = ureal('tau',.5,'Percentage',30); P = tf(gamma,[tau 1])
P = Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 1 states. The model uncertainty consists of the following blocks: gamma: Uncertain real, nominal = 4, range = [3,5], 1 occurrences tau: Uncertain real, nominal = 0.5, variability = [-30,30]%, 1 occurrences Type "P.NominalValue" to see the nominal value, "get(P)" to see all properties, and "P.Uncertainty" to interact with the uncertain elements.
Предположим, что вы спроектировали интегральный контроллер C
для номинального объекта (gamma
=4 и tau
=0.5). Узнать как изменения gamma
и tau
влияйте на объект и производительность с обратной связью, сформируйте систему с обратной связью CLP
от C
и P
.
KI = 1/(2*tau.Nominal*gamma.Nominal); C = tf(KI,[1 0]); CLP = feedback(P*C,1)
CLP = Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 2 states. The model uncertainty consists of the following blocks: gamma: Uncertain real, nominal = 4, range = [3,5], 1 occurrences tau: Uncertain real, nominal = 0.5, variability = [-30,30]%, 1 occurrences Type "CLP.NominalValue" to see the nominal value, "get(CLP)" to see all properties, and "CLP.Uncertainty" to interact with the uncertain elements.
Постройте переходной процесс объекта и системы с обратной связью. step
команда автоматически генерирует 20 случайных выборок неопределенных параметров gamma
и tau
и строит соответствующие переходные процессы.
subplot(2,1,1); step(P), title('Plant response (20 samples)') subplot(2,1,2); step(CLP), title('Closed-loop response (20 samples)')
Рисунок 1: Переходные процессы объекта и моделей с обратной связью
Нижний график показывает, что система с обратной связью довольно устойчива несмотря на значительные колебания усиления DC объекта. Это - желательная и общая характеристика правильно спроектированной системы с обратной связью.
Этот пример основывается на Отслеживании уставки в качестве примера двигателя постоянного тока с Изменениями Параметра (Control System Toolbox) путем добавления неопределенности параметра и несмоделированной динамики, чтобы исследовать робастность контроллера сервомотора к такой неопределенности.
Номинальная модель двигателя постоянного тока задана сопротивлением R
, индуктивность L
, эдс постоянный Kb
, арматура постоянный Km
, линейная аппроксимация вязкого трения Kf
и инерционная загрузка J
. Каждый из этих компонентов варьируется в определенной области значений значений. Константы сопротивления и индуктивности располагаются в ±40% их номинальной стоимости. Используйте ureal
создать эти неопределенные параметры.
R = ureal('R',2,'Percentage',40); L = ureal('L',0.5,'Percentage',40);
По физическим причинам, значениям Kf
и Kb
то же самое, даже если они сомнительны. В этом примере номинальная стоимость 0.015 с областью значений между 0,012 и 0.019.
K = ureal('K',0.015,'Range',[0.012 0.019]); Km = K; Kb = K;
Вязкое трение, Kf
, имеет номинальную стоимость 0,2 с 50%-м изменением его значения.
Kf = ureal('Kf',0.2,'Percentage',50);
Ток в электрической схеме и крутящий момент применились к ротору, может быть выражен в терминах приложенного напряжения и угловой скорости. Создайте передаточную функцию H
связь этих переменных, и делает AngularSpeed
выход H
для дальнейшего использования.
H = [1;0;Km] * tf(1,[L R]) * [1 -Kb] + [0 0;0 1;0 -Kf]; H.InputName = {'AppliedVoltage';'AngularSpeed'}; H.OutputName = {'Current';'AngularSpeed';'RotorTorque'};
Двигатель обычно управляет инерцией, динамические характеристики которой связывают прикладной крутящий момент со скоростью изменения угловой скорости. Для твердого тела это значение является константой. Более реалистическая, но неопределенная, сила модели содержит неизвестные ослабленные резонансы. Используйте ultidyn
возразите, чтобы смоделировать неопределенную линейную независимую от времени динамику. Установите номинальное значение инерции твердого тела к 0,02, и мы включаем 15%-ю динамическую неопределенность в мультипликативную форму.
J = 0.02*(1 + ultidyn('Jlti',[1 1],'Type','GainBounded','Bound',0.15,... 'SampleStateDim',4));
Это - простой вопрос, чтобы связать AngularSpeed
введите к RotorTorque
выведите через неопределенную инерцию, J
, использование lft
команда. AngularSpeed
введите равняется RotorTorque/(J*s)
. Поэтому используйте "положительную" обратную связь от третьего выхода до второго входа H
устанавливать связь. Эта связь приводит к системе с одним входом (AppliedVoltage
) и два выходных параметров (Current
и AngularSpeed
).
Pall = lft(H,tf(1,[1 0])/J);
Выберите только AngularSpeed
выведите для остатка от анализа управления.
P = Pall(2,:)
P = Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 2 states. The model uncertainty consists of the following blocks: Jlti: Uncertain 1x1 LTI, peak gain = 0.15, 1 occurrences K: Uncertain real, nominal = 0.015, range = [0.012,0.019], 2 occurrences Kf: Uncertain real, nominal = 0.2, variability = [-50,50]%, 1 occurrences L: Uncertain real, nominal = 0.5, variability = [-40,40]%, 1 occurrences R: Uncertain real, nominal = 2, variability = [-40,40]%, 1 occurrences Type "P.NominalValue" to see the nominal value, "get(P)" to see all properties, and "P.Uncertainty" to interact with the uncertain elements.
P
одно вход, одно выход неопределенная модель двигателя постоянного тока. В аналитических целях используйте следующий контроллер.
Cont = tf(84*[.233 1],[.0357 1 0]);
Во-первых, сравните переходной процесс номинального двигателя постоянного тока с 15 выборками неопределенной модели двигателя постоянного тока. Используйте usample
явным образом задавать количество случайных выборок.
clf step(usample(P,15),P.NominalValue,3) legend('Samples','Nominal')
Рисунок 2: переходной процесс Объекта
Точно так же сравните Предвещать ответ номинальных (красных) и произведенных (синих) неопределенных моделей двигателя постоянного тока.
bode(usample(P,15),P.NominalValue); legend('Samples','Nominal')
Рисунок 3: Объект Предвещает ответ
В этом разделе анализируйте робастность контроллера двигателя постоянного тока. Номинальный анализ системы с обратной связью указывает, что обратная связь очень устойчива с 22 полями усиления дБ и 66 градусов запаса по фазе.
margin(P.NominalValue*Cont)
Рисунок 4: анализ робастности с обратной связью
diskmargin
функция вычисляет находящиеся на диске запасы по амплитуде и фазе. Путем моделирования усиления и изменений фазы на всех частотах и во всей обратной связи, дисковые поля имеют тенденцию быть более точными оценками робастности, особенно в многоконтурных системах управления. Вычислите находящиеся на диске поля для цикла двигателя постоянного тока.
DM = diskmargin(P.NominalValue*Cont)
DM = struct with fields:
GainMargin: [0.2792 3.5822]
PhaseMargin: [-58.8054 58.8054]
DiskMargin: 1.1271
LowerBound: 1.1271
UpperBound: 1.1271
Frequency: 5.0062
WorstPerturbation: [1x1 ss]
В то время как меньший, чем классические запасы по амплитуде и фазе, находящиеся на диске поля по существу подтверждают, что номинальная обратная связь очень устойчива. Теперь вспомните, что объект двигателя постоянного тока сомнителен. Как смоделированная неопределенность влияет на эти запасы устойчивости? Для быстрого понимания постройте находящиеся на диске запасы по амплитуде и фазе для 20 выборок неопределенного ответа разомкнутого цикла.
diskmarginplot(P*Cont,P.NominalValue*Cont) legend('Samples','Nominal')
Некоторые комбинации неопределенности объекта приводят к меньшим полям. График показывает только небольшую выборку. Используйте анализ худшего случая, чтобы узнать, как плохо поля могут действительно добраться. wcdiskmargin
функция непосредственно вычисляет запасы по амплитуде и фазе худшего случая для смоделированной неопределенности.
wcDM = wcdiskmargin(P*Cont,'siso')
wcDM = struct with fields:
GainMargin: [0.8729 1.1457]
PhaseMargin: [-7.7676 7.7676]
DiskMargin: 0.1358
LowerBound: 0.1358
UpperBound: 0.1361
CriticalFrequency: 4.9827
WorstPerturbation: [1x1 ss]
mag2db(wcDM.GainMargin)
ans = 1×2
-1.1812 1.1812
Здесь поля худшего случая составляют только 1,2 дБ и 7,8 градусов, сигнализируя, что замкнутый цикл почти нестабилен для некоторых комбинаций неопределенных элементов.
Функция чувствительности является стандартной мерой производительности с обратной связью для системы с обратной связью. Вычислите неопределенную функцию чувствительности S
и сравните Предвещать графики величины для номинала, и произвел неопределенные функции чувствительности.
S = feedback(1,P*Cont); bodemag(S,S.Nominal) legend('Samples','Nominal')
Рисунок 5: Величина чувствительности функционирует S.
Во временном интервале функция чувствительности указывает, как хорошо воздействие шага может быть отклонено. Постройте его переходной процесс, чтобы видеть изменчивость в характеристиках подавления помех (номинал появляется в красном).
step(S,S.Nominal) title('Disturbance Rejection') legend('Samples','Nominal')
Рисунок 6: Отклонение воздействия шага.
Используйте wcgain
функция, чтобы вычислить значение худшего случая пикового усиления функции чувствительности.
[maxgain,worstuncertainty] = wcgain(S); maxgain
maxgain = struct with fields:
LowerBound: 7.5199
UpperBound: 7.5358
CriticalFrequency: 4.9980
С usubs
функция можно заменить значениями худшего случая неопределенных элементов в неопределенную функцию чувствительности S
. Это дает функции худшей чувствительности к регистру Sworst
в целой области значений неопределенности. Обратите внимание на то, что пиковое усиление Sworst
совпадает с нижней границей, вычисленной wcgain
.
Sworst = usubs(S,worstuncertainty); norm(Sworst,inf)
ans = 7.5199
maxgain.LowerBound
ans = 7.5199
Теперь сравните переходные процессы номинальной и худшей чувствительности к регистру.
step(Sworst,S.NominalValue,6); title('Disturbance Rejection') legend('Worst-case','Nominal')
Рисунок 7: Номинал и отклонение худшего случая воздействия шага
Очевидно некоторые комбинации неопределенных элементов значительно ухудшают способность контроллера быстро отклонить воздействия. Наконец, постройте величину номинала и значения худшего случая функции чувствительности. Заметьте что пиковое значение Sworst
происходит на частоте maxgain.CriticalFrequency
:
bodemag(Sworst,S.NominalValue) legend('Worst-case','Nominal') hold on semilogx(maxgain.CriticalFrequency,20*log10(maxgain.LowerBound),'g*')
Рисунок 8: Величина номинальной и худшей чувствительности к регистру