Устойчивая устойчивость, устойчивая производительность и 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.4678
           UpperBound: 1.4707
    CriticalFrequency: 5.8856

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

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

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

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

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

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

stabmarg.CriticalFrequency
ans = 
   5.8856e+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.4678e+00
           UpperBound: 1.4707e+00
    CriticalFrequency: 5.8856e+00

SMfromMU
SMfromMU = struct with fields:
           LowerBound: 1.4746e+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.5707e+00
           UpperBound: 1.5735e+00
    CriticalFrequency: 5.9802e+00

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