Робастное управление сервоконтроллером для двигателя постоянного тока
В следующем примере рассмотрим, как использовать неопределенные объекты (uncertain objects) в Robust Control Toolbox™ для моделирования неопределенных систем и автоматизировать расчет робастности системы, используя средства анализа надежности.
Contents
- Структуры данных для моделирования неопределенностей
- Пример двигателя постоянного тока с учетом параметрической неопределенности и немоделируемой динамики
- Электрические и механические уравнения
- Неопределенная модель двигателя постоянного тока
- Анализ разомкнутой системы
- Анализ робастности замкнутой системы
- Робастность характеристик подавления возмущений
Структуры данных для моделирования неопределенностей
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 по контуру С и Р.
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: Реакция на единичный скачок объекта управления и замкнутой модели с обратной связью
Нижний график показывает, что замкнутая система работает достаточно стабильно, несмотря на значительные колебания в коэффициенте усиления объекта. Это является желательным свойством и общей характеристикой для должным образом разработанной системы управления с обратной связью.
Пример двигателя постоянного тока с учетом параметрической неопределенности и немоделируемой динамики
Теперь на базе 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'};
Н является многомерной неопределенной системой с множеством входов- выходов. Это можно видеть при печати переменной в командной строке:
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 * с). Следовательно, используется "позитивная" обратная связь с 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 является неопределенной моделью двигателя постоянного тока с одним входом и одним выходом. Для анализа мы используем номинальный контроллер, синтезированный для двигателя постоянного тока из примера в справочном руководстве "Getting Started with the 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: Анализ робастности замкнутой системы
Функция loopmargin обеспечивает всесторонний анализ устойчивости для многомерных систем с обратной связью. Для системы управления с N каналами обратной связи функция loopmargin возвращает
- традиционные запасы по амплитуде и по фазе для каждого отдельного канала обратной связи;
- запасы устойчивости на годографе (disk margins) для каждого отдельного канала обратной связи. Запас устойчивости для j-ого канала обратной связи указывает насколько передаточная функция Lj(s) может варьироваться, прежде чем этот конкретный контур станет неустойчивым;
- запасы по годографу для многоконтурных систем. Показывает сколько одновременных, независимых изменений по амплитуде и по фазе могут быть допустимы в каждом канале обратной связи, прежде чем система в целом с обратной связью станет неустойчивой (как в примере для систем управления с одним контуром).
[SM,DM,MM] = loopmargin(P.NominalValue*Cont);
Традиционные запасы устойчивости
SM
SM = GainMargin: 12.4154 GMFrequency: 16.4229 PhaseMargin: 65.7794 PMFrequency: 2.9349 DelayMargin: 0.3912 DMFrequency: 2.9349 Stable: 1
Запасы по годографу
DM
DM = GainMargin: [0.2791 3.5825] PhaseMargin: [-58.8074 58.8074] Frequency: 4.9643
Напомним, что модель ДПТ является неопределенной. В дополнение к стандартным запасам по амплитуде и по фазе мы можем использовать функцию wcmargin для определения наихудших значений запасов для контура обратной связи управления объект-контроллер. Функция wcmargin вычисляет запасы по амплитуде и фазе для наихудшего случая для каждого канала ввода/вывода. Анализ наихудшего случая показывает возможное ухудшение коэффициента усиления амплитуды и по фазе годографа, которые были 11 дБ и 59 град соответственно, до 1.2 дБ и 8 градусов, соответственно, в присутствии 5 форм неопределенностей, моделируемых в P.
wcmarg = wcmargin(Pg,Cont)
wcmarg = GainMargin: [0.8704 1.1489] PhaseMargin: [-7.9252 7.9252] Frequency: 5.1152 WCUnc: [1x1 struct] Sensitivity: [1x1 struct]
Робастность характеристик подавления возмущений
Функция чувствительности является стандартным показателем качества системы с обратной связью. Давайте вычислим неопределенную функцию чувствительности S и сравним диаграмму Боде c номинальной характеристикой.
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 для вычисления наихудшего значения коэффициента усиления неопределенной функции чувствительности (пик по частоте). Так же мы можем использовать функцию wcsens, что бы вычислить это значение.
Sg = ufrd(S,om); [maxgain,worstuncertainty] = wcgain(Sg); maxgain
maxgain = LowerBound: 7.4236 UpperBound: 7.4385 CriticalFrequency: 5.1152
С функцией usubs вы можете заменить наихудшие значения неопределенности worstuncertainty в функцию неопределенной чувствительности S. Это дает функцию наихудшей чувствительности Sworst во всем диапазоне неопределенности. Обратите внимание, что пику усиления Sworst соответствует нижняя граница, вычисляемая wcgain.
Sworst = usubs(S,worstuncertainty); Sgworst = frd(Sworst,Sg.Frequency); norm(Sgworst,inf) maxgain.LowerBound
ans = 7.4236 ans = 7.4236
Теперь давайте сравним переходные характеристики номинальной системы с наихудшей чувствительностью:
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: ЛАЧХ функции чувствительности номинальной системы и для системы в наихудшем случае
Комментарии