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

Этот пример подробно останавливается на Запасах устойчивости 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 легко соответствовавший границы на S,KS,T. Закройте обратную связь и постройте переходной процесс.

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.222            58
    3           1.168        1.168        1.187            54
    4           1.169        1.169        1.177            62
    5           1.167        1.167        1.172            62

Best achieved robust performance: 1.17

Устойчивая производительность близко к 1, указывая, что контроллер близко к устойчивому удовлетворению целям смешанной чувствительности. Проверяйте дисковые поля на объекте I/Os.

MMIO = diskmargin(Gnom,K2)
MMIO = struct with fields:
           GainMargin: [0.6395 1.5637]
          PhaseMargin: [-24.8025 24.8025]
           DiskMargin: 0.4398
           LowerBound: 0.4398
           UpperBound: 0.4482
            Frequency: 2.8097
    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 неопределенный элемент, чтобы улучшить запасы устойчивости как часть устойчивого синтеза контроллера.

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

| |

Похожие темы