Этот пример использует команды Robust Control Toolbox™ ucover
и musyn, чтобы спроектировать высокопроизводительный контроллер для семейства нестабильных объектов.
Номинальная модель объекта управления состоит из нестабильной системы первого порядка.
Pnom = tf(2,[1 -2]);
Семейство возмущенных объектов являются изменениями Pnom
. Все объекты имеют один нестабильный полюс, но расположение этого полюса изменяется по всему семейству.
p1 = Pnom*tf(1,[.06 1]); % extra lag p2 = Pnom*tf([-.02 1],[.02 1]); % time delay p3 = Pnom*tf(50^2,[1 2*.1*50 50^2]); % high frequency resonance p4 = Pnom*tf(70^2,[1 2*.2*70 70^2]); % high frequency resonance p5 = tf(2.4,[1 -2.2]); % pole/gain migration p6 = tf(1.6,[1 -1.8]); % pole/gain migration
Для целей проекта с обратной связью нам нужно заменить этот набор моделей одной неопределенной моделью объекта управления, область значений поведения включает p1
через p6
. Это одно из применений команды ucover
. Эта команда принимает массив моделей LTI Parray
и номинальную модель Pnom
и моделирует различие Parray-Pnom
как мультипликативная неопределенность в динамике системы.
Потому что ucover
ожидает массив моделей, используйте stack
команда для сбора моделей объекта управления p1
через p6
в один массив.
Parray = stack(1,p1,p2,p3,p4,p5,p6);
Далее используйте ucover
чтобы «охватить» область значений поведения Parray
с неопределенной моделью вида
P = Pnom * (1 + Wt * Delta)
где вся неопределенность сосредоточена в «неизмененной динамике» Delta
(а ultidyn
объект). Потому что выигрыш Delta
равномерно ограничен 1 на всех частотах, «формирующий» фильтр Wt
используется для захвата того, как относительное количество неопределенности изменяется с частотой. Этот фильтр также упоминается как функция взвешивания неопределенности. Попробуйте фильтр 4-го порядка Wt
для этого примера:
orderWt = 4;
Parrayg = frd(Parray,logspace(-1,3,60));
[P,Info] = ucover(Parrayg,Pnom,orderWt,'InputMult');
Получившаяся модель P
является объектом с одним входом, одним выходом с неопределенным пространством состояний (USS) с номинальным значением Pnom
.
P
P = Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 5 states. The model uncertainty consists of the following blocks: Parrayg_InputMultDelta: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences Type "P.NominalValue" to see the nominal value, "get(P)" to see all properties, and "P.Uncertainty" to interact with the uncertain elements.
tf(P.NominalValue)
ans = 2 ----- s - 2 Continuous-time transfer function.
График величины Бода подтверждает, что формирующий фильтр Wt
«покрывает» относительные изменения в поведении объектов. Как функция от частоты, уровень неопределенности составляет 30% при 5 рад/сек (-10dB = 0,3), 50% при 10 рад/сек и 100% после 29 рад/сек.
Wt = Info.W1; bodemag((Pnom-Parray)/Pnom,'b--',Wt,'r'); grid title('Relative Gaps vs. Magnitude of Wt')
Чтобы спроектировать устойчивый контроллер для неопределенной модели объекта управления P
, мы выбираем желаемую полосу пропускания замкнутой системы и минимизируем чувствительность к нарушениям порядка на выходе объекта. Структура управления показана ниже. Сигналы d
и n
являются нарушением порядка нагрузки и шумом измерения. Контроллер использует шумное измерение выходного сигнала объекта управления y
чтобы сгенерировать сигнал управления u
.
Фигура 1: Структура управления.
Фильтры Wperf
и Wnoise
выбраны для обеспечения требуемой пропускной способности и некоторого адекватного развертывания. Передаточная функция с обратной связью от [d;n]
на y
является
y = [Wperf * S , Wnoise * T] [d;n]
где S=1/(1+PC)
и T=PC/(1+PC)
являются функциями чувствительности и комплементарной чувствительности. Если мы проектируем контроллер, который сохраняет коэффициент усиления в системе с обратной связью от [d;n]
на y
ниже 1, затем
|S| < 1/|Wperf| , |T| < 1/|Wnoise|
Путем выбора соответствующих профилей величины для Wperf
и Wnoise
, мы можем обеспечить небольшую чувствительность (S
) внутри полосы пропускания и адекватного развертывания (T
) вне полосы пропускания.
Для примера выберите Wperf
как lowpass первого порядка с усилением постоянного тока 500 и перекрестным усилением при желаемой ширине полосы desBW
:
desBW = 4.5; Wperf = makeweight(500,desBW,0.33); tf(Wperf)
ans = 0.33 s + 4.248 -------------- s + 0.008496 Continuous-time transfer function.
Точно так же выберите Wnoise
как фильтр высоких частот второго порядка с величиной 1 в 10*desBW
. Это заставит коэффициент усиления без разомкнутого контура PC
для отката с уклоном -2 для частот, выходящих за пределы 10*desBW
.
NF = (10*desBW)/20; % numerator corner frequency DF = (10*desBW)*50; % denominator corner frequency Wnoise = tf([1/NF^2 2*0.707/NF 1],[1/DF^2 2*0.707/DF 1]); Wnoise = Wnoise/abs(freqresp(Wnoise,10*desBW))
Wnoise = 0.1975 s^2 + 0.6284 s + 1 ------------------------------ 7.901e-05 s^2 + 0.2514 s + 400 Continuous-time transfer function.
Проверьте, что ограничения 1/Wperf
и 1/Wnoise
на S
и T
обеспечьте требуемую пропускную способность и развертывание.
bodemag(1/Wperf,'b',1/Wnoise,'r',{1e-2,1e3}), grid title('Performance and roll-off specifications') legend('Bound on |S|','Bound on |T|','Location','NorthEast')
Следующее использование connect
построение разомкнутого контура соединения (блок-схема в Фигуру 1 без блока контроллера). Задайте каждый блок, появившийся на фигуре 1, назовите сигналы, поступающие и выходящие из каждого блока, и позвольте connect
Выполните проводку:
P.u = 'u'; P.y = 'yp'; Wperf.u = 'd'; Wperf.y = 'Wperf'; Wnoise.u = 'n'; Wnoise.y = 'Wnoise'; S1 = sumblk('e = -ym'); S2 = sumblk('y = yp + Wperf'); S3 = sumblk('ym = y + Wnoise'); G = connect(P,Wperf,Wnoise,S1,S2,S3,{'d','n','u'},{'y','e'});
G
является 3-входной, 2-выходной неопределенной системой, подходящей для устойчивого синтеза контроллера с musyn.
Проект осуществляется с помощью автоматизированной команды робастного проекта musyn. Целевая полоса пропускания - 4,5 рад/с.
ny = 1; nu = 1; [C,muPerf] = musyn(G,ny,nu);
D-K ITERATION SUMMARY: ----------------------------------------------------------------- Robust performance Fit order ----------------------------------------------------------------- Iter K Step Peak MU D Fit D 1 353.6 249.5 251.9 0 2 70.74 9.964 10.05 4 3 1.98 1.604 1.621 8 4 1.164 1.164 1.188 10 5 1.089 1.089 1.098 10 6 1.05 1.05 1.055 10 7 1.027 1.027 1.032 8 8 1.016 1.016 1.023 8 9 1.013 1.013 1.02 8 10 1.011 1.011 1.012 8 Best achieved robust performance: 1.01
Когда устойчивый индикатор эффективности muPerf
близок к 1, контроллер достигает целевой полосы пропускания и отката замкнутой системы. Как правило большого пальца, если muPerf
меньше 0,85, тогда эффективность может быть улучшена, и если muPerf
больше 1,2, тогда желаемая полоса пропускания замкнутой системы не достижима для заданной неопределенности объекта.
Вот muPerf
приблизительно равен 1, поэтому цели достигнуты. Получившийся контроллер C
имеет 18 состояний:
size(C)
State-space model with 1 outputs, 1 inputs, and 16 states.
Можно использовать reduce
и musyn perf
команды для упрощения данного контроллера. Вычислите приближения порядков 1-17.
NxC = order(C); Cappx = reduce(C,1:NxC);
Для каждого контроллера пониженного порядка используйте musyn perf
вычислить устойчивый показатель эффективности и сравнить его с muPerf
. Держите контроллер самого низкого порядка с эффективностью не хуже 1.05 * muPerf
, снижение эффективности на 5% или менее.
for k=1:NxC Cr = Cappx(:,:,k); % controller of order k bnd = musynperf(lft(G,Cr)); if bnd.UpperBound < 1.05 * muPerf break % abort with the first controller meeting the performance goal end end order(Cr)
ans = 6
Это дает контроллер 6-го порядка Cr
с сопоставимой эффективностью. Сравнение Cr
с контроллером полного порядка C
.
opt = bodeoptions; opt.Grid = 'on'; opt.PhaseMatching = 'on'; bodeplot(C,'b',Cr,'r--',opt) legend('Full-order C','Reduced-order Cr','Location','NorthEast')
Постройте график откликов разомкнутого контура моделей объекта управления p1
через p6
с упрощенным контроллером Cr
.
bodeplot(Parray*Cr,'g',{1e-2,1e3},opt);
Постройте график откликов на шаговое нарушение порядка на выходе объекта. Они согласуются с желаемой полосой пропускания замкнутой системы и устойчивы к изменениям объекта, как ожидалось из значения Robust Performance mu приблизительно 1.
step(feedback(1,Parray*Cr),'g',10/desBW);
Один и тот же процесс проекта может быть повторен для различных значений полосы пропускания замкнутой системы desBW
. Это дает следующие результаты:
Использование desBW
= 8 приводит к хорошему проекту с устойчивой эффективностью muPerf
от 1.09. Переменные переходные характеристики через Parray
семейство согласуется с полосой пропускания замкнутой системы 8 рад/с.
Использование desBW
= 20 приводит к плохому проекту с устойчивой эффективностью muPerf
от 1.35. Это ожидается, потому что эта целевая полоса пропускания находится вблизи очень большой неопределенности объекта. Некоторые из переходных характеристик для объектов p1,...,p6
на самом деле нестабильны.
Использование desBW
= 0,3 приводит к плохому проекту с устойчивой эффективностью muPerf
от 2.2. Это ожидается, потому что Wnoise
накладывает крен за 3 рад/с, что слишком близко к естественной частоте нестабильного полюса (2 рад/с). Другими словами, правильное управление нестабильной динамикой требует более высокой полосы пропускания, чем указано.
makeweight
| musyn
| ucover