Устойчивая настройка системы позиционирования

В этом примере показано, как учесть неопределенность модели при настройке системы управления движения.

Фон

Этот пример совершенствовал проект, обсужденный в "Настройке Цифрового примера" Системы управления Движения. Систему позиционирования на рассмотрении показывают ниже.

Рисунок 1: Цифровое оборудование управления движением

Физическую модель объекта показывают в блоке "Plant Model" модели Simulink rct_dmcNotch:

Рисунок 2: уравнения движения

В более раннем примере мы настроили контроллер, использующий "четкие" значения в физических параметрах$J_1,J_2,b_1,b_2,b_{12},k$. В действительности эти значения параметров только известны приблизительно и могут варьироваться в зависимости от времени. Поскольку получившиеся несоответствия модели могут оказать негативное влияние на производительность контроллера, мы должны объяснить неопределенность параметра во время настройки, чтобы гарантировать устойчивую производительность в области значений возможных значений параметров. Этот процесс называется устойчивой настройкой.

Моделирование неопределенности

Примите 25%-ю неопределенность на значении жесткости $k$и 50%-ю неопределенность на значениях коэффициентов демпфирования$b_1,b_2,b_{12}$. Используйте ureal возразите, чтобы смоделировать эти области значений неопределенности.

b1 = ureal('b1',1e-6,'Percent',50);
b2 = ureal('b2',1e-6,'Percent',50);
b12 = ureal('b12',5e-7,'Percent',50);
k = ureal('k',0.013,'Percent',25);

Используя уравнения движения в рисунке 2, мы можем вывести модель в пространстве состояний G из объекта, выраженного в терминах$J_1,J_2,b_1,b_2,b_{12},k$:

J1 = 1e-6; J2 = 1.15e-7;
A = [0 1 0 0; -k/J1 -(b1+b12)/J1 k/J1 b12/J1; 0 0 0 1; k/J2 b12/J2 -k/J2 -(b2+b12)/J2 ];
B = [ 0; 1/J1 ; 0	; 0 ];
C = [ 0  0  1  0 ];
D  = 0;
G = ss(A,B,C,D,'InputName','u','OutputName','pos_L')
G =

  Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 4 states.
  The model uncertainty consists of the following blocks:
    b1: Uncertain real, nominal = 1e-06, variability = [-50,50]%, 1 occurrences
    b12: Uncertain real, nominal = 5e-07, variability = [-50,50]%, 1 occurrences
    b2: Uncertain real, nominal = 1e-06, variability = [-50,50]%, 1 occurrences
    k: Uncertain real, nominal = 0.013, variability = [-25,25]%, 1 occurrences

Type "G.NominalValue" to see the nominal value, "get(G)" to see all properties, and "G.Uncertainty" to interact with the uncertain elements.

Обратите внимание на то, что получившаяся модель G зависит от неопределенных параметров$k, b_1, b_2, b_{12}$. Оценить, как неопределенность влияет на объект, график Предвещала ответ для различных значений$(b_1,b_2,b_{12},k)$. По умолчанию, bode функционируйте использует 20 случайным образом выбранных значений в области значений неопределенности. Обратите внимание на то, что и затухание и собственная частота основного резонанса затронуты.

rng(0), bode(G,{1e0,1e4})

Номинальная настройка

Чтобы сравнить номинальную и устойчивую настройку, мы сначала повторяем номинальный проект, сделанный в "Настройке Цифрового примера" Системы управления Движения. Контроллер состоит из компенсатора ведущей задержки и фильтра метки:

% Tunable lead-lag
LL = tunableTF('LL',1,1);

% Tunable notch (s^2+2*zeta1*wn*s+wn^2)/(s^2+2*zeta2*wn*s+wn^2)
wn = realp('wn',300);   wn.Minimum = 300;
zeta1 = realp('zeta1',1);   zeta1.Minimum = 0;   zeta1.Maximum = 1;
zeta2 = realp('zeta2',1);   zeta2.Minimum = 0;   zeta2.Maximum = 1;
N = tf([1 2*zeta1*wn wn^2],[1 2*zeta2*wn wn^2]);

% Overall controller
C = N * LL;

Используйте feedback создавать модель T0 с обратной связью это включает и настраиваемые и неопределенные элементы.

AP = AnalysisPoint('u',1);  % to access control signal u
T0 = feedback(G*AP*C,1);
T0.InputName = 'ref'
T0 =

  Generalized continuous-time state-space model with 1 outputs, 1 inputs, 7 states, and the following blocks:
    LL: Parametric SISO transfer function, 1 zeros, 1 poles, 1 occurrences.
    b1: Uncertain real, nominal = 1e-06, variability = [-50,50]%, 1 occurrences
    b12: Uncertain real, nominal = 5e-07, variability = [-50,50]%, 1 occurrences
    b2: Uncertain real, nominal = 1e-06, variability = [-50,50]%, 1 occurrences
    k: Uncertain real, nominal = 0.013, variability = [-25,25]%, 1 occurrences
    u: Analysis point, 1 channels, 1 occurrences.
    wn: Scalar parameter, 6 occurrences.
    zeta1: Scalar parameter, 1 occurrences.
    zeta2: Scalar parameter, 1 occurrences.

Type "ss(T0)" to see the current value, "get(T0)" to see all properties, and "T0.Blocks" to interact with the blocks.

Основные настраивающие цели:

  • Пропускная способность разомкнутого цикла 50 рад/с

  • Усиление и запасы устойчивости фазы по крайней мере 7,6 дБ и 45 градусов

Чтобы предотвратить быструю динамику, мы далее ограничиваем собственную частоту полюсов с обратной связью.

s = tf('s');
R1 = TuningGoal.LoopShape('u',50/s);
R2 = TuningGoal.Margins('u',7.6,45);
R3 = TuningGoal.Poles('u',0,0,1e3);   % natural frequency < 1000

Теперь настройте параметры контроллера для номинального объекта, удовлетворяющего трем настраивающимся голам.

T = systune(getNominal(T0),[R1 R2 R3]);
Final: Soft = 0.923, Hard = -Inf, Iterations = 108

Окончательное значение указывает, что все цели проекта были номинально достигнуты, и ответ с обратной связью выглядит хорошим.

step(T), title('Nominal closed-loop response')

Насколько устойчивый этот проект? Чтобы узнать, обновите неопределенную модель T0 с обратной связью номинально настроенными параметрами контроллера и графиком переходной процесс с обратной связью для 10 случайных выборок неопределенных параметров.

Tnom = setBlockValue(T0,T);       % update T0 with tuned valued from systune
[Tnom10,S10] = usample(Tnom,10);  % sample the uncertainty
step(Tnom10,0.5)
title('Closed-loop response for 10 uncertain parameter values')

Этот график показывает значительные колебания при отодвигании от номинальной стоимости$b_1,b_2,b_{12},k$.

Устойчивая настройка

Затем повторно настройте контроллер, использующий неопределенную модель T0 с обратной связью вместо его номинальной стоимости. Это сообщает systune осуществлять настраивающиеся цели в целой области значений неопределенности.

[Trob,fSoft,~,Info] = systune(T0,[R1 R2 R3]);
Soft: [0.923,Inf], Hard: [-Inf,-Inf], Iterations = 108
Soft: [1.02,3.74], Hard: [-Inf,-Inf], Iterations = 38
Soft: [1.25,1.85], Hard: [-Inf,-Inf], Iterations = 41
Soft: [1.26,1.26], Hard: [-Inf,-Inf], Iterations = 29
Final: Soft = 1.26, Hard = -Inf, Iterations = 216

Достигнутая производительность немного хуже, чем для номинальной настройки, которая ожидается, учитывая дополнительное ограничение робастности. Сравните производительность с номинальным проектом.

Trob10 = usubs(Trob,S10); % use the same 10 uncertainty samples
step(Tnom10,Trob10,0.5)
title('Closed-loop response for 10 uncertain parameter values')
legend('Nominal tuning','Robust tuning')

Устойчивый проект имеет больше перерегулирования, но в основном свободен от колебаний. Проверьте, что резонанс объекта надежно ослабляется.

viewGoal(R1,Trob)

Наконец, сравните номинальные и устойчивые контроллеры.

Cnom = setBlockValue(C,Tnom);
Crob = setBlockValue(C,Trob);
bode(Cnom,Crob), grid, title('Controller')
legend('Nominal tuning','Robust tuning')

Не удивительно, устойчивый диспетчер использует более широкую и более глубокую метку, чтобы разместить затухание и изменения собственной частоты резонанса объекта. Используя systuneустойчивая настраивающая возможность, можно автоматически расположить и калибровать метку, чтобы лучше всего компенсировать такую изменчивость.

Анализ худшего случая

Четвертый выходной аргумент systune содержит информацию о комбинациях худшего случая неопределенных параметров. Эти комбинации перечислены в порядке убывания серьезности.

WCU = Info.wcPert
WCU = 

  5x1 struct array with fields:

    b1
    b12
    b2
    k

WCU(1)  % worst-overall combination
ans = 

  struct with fields:

     b1: 5.0000e-07
    b12: 7.5000e-07
     b2: 5.0000e-07
      k: 0.0163

Чтобы анализировать ответы худшего случая, замените этими значениями параметров в модели Trob с обратной связью.

Twc = usubs(Trob,WCU);
step(Twc,0.5)
title('Closed-loop response for worst-case parameter combinations')

Связанные примеры

Больше о

Для просмотра документации необходимо авторизоваться на сайте