Устойчивая устойчивость, устойчивая производительность и Mu-Analysis

В этом примере показано, как использовать Robust Control Toolbox™, чтобы анализировать и определить количество робастности систем управления с обратной связью. Это также обеспечивает понимание связи с Mu-Analysis и mussv функция.

Системное описание

Рисунок 1 показывает блок-схему системы с обратной связью. Модель объекта управления P сомнительно и объект выход y должен быть отрегулирован, чтобы остаться маленьким в присутствии воздействий d и шум измерения n.

Рисунок 1: система с обратной связью для анализа робастности

Подавление помех и шумовая нечувствительность определяются количественно целью производительности

(P(1+KP)-1Wd,(1+PK)-1Wn)

где Wd и Wn функции взвешивания, отражающие содержимое частоты d и n. Здесь Wd является большим в низких частотах и Wn является большим в высоких частотах.

Wd = makeweight(100,.4,.15);
Wn = makeweight(0.5,20,100);
bodemag(Wd,'b--',Wn,'g--')
title('Performance Weighting Functions')
legend('Input disturbance','Measurement noise')

Создание неопределенной модели объекта управления

Неопределенная модель объекта управления P слегка ослабленная, система второго порядка с параметрической неопределенностью в коэффициентах знаменателя и значительном зависимом частоты несмоделированная динамика вне 6 рад/с. Математическая модель похожа:

P(s)=16s2+0.16s+k(1+Wu(s)δ(s))

Параметр k принят, чтобы быть приблизительно на 40% сомнительным, с номинальной стоимостью 16. Зависимая частотой неопределенность во входе объекта принята, чтобы быть приблизительно 30% в низкой частоте, повысившись до 100% на уровне 10 рад/с, и больше кроме того. Создайте неопределенную модель объекта управления P путем создания и объединения неопределенных элементов:

k = ureal('k',16,'Percentage',30);
delta = ultidyn('delta',[1 1],'SampleStateDim',4);
Wu = makeweight(0.3,10,20);
P = tf(16,[1 0.16 k]) * (1+Wu*delta);

Разработка контроллера

Мы используем контроллер, спроектированный в примере "Улучшающаяся Устойчивость При Сохранении Характеристик Разомкнутого цикла". Модель объекта управления, используемая там, оказывается, номинальная стоимость неопределенной модели объекта управления, созданной выше. Для полноты мы повторяем, что команды раньше генерировали контроллер.

K_PI = pid(1,0.8);
K_rolloff = tf(1,[1/20 1]);
Kprop = K_PI*K_rolloff;
[negK,~,Gamma] = ncfsyn(P.NominalValue,-Kprop);
K = -negK;

Замыкание круга

Используйте connect создавать неопределенную модель системы с обратной связью рисунка 1. Назовите сигналы входящими и из каждого блока и позвольте connect сделайте проводное соединение:

P.u = 'uP';  P.y = 'yP';
K.u = 'uK';  K.y = 'yK';
S1 = sumblk('uP = yK + D');
S2 = sumblk('uK = -yP - N');
Wn.u = 'n'; Wn.y = 'N';
Wd.u = 'd'; Wd.y = 'D';
ClosedLoop = connect(P,K,S1,S2,Wn,Wd,{'d','n'},'yP');

Переменная ClosedLoop неопределенная система с двумя входными параметрами и одним выходом. Это зависит от двух неопределенных элементов: действительный параметр k и неопределенный линейный, независимый от времени динамический элемент delta.

ClosedLoop
ClosedLoop =

  Uncertain continuous-time state-space model with 1 outputs, 2 inputs, 10 states.
  The model uncertainty consists of the following blocks:
    delta: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences
    k: Uncertain real, nominal = 16, variability = [-30,30]%, 1 occurrences

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

Устойчивый анализ устойчивости

Классические поля от allmargin укажите на хорошую робастность устойчивости к неструктурированным изменениям усиления/фазы в цикле.

allmargin(P.NominalValue*K)
ans = struct with fields:
     GainMargin: [6.3299 11.1423]
    GMFrequency: [1.6110 15.1667]
    PhaseMargin: [80.0276 -99.6641 63.7989]
    PMFrequency: [0.4472 3.1460 5.2319]
    DelayMargin: [3.1236 1.4443 0.2128]
    DMFrequency: [0.4472 3.1460 5.2319]
         Stable: 1

Делает систему с обратной связью, остаются устойчивыми для всех значений k\delta в диапазонах, указанных выше? Ответ на этот вопрос требует более сложного анализа с помощью robstab функция.

[stabmarg,wcu] = robstab(ClosedLoop);
stabmarg
stabmarg = struct with fields:
           LowerBound: 1.4671
           UpperBound: 1.4701
    CriticalFrequency: 5.8542

Переменная stabmarg дает верхние и нижние границы на устойчивом запасе устойчивости, мере сколько неопределенности на k\delta обратная связь может терпеть прежде, чем стать нестабильной. Например, поле 0,8 указывает, что всего 80% заданного уровня неопределенности могут привести к нестабильности. Здесь поле - приблизительно 1,5, что означает, что замкнутый цикл останется устойчивым максимум для 150% заданной неопределенности.

Переменная wcu содержит комбинацию k и delta самый близкий к их номинальной стоимости, который вызывает нестабильность.

wcu
wcu = struct with fields:
    delta: [1x1 ss]
        k: 23.0563

Мы можем заменить этими значениями в ClosedLoop и проверьте, что эти значения заставляют систему с обратной связью быть нестабильной.

format short e
pole(usubs(ClosedLoop,wcu))

Обратите внимание на то, что собственная частота нестабильного полюса с обратной связью дана stabmarg.CriticalFrequency:

stabmarg.CriticalFrequency
ans = 
   5.8542e+00

Связь с Mu-Analysis

Структурированное сингулярное значение, или μ, математический инструмент, используемый robstab вычислить устойчивый запас устойчивости. Если вы довольны структурированным анализом сингулярного значения, можно использовать mussv функционируйте непосредственно, чтобы вычислить mu как функцию частоты и воспроизвести результаты выше. Функциональный mussv базовый механизм для всех аналитических команд робастности.

Использовать mussv, мы сначала извлекаем (M,Delta) разложение неопределенной модели ClosedLoop с обратной связью, где Delta блочно диагональная матрица (нормированных) неопределенных элементов. 3-й выходной аргумент lftdata, BlkStruct, описывает диагональную блоком структуру Delta и может использоваться непосредственно mussv

[M,Delta,BlkStruct] = lftdata(ClosedLoop);

Для устойчивого анализа устойчивости, только каналы M сопоставленный с каналами неопределенности используются. На основе строки/размера столбца Delta, выберите соответствующие столбцы и строки M. Помните что строки Delta соответствуйте столбцам M, и наоборот. Следовательно, размерность столбца Delta используется, чтобы задать строки M:

szDelta = size(Delta);
M11 = M(1:szDelta(2),1:szDelta(1));

В его самой простой форме Mu-Analysis выполняется на конечной сетке частот. Выберите вектор логарифмически распределенных точек частоты и оцените частотную характеристику M11 по этой сетке частоты.

omega = logspace(-1,2,50);
M11_g = frd(M11,omega);

Вычислите mu(M11) на этих частотах и графике получившиеся нижние и верхние границы:

mubnds = mussv(M11_g,BlkStruct,'s');

LinMagopt = bodeoptions;
LinMagopt.PhaseVisible = 'off'; LinMagopt.XLim = [1e-1 1e2]; LinMagopt.MagUnits = 'abs';
bodeplot(mubnds(1,1),mubnds(1,2),LinMagopt);
xlabel('Frequency (rad/sec)');
ylabel('Mu upper/lower bounds');
title('Mu plot of robust stability margins (inverted scale)');

Рисунок 3: график Му устойчивых запасов устойчивости (инвертированная шкала)

Устойчивый запас устойчивости является обратной величиной структурированного сингулярного значения. Поэтому верхние границы от mussv станьте нижними границами на запасе устойчивости. Сделайте эти преобразования и найдите частоту дестабилизации, где mu верхняя граница достигает максимума (то есть, где запас устойчивости является самым маленьким):

[pkl,wPeakLow] = getPeakGain(mubnds(1,2));
[pku] = getPeakGain(mubnds(1,1));
SMfromMU.LowerBound = 1/pku;
SMfromMU.UpperBound = 1/pkl;
SMfromMU.CriticalFrequency = wPeakLow;

Сравните SMfromMU к границам stabmarg вычисленный с robstab. Значения находятся в грубом соглашении с robstab получение немного более слабых полей. Это вызвано тем, что robstab использует более сложный подход, чем частота gridding и может точно вычислить пиковое значение mu через частоту.

stabmarg
stabmarg = struct with fields:
           LowerBound: 1.4671e+00
           UpperBound: 1.4701e+00
    CriticalFrequency: 5.8542e+00

SMfromMU
SMfromMU = struct with fields:
           LowerBound: 1.4748e+00
           UpperBound: 1.4748e+00
    CriticalFrequency: 5.9636e+00

Устойчивый анализ производительности

Для номинальной стоимости неопределенных элементов k и delta, усиление с обратной связью меньше 1:

getPeakGain(ClosedLoop.NominalValue)
ans = 
   9.8040e-01

Это говорит что контроллер K соответствует подавлению помех и шумовым целям нечувствительности. Но эта номинальная производительность обеспечена перед лицом смоделированной неопределенности? На этот вопрос лучше всего отвечают с robgain.

opt = robOptions('Display','on');
[perfmarg,wcu] = robgain(ClosedLoop,1,opt);
Computing peak...  Percent completed: 100/100
The performance level 1 is not robust to the modeled uncertainty.
 -- The gain remains below 1 for up to 39.9% of the modeled uncertainty.
 -- There is a bad perturbation amounting to 40% of the modeled uncertainty.
 -- This perturbation causes a gain of 1 at the frequency 0.131 rad/seconds.

Ответ отрицателен: robgain найденный возмущением, составляющим только 40% заданной неопределенности, которая управляет усилением с обратной связью к 1.

getPeakGain(usubs(ClosedLoop,wcu),1e-6)
ans = 
   1.0000e+00

Это предполагает, что усиление с обратной связью превысит 1 для 100% заданной неопределенности. Это подтверждено путем вычисления усиления худшего случая:

wcg = wcgain(ClosedLoop)
wcg = struct with fields:
           LowerBound: 1.5708e+00
           UpperBound: 1.5737e+00
    CriticalFrequency: 5.9784e+00

Усиление худшего случая - приблизительно 1,6. Этот анализ показывает что в то время как контроллер K соответствует подавлению помех и шумовым целям нечувствительности для номинального объекта, это не может обеспечить этот уровень производительности для заданного уровня неопределенности объекта.