Этот пример подробно останавливается на Запасах устойчивости 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.4863 0.4863]
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.223 54 3 1.167 1.167 1.18 50 4 1.169 1.168 1.174 66 5 1.17 1.17 1.175 62 Best achieved robust performance: 1.17
Устойчивая эффективность близко к 1, указывая, что контроллер близко к устойчивому удовлетворению целям смешанной чувствительности. Проверяйте дисковые поля на объекте I/Os.
MMIO = diskmargin(Gnom,K2)
MMIO = struct with fields:
GainMargin: [0.6409 1.5602]
PhaseMargin: [-24.6856 24.6856]
DiskMargin: 0.4376
LowerBound: 0.4376
UpperBound: 0.4456
Frequency: 2.6184
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
неопределенный элемент, чтобы улучшить запасы устойчивости как часть устойчивого синтеза контроллера.
diskmargin
| musyn
| umargin