В этом примере показано, как использовать 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, 11 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.2984 10.9082]
GMFrequency: [1.6108 15.0285]
PhaseMargin: [79.9812 -99.6214 63.7590]
PMFrequency: [0.4467 3.1469 5.2304]
DelayMargin: [3.1253 1.4441 0.2128]
DMFrequency: [0.4467 3.1469 5.2304]
Stable: 1
Делает систему с обратной связью, остаются устойчивыми для всех значений k
\delta
в диапазонах, указанных выше? Ответ на этот вопрос требует более сложного анализа с помощью robstab
функция.
[stabmarg,wcu] = robstab(ClosedLoop); stabmarg
stabmarg = struct with fields:
LowerBound: 1.4668
UpperBound: 1.4697
CriticalFrequency: 5.8933
Переменная stabmarg
дает верхние и нижние границы на устойчивом запасе устойчивости, мере сколько неопределенности на k
\delta
обратная связь может терпеть прежде, чем стать нестабильной. Например, поле 0,8 указывает, что всего 80% заданного уровня неопределенности могут привести к нестабильности. Здесь поле - приблизительно 1,5, что означает, что замкнутый цикл останется устойчивым максимум для 150% заданной неопределенности.
Переменная wcu
содержит комбинацию k
и delta
самый близкий к их номинальной стоимости, который вызывает нестабильность.
wcu
wcu = struct with fields:
delta: [1x1 ss]
k: 23.0548
Мы можем заменить этими значениями в ClosedLoop
и проверьте, что эти значения заставляют систему с обратной связью быть нестабильной.
format short e pole(usubs(ClosedLoop,wcu))
ans = 15×1 complex
-1.2591 + 0.0000i
-0.2094 + 0.0000i
-0.0248 + 0.0000i
-0.0083 + 0.0115i
-0.0083 - 0.0115i
-0.0200 + 0.0000i
-0.0000 + 0.0059i
-0.0000 - 0.0059i
-0.0033 + 0.0000i
-0.0016 + 0.0023i
⋮
Обратите внимание на то, что собственная частота нестабильного полюса с обратной связью дана stabmarg.CriticalFrequency
:
stabmarg.CriticalFrequency
ans = 5.8933e+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.4668e+00
UpperBound: 1.4697e+00
CriticalFrequency: 5.8933e+00
SMfromMU
SMfromMU = struct with fields:
LowerBound: 1.4735e+00
UpperBound: 1.4735e+00
CriticalFrequency: 5.9636e+00
Для номинальной стоимости неопределенных элементов k
и delta
, усиление с обратной связью меньше 1:
getPeakGain(ClosedLoop.NominalValue)
ans = 9.8137e-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 38.6% of the modeled uncertainty. -- There is a bad perturbation amounting to 38.7% of the modeled uncertainty. -- This perturbation causes a gain of 1 at the frequency 0.128 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.5767e+00
UpperBound: 1.5799e+00
CriticalFrequency: 5.9576e+00
Усиление худшего случая - приблизительно 1,6. Этот анализ показывает что в то время как контроллер K
соответствует подавлению помех и шумовым целям нечувствительности для номинального объекта, это не может обеспечить этот уровень эффективности для заданного уровня неопределенности объекта.
robstab
| robgain
| wcgain
| mussv