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

Этот пример подробно останавливается на Запасах устойчивости 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')

Figure contains an axes object. The axes object 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 objects. Axes object 1 with title From: In(1) contains an object of type line. This object represents T. Axes object 2 contains an object of type line. This object represents T. Axes object 3 with title From: In(2) contains an object of type line. This object represents T. Axes object 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 objects. Axes object 1 contains 2 objects of type line. These objects represent At plant inputs, At plant outputs. Axes object 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.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')

Figure contains 8 axes objects. Axes object 1 with title From: In(1) contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes object 2 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes object 3 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes object 4 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes object 5 with title From: In(2) contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes object 6 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes object 7 contains 2 objects of type line. These objects represent Input perturbation, Output perturbation. Axes object 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 objects. Axes object 1 with title From: In(1) contains an object of type line. This object represents Tpert. Axes object 2 contains an object of type line. This object represents Tpert. Axes object 3 with title From: In(2) contains an object of type line. This object represents Tpert. Axes object 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.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')

Figure contains 4 axes objects. Axes object 1 with title From: In(1) contains 50 objects of type line. These objects represent Nominal design, Robust design. Axes object 2 contains 50 objects of type line. These objects represent Nominal design, Robust design. Axes object 3 with title From: In(2) contains 50 objects of type line. These objects represent Nominal design, Robust design. Axes object 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 object. The axes object 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 object. The axes object contains 100 objects of type line. These objects represent Nominal design, Robust design.

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

Смотрите также

| |

Похожие темы