Робастный контроллер для вращения спутника

Этот пример расширяется на примере 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')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent wS, wKS, wT.

Вычислите оптимальный контроллер MIMO K1 с mixsyn.

[K1,~,gam] = mixsyn(Gnom,wS,wKS,wT);
gam
gam = 0.7166

Оптимальная эффективность составляет около 0,7, что указывает на то, что mixsyn легко встретил границы на S,KS,T. Закройте цикл обратной связи и постройте график переходной характеристики.

T = feedback(Gnom*K1,eye(2));
step(T,2), grid

Figure contains 4 axes. Axes 1 with title From: In(1) contains an object of type line. This object represents T. Axes 2 contains an object of type line. This object represents T. Axes 3 with title From: In(2) contains an object of type line. This object represents T. Axes 4 contains an object of type line. This object represents T.

Номинальные отклики быстрые с небольшим перерегулированием.

Поля на диске

Чтобы оценить робастность этого контроллера, проверьте запасы дисков на входах объекта и выходах объекта.

diskmarginplot(K1*Gnom,'b',Gnom*K1,'r--') 
grid
legend('At plant inputs','At plant outputs')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent At plant inputs, At plant outputs. Axes 2 contains 2 objects of type line. These objects represent 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')

Figure contains 8 axes. Axes 1 with title From: In(1) contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes 2 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes 3 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes 4 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes 5 with title From: In(2) contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes 6 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes 7 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes 8 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation.

Tpert = feedback(WP.Output*Gnom*WP.Input*K1,eye(2));
step(Tpert,5)
grid

Figure contains 4 axes. Axes 1 with title From: In(1) contains an object of type line. This object represents Tpert. Axes 2 contains an object of type line. This object represents Tpert. Axes 3 with title From: In(2) contains an object of type line. This object represents Tpert. Axes 4 contains an object of type line. This object represents Tpert.

Переходная характеристика продолжает колебаться после начального переходного процесса, указывающего на предельную нестабильность. Проверьте, что возмущенная система с обратной связью 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')

Figure contains 4 axes. Axes 1 with title From: In(1) contains 50 objects of type line. These objects represent Nominal design, Robust design. Axes 2 contains 50 objects of type line. These objects represent Nominal design, Robust design. Axes 3 with title From: In(2) contains 50 objects of type line. These objects represent Nominal design, Robust design. Axes 4 contains 50 objects of type line. These objects represent Nominal design, Robust design.

Второй проект - явное улучшение. Далее сравните функции чувствительности и комплементарной чувствительности.

sigma(eye(2)-T1s,eye(2)-T2s), grid
axis([1e-2 1e4 -80 20])
title('Sensitivity')
legend('Nominal design','Robust design','location','southeast')

Figure contains an axes. The axes contains 100 objects of type line. These objects represent Nominal design, Robust design.

sigma(T1s,T2s), grid
axis([1e-2 1e4 -80 20])
title('Complementary Sensitivity')
legend('Nominal design','Robust design','location','southeast')

Figure contains an axes. The axes contains 100 objects of type line. These objects represent Nominal design, Robust design.

Этот пример показал, как использовать umargin неопределенный элемент для улучшения запасов устойчивости как часть синтеза устойчивого контроллера.

См. также

| |

Похожие темы