Этот пример показывает, как выполнить смешанный Mu-Synthesis с командой dksyn
в Robust Control Toolbox™. Здесь dksyn
используется, чтобы разработать устойчивый контроллер для двух систем массового пружинного демпфера с неуверенностью в пружинной жесткости, соединяющей эти две массы. Этот пример взят из бумаги "Устойчивая производительность смешанного Mu-Synthesis для массово-пружинной системы с неуверенностью жесткости", Д. Баррос, С. Фекри и М. Атэнс, 2 005 средиземноморских Конференций по Управлению.
Рассмотрите систему массового пружинного демпфера в рисунке 1. Spring k2
и демпфер b2
присоединен к стене и массовому m2
. Массовый m2
также присоединен к массовому m1
через пружинный k1
и демпфер b1
. Масса 2 затронута силой воздействия f2
. Системой управляют через силу f1
, действующий на массовый m1
.
Наша цель проекта состоит в том, чтобы использовать силу управления f1
, чтобы ослабить эффект воздействия f2
на положении массового m2
. Сила f1
непосредственно не действует на массовый m2
, скорее это действует через пружинную жесткость k1
. Следовательно любая неуверенность в пружинной жесткости k1
сделает проблему управления более трудной. Проблема управления формулируется как:
Контроллер измеряет шумное смещение массового m2
и прикладывает силу управления f1
. Шум датчика, Wn
, моделируется как постоянные 0.001.
Команда привода оштрафована фактором 0.1 в низкой частоте, и фактор 10 в высокой частоте с перекрестной частотой 100 рад/с (отфильтруйте Wu
).
Модульное значение, фильтр окраски первого порядка, Wdist
, на воздействии имеют полюс на уровне 0,25 рад/с.
Цель производительности состоит в том, чтобы ослабить воздействие на массовом m2
фактором 80 ниже 0,1 рад/с.
Номинальной стоимостью системных параметров является m1=1
, m2=2
, k2=1
, b1=0.05
, b2=0.05
и k1=2
.
Wn = tf(0.001); Wu = 10*tf([1 10],[1 1000]); Wdist = tf(0.25,[1 0.25],'inputname','dist','outputname','f2'); Wp = 80*tf(0.1,[1 0.1]); m1 = 1; m2 = 2; k2 = 1; b1 = 0.05; b2 = 0.05;
Значение пружинной жесткости k1
сомнительно. Это имеет номинальную стоимость 2, и ее значение может отличаться между 1,2 и 2.8.
k1 = ureal('k1',2,'Range',[1.2 2.8]);
Существует также tau
с временной задержкой между силой привода, которой управляют, f1
и его приложение к массовому m1
. Максимальная задержка составляет 0,06 секунды. Пренебрежение этой задержки вводит мультипликативную ошибку exp(-s*tau)-1
. Эта ошибка может быть обработана как несмоделированная динамика, ограниченная в значении фильтром высоких частот Wunmod = 2.6*s/(s + 40)
:
tau = ss(1,'InputDelay',0.06); Wunmod = 2.6*tf([1 0],[1 40]); bodemag(tau-1,Wunmod,logspace(0,3,200)); title('Multiplicative Time-Delay Error: Actual vs. Bound') legend('Actual','Bound','Location','NorthWest')
Создайте неопределенную модель в пространстве состояний объекта с силой управления f1
и воздействие f2
как входные параметры.
a1c = [0 0 -1/m1 1/m2]'*k1; a2c = [0 0 1/m1 -1/m2]'*k1 + [0 0 0 -k2/m2]'; a3c = [1 0 -b1/m1 b1/m2]'; a4c = [0 1 b1/m1 -(b1+b2)/m2]'; A = [a1c a2c a3c a4c]; plant = ss(A,[0 0;0 0;1/m1 0;0 1/m2],[0 1 0 0],[0 0]); plant.StateName = {'z1';'z2';'z1dot';'z2dot'}; plant.OutputName = {'z2'};
Добавьте несмоделированную динамику задержки в первом входе объекта.
Delta = ultidyn('Delta',[1 1]); plant = plant * append(1+Delta*Wunmod,1); plant.InputName = {'f1','f2'};
Постройте Предвещать ответ от f1 до z2 для 20 демонстрационных значений неуверенности. Неуверенность на значении k1 вызывает колебания собственных частот режимов объекта.
bode(plant(1,1),{0.1,4})
Мы используем следующую структуру для синтеза контроллера:
Рисунок 2
Используйте connect
, чтобы создать соответствующее соединение разомкнутого цикла IC
. Обратите внимание на то, что IC
является неопределенной моделью с неопределенными переменными k1
и Delta
.
Wu.u = 'f1'; Wu.y = 'Wu'; Wp.u = 'z2'; Wp.y = 'Wp'; Wn.u = 'noise'; Wn.y = 'Wn'; S = sumblk('z2n = z2 + Wn'); IC = connect(plant,Wdist,Wu,Wp,Wn,S,{'dist','noise','f1'},{'Wp','Wu','z2n'})
IC = Uncertain continuous-time state-space model with 3 outputs, 3 inputs, 8 states. The model uncertainty consists of the following blocks: Delta: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences k1: Uncertain real, nominal = 2, range = [1.2,2.8], 1 occurrences Type "IC.NominalValue" to see the nominal value, "get(IC)" to see all properties, and "IC.Uncertainty" to interact with the uncertain elements.
Можно использовать команду dksyn
, чтобы синтезировать устойчивый контроллер для соединения разомкнутого цикла IC
. По умолчанию dksyn
обрабатывает все неопределенные действительные параметры, в этом примере k1
, как комплексная неуверенность. Вспомните, что k1
является действительным параметром с номинальной стоимостью 2 и область значений между 1,2 и 2.8. В комплексном Mu-Synthesis это заменяется комплексным неопределенным параметром, отличающимся по диску, сосредоточенному в 2 и с радиусом 0.8. График ниже сравнивает область значений k1 значений, когда k1 обработан как действительный (красный x) по сравнению с комплексом (синий *).
k1c = ucomplex('k1c',2,'Radius',0.8); % complex approximation % Plot 80 samples of the real and complex parameters k1samp = usample(k1,80); k1csamp = usample(k1c,80); plot(k1samp(:),0*k1samp(:),'rx',real(k1csamp(:)),imag(k1csamp(:)),'b*') hold on % Draw value ranges for real and complex k1 plot(k1.Nominal,0,'rx',[1.2 2.8],[0 0],'r-','MarkerSize',14,'LineWidth',2) the=0:0.02*pi:2*pi; z=sin(the)+sqrt(-1)*cos(the); plot(real(0.8*z+2),imag(0.8*z),'b') hold off % Plot formatting axis([1 3 -1 1]), axis square ylabel('Imaginary'), xlabel('Real') title('Real vs. complex uncertainty model for k1')
Синтезируйте устойчивый контроллер Kc
с помощью комплексного Mu-Synthesis (обрабатывающий k1
как комплексный параметр).
[Kc,gc,mu_c,infoc] = dksyn(IC,1,1);
% mu value when treating k1 as complex:
mu_c
mu_c = 1.0788
Обратите внимание на то, что mu_c
превышает 1 так контроллер, Kc
не удается надежно достигнуть желаемого уровня производительности.
Смешанный Mu-Synthesis составляет неопределенные действительные параметры непосредственно в процессе синтеза. Смешанный Mu-Synthesis включен с помощью опции dkitopt
MixedMU
. Опция dkitopt
AutoScalingOrder
используется, чтобы установить порядок D и масштабирований G, используемых в смешанном Mu-Synthesis. Приказы клиента брокеру со шкалой цен D, сопоставленные с комплексной неуверенностью, установлены в максимум пятого порядка и приказа клиента брокеру со шкалой цен G, сопоставленного с неопределенными действительными параметрами, установлены в максимум шестого порядка.
opt = dksynOptions('MixedMU','on','AutoScalingOrder',[5 6]); [Km,gm,mu_m] = dksyn(IC,1,1,opt); % mu value when treating k1 as real: mu_m
mu_m = 0.9552
Смешанный Mu-Synthesis может найти контроллер, который достигает желаемой производительности и целей робастности. Сравнение ответов разомкнутого цикла показывает, что смешанный-mu контроллер, который Km
дает меньшему количеству поля фазы около 3 рад/с, потому что это только должно принять меры против действительных изменений k1
.
clf % Note: Negative sign because interconnection in Fig 2 uses positive feedback bode(-Kc*plant.NominalValue(1,1),'b',-Km*plant.NominalValue(1,1),'r',{1e-2,1e2}) grid legend('P*Kc - complex mu loop gain','P*Km - mixed mu loop gain','location','SouthWest')
Сравнение этих двух контроллеров указывает, что использование в своих интересах "реальности" k1
приводит к лучшему выполнению, большему количеству устойчивого контроллера.
Чтобы оценить худший случай производительность с обратной связью Kc
и Km
, сформируйте соединение с обратной связью рисунка 2 и используйте команду wcgain
, чтобы определить, как большой норма воздействия к ошибке может добраться для заданной неуверенности объекта.
clpKc = lft(IC,Kc); clpKm = lft(IC,Km); [maxgainKc,badpertKc] = wcgain(clpKc); maxgainKc
maxgainKc = struct with fields: LowerBound: 2.1447 UpperBound: 2.1488 CriticalFrequency: 1.4276
[maxgainKm,badpertKm] = wcgain(clpKm); maxgainKm
maxgainKm = struct with fields: LowerBound: 0.9434 UpperBound: 0.9468 CriticalFrequency: 23.6263
Смешанный-mu контроллер Km
надежно достигает желаемой производительности начиная с усиления худшего случая системы с обратной связью clpKm
, является меньше чем 1. Комплексный-mu контроллер Kc
, однако, не удается надежно соответствовать спецификациям начиная с усиления с обратной связью, достигает 4.2 значения худшего случая badpertKc
неуверенности объекта.
Чтобы сравнить производительность подавления помех Kc
и Km
, сначала создайте модели с обратной связью передачи от входного воздействия dist
к f2
, f1
и z2
(положение массового m2
)
Km.u = 'z2'; Km.y = 'f1'; clsimKm = connect(plant,Wdist,Km,'dist',{'f2','f1','z2'}); Kc.u = 'z2'; Kc.y = 'f1'; clsimKc = connect(plant,Wdist,Kc,'dist',{'f2','f1','z2'});
Введите белый шум в фильтр нижних частот Wdist
, чтобы моделировать входное воздействие f2
. Номинальная производительность с обратной связью двух проектов почти идентична.
t = 0:.01:100; dist = randn(size(t)); yKc = lsim(clsimKc.Nominal,dist,t); yKm = lsim(clsimKm.Nominal,dist,t); % Plot subplot(311) plot(t,yKc(:,3),'b',t,yKm(:,3),'r') title('Nominal Disturbance Rejection Response') ylabel('z2') subplot(312) plot(t,yKc(:,2),'b',t,yKm(:,2),'r') ylabel('f1 (control)') legend('Kc','Km','Location','NorthWest') subplot(313) plot(t,yKc(:,1),'k') ylabel('f2 (disturbance)') xlabel('Time (sec)')
Затем, сравните худшие варианты для Kc
и Km
путем установки неуверенности объекта на значения худшего случая, вычисленные с wcgain
.
clsimKc_wc = usubs(clsimKc,badpertKc); clsimKm_wc = usubs(clsimKm,badpertKm); yKc_wc = lsim(clsimKc_wc,dist,t); yKm_wc = lsim(clsimKm_wc,dist,t); subplot(211) plot(t,yKc_wc(:,3),'b',t,yKm_wc(:,3),'r') title('Worse-Case Disturbance Rejection Response') ylabel('z2') subplot(212) plot(t,yKc_wc(:,2),'b',t,yKm_wc(:,2),'r') ylabel('f1 (control)') legend('Kc','Km','Location','NorthWest')
Это показывает, что смешанный-mu контроллер Km
значительно превосходит по характеристикам Kc
в худшем варианте. Путем использования того, что k1
действителен, смешанный-mu контроллер может поставить лучшую производительность в равной робастности.