Этот пример подробно останавливается на Запасах устойчивости MIMO для Вращения Спутникового примера путем разработки устойчивого контроллера, который преодолевает дефекты "наивного" проекта.
Модель объекта управления эквивалентна описанный в Запасах устойчивости MIMO для Вращения Спутника.
a = 10; A = [0 a;-a 0]; B = eye(2); C = [1 a;-a 1]; D = 0; Gnom = ss(A,B,C,D);
Начните с основного проекта смешанной чувствительности с помощью mixsyn
. Выберите веса, чтобы достигнуть хорошей эффективности при ограничении усилия по управлению и полосы пропускания. (См., что Цикл Смешанной Чувствительности Формирует для получения дополнительной информации об этом методе и как выбрать функции взвешивания.)
wS = makeweight(1e3,1,1e-1); wKS = makeweight(0.5,[500 1e2],1e4,0,2); wT = makeweight(0.5,20,100); bodemag(wS,wKS,wT), grid legend('wS','wKS','wT')
Вычислите оптимальный контроллер MIMO K1
с mixsyn
.
[K1,~,gam] = mixsyn(Gnom,wS,wKS,wT); gam
gam = 0.7166
Оптимальная эффективность - приблизительно 0,7, указывая на тот mixsyn
легко соответствовавший границы на . Закройте обратную связь и постройте переходной процесс.
T = feedback(Gnom*K1,eye(2)); step(T,2), grid
Номинальные ответы быстры с небольшим перерегулированием.
Чтобы измерить робастность этого контроллера, проверяйте дисковые поля во входных параметрах объекта и объекте выходные параметры.
diskmarginplot(K1*Gnom,'b',Gnom*K1,'r--') grid legend('At plant inputs','At plant outputs')
Оба хороши приблизительно с 10 полями усиления дБ и 50 запасами по фазе степеней. Также проверяйте дисковые поля, когда усилению и фазе позволят варьироваться в обоих вводы и выводы объекта.
MMIO = diskmargin(Gnom,K1)
MMIO = struct with fields:
GainMargin: [0.9915 1.0085]
PhaseMargin: [-0.4862 0.4862]
DiskMargin: 0.0085
LowerBound: 0.0085
UpperBound: 0.0085
Frequency: 9.9988
WorstPerturbation: [1x1 struct]
Поля ввода-вывода чрезвычайно малы. Этот первый проект также испытывает недостаток в робастности. Можно подтвердить плохую робастность путем введения самых маленьких возмущений дестабилизации, возвращенных diskmargin
при вводах и выводах объекта. (См. diskmargin
для получения дальнейшей информации о WorstPerturbation
поле его структур output.)
WP = MMIO.WorstPerturbation; bode(WP.Input,WP.Output) title('Smallest destabilizing perturbation') legend('Input perturbation','Output perturbation')
Tpert = feedback(WP.Output*Gnom*WP.Input*K1,eye(2)); step(Tpert,5) grid
Переходной процесс продолжает колебаться после начальной переходной указывающей крайней нестабильности. Проверьте что встревоженная система с обратной связью Tpert
имеет полюс на мнимой оси в критической частоте MMIO.Frequency
.
[wn,zeta] = damp(Tpert); [~,idx] = min(zeta); [zeta(idx) wn(idx) MMIO.Frequency]
ans = 1×3
-0.0000 9.9988 9.9988
Создайте неопределенную модель объекта управления где параметр a
(вращающаяся частота), варьируется по области значений [7 13].
a = ureal('a',10,'range',[7 13]); A = [0 a;-a 0]; B = eye(2); C = [1 a;-a 1]; D = 0; Gunc = ss(A,B,C,D);
Можно использовать musyn
спроектировать устойчивый контроллер для этого неопределенного объекта. Чтобы улучшить робастность, используйте umargin
элемент, чтобы смоделировать усиление и неопределенность фазы при обоих вводах и выводах, так, чтобы musyn осуществил робастность для смоделированной области значений неопределенности. Предположим, что вы хотите по крайней мере 2 поля усиления дБ в каждом вводе-выводе (общее количество на 4 дБ для каждого канала). Если ваш umargin
модель элементов, что полный спектр изменения, musyn
не может привести к хорошим результатам, потому что это пытается осуществить устойчивую эффективность по смоделированной неопределенности, а также устойчивую устойчивость. musyn
скорее всего, не может обеспечил желаемую эффективность для так большого изменения усиления. Вместо этого сократите цель к 1 изменению усиления дБ каждого ввода-вывода.
GM = 1.1; % about 1 dB u1 = umargin('u1',GM); u2 = umargin('u2',GM); y1 = umargin('y1',GM); y2 = umargin('y2',GM); InputMargins = append(u1,u2); OutputMargins = append(y1,y2); Gunc = OutputMargins*Gunc*InputMargins;
Увеличьте объект с весами смешанной чувствительности и используйте musyn
оптимизировать устойчивую эффективность для смоделированной неопределенности, которая включает обоих параметр a
и усиление и изменения фазы при вводах и выводах объекта.
P = augw(Gunc,wS,wKS,wT); [K2,gam] = musyn(P,2,2);
D-K ITERATION SUMMARY: ----------------------------------------------------------------- Robust performance Fit order ----------------------------------------------------------------- Iter K Step Peak MU D Fit D 1 175.9 2.593 2.606 24 2 1.21 1.21 1.225 60 3 1.169 1.169 1.179 52 4 1.171 1.171 1.177 60 5 1.166 1.166 1.182 64 Best achieved robust performance: 1.17
Устойчивая эффективность близко к 1, указывая, что контроллер близко к устойчивому удовлетворению целям смешанной чувствительности. Проверяйте дисковые поля на объекте I/Os.
MMIO = diskmargin(Gnom,K2)
MMIO = struct with fields:
GainMargin: [0.6393 1.5643]
PhaseMargin: [-24.8199 24.8199]
DiskMargin: 0.4401
LowerBound: 0.4401
UpperBound: 0.4489
Frequency: 2.8263
WorstPerturbation: [1x1 struct]
Поля - теперь приблизительно 1,6 дБ и 25 градусов, намного лучше, чем прежде. Сравните переходные процессы с каждым контроллером для 25 выборок неопределенности.
T1 = feedback(Gunc*K1,eye(2)); T2 = feedback(Gunc*K2,eye(2)); rng(0) % for reproducibility T1s = usample(T1,25); rng(0) T2s = usample(T2,25); opt = timeoptions; opt.YLim = {[-1 1.5]}; stepplot(T1s,T2s,4,opt) grid legend('Nominal design','Robust design','location','southeast')
Второй проект является ясным улучшением. Далее сравните чувствительность и дополнительные функции чувствительности.
sigma(eye(2)-T1s,eye(2)-T2s), grid axis([1e-2 1e4 -80 20]) title('Sensitivity') legend('Nominal design','Robust design','location','southeast')
sigma(T1s,T2s), grid axis([1e-2 1e4 -80 20]) title('Complementary Sensitivity') legend('Nominal design','Robust design','location','southeast')
Этот пример показал, как использовать umargin
неопределенный элемент, чтобы улучшить запасы устойчивости как часть устойчивого синтеза контроллера.
umargin
| diskmargin
| musyn