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

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

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

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

Например, рассмотрите модель объекта управления

P(s)=γτ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 из 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: Значение номинальной и худшей чувствительности к регистру