Этот пример показывает, как использовать неопределенные объекты в 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.8710 1.1482]
PhaseMargin: [-7.8908 7.8908]
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.4431
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: Значение номинальной и худшей чувствительности к регистру