Этот пример расширяется на примере MIMO Запасов устойчивости for Spinning Satellite путем разработки устойчивого контроллера, который преодолевает недостатки «наивного» проекта.
Эта модель объекта управления аналогична описанному в 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
. Выберите веса, чтобы достичь хорошей эффективности при ограничении полосы пропускания и усилиях по управлению. (Смотрите Mixed-Sensitivity Loop Shaping для получения дополнительной информации об этом методе и о том, как выбрать функции взвешивания.)
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, что указывает на то, что контроллер близок к надежному достижению целей смешанной чувствительности. Проверьте поля дисков на вводах/выводах объекта.
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