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

В этом примере показано, как использовать неопределенные объекты в 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.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: Величина номинальной и худшей чувствительности к регистру