Этот пример показывает, как использовать Robust Control Toolbox™, чтобы анализировать и определить количество робастности систем управления с обратной связью. Это также обеспечивает понимание связи с Mu-Analysis и функцией mussv
.
Рисунок 1 показывает блок-схему системы с обратной связью. Модель объекта управления сомнительно и объект вывод должен быть отрегулирован, чтобы остаться маленьким в присутствии воздействий и шум измерения .
Рисунок 1: система с обратной связью для анализа робастности
Подавление помех и шумовая нечувствительность определяются количественно целью производительности
где и функции взвешивания, отражающие содержимое частоты и . Здесь является большим в низких частотах и является большим в высоких частотах.
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 рад/с. Математическая модель похожа:
Параметр 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
Структурированное сингулярное значение, или , математический инструмент, используемый 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
соответствует подавлению помех и шумовым целям нечувствительности для номинального объекта, это не может поддержать этот уровень производительности для заданного уровня неуверенности объекта.