• Регистрация
Sancho
Sancho +99.25
н/д

Робастное управление сервоконтроллером для двигателя постоянного тока

30.04.2019

В следующем примере рассмотрим, как использовать неопределенные объекты (uncertain objects) в Robust Control Toolbox™ для моделирования неопределенных систем и автоматизировать расчет робастности системы, используя средства анализа надежности.

 

Contents

  • Структуры данных для моделирования неопределенностей
  • Пример двигателя постоянного тока с учетом параметрической неопределенности и немоделируемой динамики
  • Электрические и механические уравнения
  • Неопределенная модель двигателя постоянного тока
  • Анализ разомкнутой системы
  • Анализ робастности замкнутой системы
  • Робастность характеристик подавления возмущений

Структуры данных для моделирования неопределенностей

Robust Control Toolbox позволяет создавать неопределенные элементы, например, физические параметры, значения которых точно неизвестны, и объединять эти элементы в целые модели с неопределенностями. Далее вы можете легко проводить анализ влияния неопределенностей на качество управления системой. Например, рассмотрим модель объекта управления.

$$P(s) = \frac{\gamma}{\tau s + 1}$$

где 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: ЛАЧХ функции чувствительности номинальной системы и для системы в наихудшем случае

 

Теги

    30.04.2019

    Комментарии