В этом примере показано, как использовать неопределенные объекты в 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.
Мы можем теперь сгенерировать 20 случайных выборок неопределенных параметров gamma
и tau
и постройте соответствующие переходные процессы объекта и моделей с обратной связью:
subplot(2,1,1); step(usample(P,20)), title('Plant response (20 samples)') subplot(2,1,2); step(usample(CLP,20)), title('Closed-loop response (20 samples)')
Рисунок 1: Переходные процессы объекта и моделей с обратной связью
Нижний график показывает, что система с обратной связью довольно устойчива несмотря на значительные колебания усиления DC объекта. Это - желательная, и общая характеристика правильно спроектированной системы с обратной связью.
Теперь мы будем основываться на примере двигателя постоянного тока Control System Toolbox™ путем добавления неопределенности параметра и несмоделированной динамики, и исследования робастности контроллера сервомотора к такой неопределенности.
Номинальная модель двигателя постоянного тока задана сопротивлением R, индуктивность L, эдс постоянный Кбит, арматура постоянный км, линейная аппроксимация вязкого трения 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'};
H является мультивходом, мультивыведите неопределенную систему, как замечено по ее отображению.
H
H = Uncertain continuous-time state-space model with 3 outputs, 2 inputs, 1 states. The model uncertainty consists of the following blocks: 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 "H.NominalValue" to see the nominal value, "get(H)" to see all properties, and "H.Uncertainty" to interact with the uncertain elements.
Двигатель обычно управляет инерцией, динамические характеристики которой связывают прикладной крутящий момент со скоростью изменения угловой скорости. Для твердого тела это - константа. Более реалистическая, но неопределенная, сила модели содержит неизвестные ослабленные резонансы. Используйте 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), следовательно "положительная" обратная связь от 3-го выхода до 2-го входа H
используется, чтобы установить связь. Это приводит к системе с 1 входом (AppliedVoltage
) и 2 выходных параметров, (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 является одно входом, одно выход неопределенная модель двигателя постоянного тока. В аналитических целях мы используем номинальный контроллер, синтезируемый в двигателе постоянного тока в примере Control System Toolbox™.
Cont = tf(84*[.233 1],[.0357 1 0]);
Во-первых, давайте сравним переходной процесс номинального двигателя постоянного тока с 20 выборками неопределенной модели двигателя постоянного тока:
clf step(P.NominalValue,'r-+',usample(P,20),'b',3) legend('Nominal','Samples')
Рисунок 2: анализ переходного процесса разомкнутого цикла
Точно так же мы можем сравнить Диаграмму Боде номинала разомкнутого цикла (красные) и произведенные (синие) неопределенные модели двигателя постоянного тока.
om = logspace(-1,2,80); Pg = ufrd(P,om); bode(usample(Pg,25),'b',Pg.NominalValue,'r-+'); legend('Samples','Nominal')
Рисунок 3: анализ Диаграммы Боде разомкнутого цикла
В этом разделе мы анализируем устойчивость и робастность производительности системы двигателя постоянного тока с обратной связью. Наш начальный анализ номинальной системы с обратной связью указывает, что номинальная система с обратной связью очень устойчива с 10,5 запасами по амплитуде и 54,3 градуса запаса по фазе.
margin(P.NominalValue*Cont)
Рисунок 4: анализ робастности с обратной связью
allmargin
и diskmargin
функции обеспечивают всесторонний анализ устойчивости для многомерных систем с обратной связью. Для системы управления с каналами обратной связи N, allmargin
функция возвращает классические запасы по амплитуде и фазе SM
для каждого отдельного канала обратной связи (цикл за один раз поля). diskmargin
функция возвращается:
Дисковые поля DM
для каждого отдельного канала обратной связи. Дисковое поле для j-th канала обратной связи указывает тем, насколько передаточная функция Lj (s) может варьироваться, прежде чем этот конкретный цикл идет нестабильный.
Многоконтурное дисковое поле MM
Это указывает, сколько одновременного, независимого усиления и изменений фазы может быть допущено в каждом канале обратной связи, прежде чем полная система с обратной связью пойдет нестабильная (то же самое как DM для одноконтурных систем управления).
SM = allmargin(P.NominalValue*Cont)
SM = struct with fields:
GainMargin: 12.4154
GMFrequency: 16.4229
PhaseMargin: 65.7794
PMFrequency: 2.9349
DelayMargin: 0.3912
DMFrequency: 2.9349
Stable: 1
[DM,MM] = diskmargin(P.NominalValue*Cont);
Классические запасы устойчивости:
SM
SM = struct with fields:
GainMargin: 12.4154
GMFrequency: 16.4229
PhaseMargin: 65.7794
PMFrequency: 2.9349
DelayMargin: 0.3912
DMFrequency: 2.9349
Stable: 1
Дисковое поле:
DM
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
Вспомните, что объект двигателя постоянного тока сомнителен. В дополнение к стандартным запасам по амплитуде и фазе мы можем использовать wcmargin
функция, чтобы определить усиление/запасы по фазе худшего случая для обратной связи контроллера объекта. wcmargin
функция вычисляет дисковые запасы по амплитуде и фазе худшего случая для каждого канала ввода-вывода. Анализ худшего случая показывает возможное ухудшение дисковых запасов по амплитуде и фазе, которые составляли 11 дБ и 59 degs соответственно, к 1.2 дБ и 8 degs, соответственно, в присутствии 5 форм неопределенности, смоделированной в P
.
wcmarg = wcmargin(Pg,Cont)
wcmarg = struct with fields:
GainMargin: [0.8709 1.1482]
PhaseMargin: [-7.8917 7.8917]
Frequency: 5.1152
WCUnc: [1x1 struct]
Sensitivity: [1x1 struct]
Функция чувствительности является стандартной мерой производительности с обратной связью для системы с обратной связью. Давайте вычислим неопределенную функцию чувствительности S
и сравните Предвещать графики величины для номинала, и произвел неопределенную функцию чувствительности.
S = feedback(1,P*Cont); bodemag(usample(S,20),'b',S.Nominal,'r-+'); legend('Samples','Nominal')
Рисунок 5: Величина чувствительности функционирует S.
Во временном интервале функция чувствительности указывает, как хорошо воздействие шага может быть отклонено. Давайте произведем неопределенную функцию чувствительности и давайте построим ее переходной процесс, чтобы видеть изменчивость в характеристиках подавления помех (номинал появляется в красном).
step(usample(S,20),'b',S.Nominal,'r-+',3); title('Disturbance Rejection') legend('Samples','Nominal')
Рисунок 6: Отклонение воздействия шага.
Используйте wcgain
функция, чтобы вычислить значение худшего случая неопределенной чувствительности функционирует усиление (пик через частоту).
Sg = ufrd(S,om); [maxgain,worstuncertainty] = wcgain(Sg); maxgain
maxgain = struct with fields:
LowerBound: 7.4366
UpperBound: 7.4487
CriticalFrequency: 5.1152
С usubs
функция можно заменить значениями худшего случая неопределенности worstuncertainty
в неопределенную чувствительность функционируют S
. Это дает функции худшей чувствительности к регистру Sworst
в целой области значений неопределенности. Обратите внимание на то, что пиковое усиление Sworst
совпадает с нижней границей, вычисленной wcgain
.
Sworst = usubs(S,worstuncertainty); Sgworst = frd(Sworst,Sg.Frequency); norm(Sgworst,inf)
ans = 7.4366
maxgain.LowerBound
ans = 7.4366
Теперь давайте сравним переходные процессы номинальной и худшей чувствительности к регистру:
step(Sworst,'b',S.NominalValue,'r-+',6); title('Disturbance Rejection') legend('Worst-case','Nominal')
Рисунок 7: Номинал и отклонение худшего случая воздействия шага
Наконец, давайте построим, Предвещают графики величины номинала и значения худшего случая функции чувствительности. Заметьте что пиковое значение Sworst
происходит на частоте maxgain.CriticalFrequency
:
bodemag(Sg.NominalValue,'r-+',Sgworst,'b'); legend('Worst-case','Nominal') hold on semilogx(maxgain.CriticalFrequency,20*log10(maxgain.LowerBound),'g*') hold off
Рисунок 8: Величина номинальной и худшей чувствительности к регистру