L15 Mu Robust Control Design Example
L15 Mu Robust Control Design Example
Fall 2023
Contents
d 2 x1 dx1 d 2 x2 dx
m1 2
+ C1 + k x
1 1 = f1 , m2 2
+ C2 2 + k2 x2 = f 2 (1)
dt dt dt dt
f1 = K f 1u1 , f 2 = K f 2u 2 ( 2)
xs
x f = x1 + x2 - xs (3)
u1 x1 + -
Gcnom xf
+
+
u2 x2
G fnom
x2 G fi _ nom1 G fi _ nom2
G fnom = = 2 + (5)
u2 s + 2z fnom1w fnom1s + w fnom12 s 2 + 2z fnom 2w fnom 2 s + w fnom 2 2
Nominal Model
0.532
Gcnom ( s) = 2nd order LTI system
( s + 5.83)(s + 4.52)
r =0 u1 + + y1 e1
K c (s) Gcnom W perf _ c1l
+ + +
-
e2
W perf _ cc2r
1r
Feedback Structure
Overall Framework
é D add _ c 0 0 ù
ê D perf _ c1 ú
ê 0 0
ú
êë 0 0 D perf _ c 2 ûú
z1 Wadd _ cl Wadd _ cr w1
e1 W perf _ c1l W perf _ c1r dist1
+ + +
Gcnom
+ + +
u1 y1
K c (s)
Generalized Plant of coarse actuator
H. Bevrani University of Kurdistan 12
Perturbed Model
D add _ c
Gco w1
Gcper = 2 z1
s + ( 2z cwc + K v ) s + wc
2
Wadd _ cl Wadd _ cr
MATLAB Program
omega2=logspace(-1,4,50);
% Gcper
Gco = [Gco_nom*0.8 Gco_nom*1.2 0.697];
zeta_c = 0.073;
omega_c = [omega_cnom*0.9 omega_cnom*1.1 35.331];
Weighting Function
-6 s +8 s 2 + 600 s + 90000
Wadd _ cl = 2.634 ´ 10 ´ ´ 2 ´ 10 -3
Wadd _ c ( s ) s + 3.9 s + 8.211s + 26.339
Wadd _ cr = 103
Wadd _ c = Wadd _ cl ´ Wadd _ cr
s +8 s 2 + 600 s + 90000
Wadd _ c = 2.634 ´ 10 -6 ´ ´ 2
s + 3.9 s + 8.211s + 26.339
figure('Position',pos1)
vplot('liv,d',Waddc_g,Delta11,Delta12,…
Delta21,Delta22,Delta3);
H. Bevrani University of Kurdistan 17
Weighting Function
W perf _ c1
1211 ´ 2
W perf _ c1l = ´ 10 -3 W perf _ c1 = W perf _ c1l ´ W perf _ c1r
s + 0 .2 s + 0 .1
2 2
1211´ 2
W perf _ c1r = 103 W perf _ c1 =
s + 0.2 s + 0.12
2
MATLAB Program
Wperf_c1l = nd2sys([1211*2*1e-3],[1 0.2 0.1^2]);
Wperf_c1r = 1e3;
Wperf_c1 = mmult(Wperf_c1l,Wperf_c1r);
Wperf_c1_p=frsp(Wperf_c1,omega1);
Wperf_c1_g=20*log10(abs(vunpck(Wperf_c1_p)));
Wperf_c1_g=vpck(Wperf_c1_g,omega1);
figure('Position',pos1)
vplot('liv,d',Wperf_c1_g)
Wperf_c2 = mmult(Wperf_c2l,Wperf_c2r);
Wperf_c2_p=frsp(Wperf_c2,omega1);
Wperf_c2_g=20*log10(abs(vunpck(Wperf_c2_p)));
Wperf_c2_g=vpck(Wperf_c2_g,omega1);
figure('Position',pos2)
vplot('liv,d',Wperf_c2_g)
Generalized Plant
MATLAB Program
systemnames = ' Gcnom Wadd_cl Wadd_cr … é D add _ c 0 0 ù
ê D perf _ c1 ú
Wperf_c1l Wperf_c1r Wperf_c2l Wperf_c2r '; ê 0 0
ú
ëê 0 0 D perf _ c 2 ûú
inputvar = '[ w1 ; dist1; dist2; control]';
outputvar = '[ Wadd_cl; Wperf_c1l; Wperf_c2l;…
-Gcnom - Wadd_cr - Wperf_c1r ]';
z1 Wadd _ cl Wadd _ cr w1
input_to_Gcnom = '[ Wperf_c2r + control ]';
input_to_Wadd_cl = '[ control ]'; e1 W perf _ c1l W perf _ c1r dist1
input_to_Wadd_cr = '[ w1 ]'; e2 W perf _ c 2l W perf _ c 2 r dist 2
input_to_Wperf_c1l = '[ Gcnom+Wadd_cr…
+Wperf_c1r ]';
input_to_Wperf_c1r = '[ dist1 ]'; + + +
Gcnom
input_to_Wperf_c2l = '[ Gcnom+Wadd_cr… + + +
+Wperf_c1r ]';
input_to_Wperf_c2r = '[ dist2 ]'; u1 y1
K c (s)
sysoutname = 'General_P';
cleanupsysic = 'yes';
sysic
Iteration Summary
-------------------------------------------------
Iteration # 1 2 3
Controller Order 8 24 28
Total D-Scale Order 0 16 20
Gamma Achieved 1.563 1.166 0.993
Peak mu-Value 1.334 1.110 0.982
ControllerK c (s )
8.27 ´10 7 ( s + 0.01)(s + 1.13 ± j 7.23 ´10 -2 )(s + 1.81)(s + 3.12)
K c ( s) =
( s + 0.01)(s + 0.10 ± j1.13 ´10 -4 )(s + 0.217)(s + 1.60)
NOMINAL_DK = General_P;
% Number of measurements
NMEAS_DK = 1;
AUTOINFO_DK = [1 3 1]
Continue
MATLAB Program
[DK_DEF_NAME='himat_dk1';
dkit
k_dk3_p = frsp(k_dk3,omega1);
k_dk3_g = 20*log10(abs(vunpck(k_dk3_p))); Kc_pole=spoles(Kc)
k_dk3_g = vpck(k_dk3_g,omega1); Kc_zero=szeros(Kc)
%
[sysb,sig]=sysbal(k_dk3) Kc_p=frsp(Kc,omega1);
Kc=strunc(sysb,14) Kc_g=20*log10(abs(vunpck(Kc_p)));
Kc_g=vpck(Kc_g,omega1);
[Kc_a,Kc_b,Kc_c,Kc_d]=unpck(Kc);
[Kc_num,Kc_den]=ss2tf(Kc_a,Kc_b,Kc_c,Kc_d); figure('Position',pos1)
Kc_tf=tf(Kc_num,Kc_den); subplot(2,1,1)
vplot('liv,d',Kc_g)
zpk(Kc_tf) subplot(2,1,2)
vplot('liv,p',Kc_p)
Kc_close_p=spoles(Kc_cloop)
Kc_close_z=szeros(Kc_cloop)
figure('Position',pos1)
vplot('ri',Kc_close_p,'yx',Kc_close_z,'ro')
Continue
s max [F( jw )] £ 1
MATLAB Program
Kc_cloop_g=frsp(Kc_cloop,omega1);
Kc_cloop_svd_g=vsvd(Kc_cloop_g);
figure('Position',pos2)
vplot('liv,d',Kc_cloop_svd_g)
nom_perf2=sel(Kc_cloop_g,3,3);
nom_perf2_g=20*log10(abs…
(vunpck(nom_perf2)));
nom_perf2_g=vpck(nom_perf2_g,omega1);
rob_stab=sel(Kc_cloop_g,1,1);
rob_stab_g=20*log10(abs(vunpck(rob_stab)));
rob_stab_g=vpck(rob_stab_g,omega1);
figure('Position',pos3)
vplot('liv,d',rob_stab_g,nom_perf_g,…
nom_perf2_g)
H. Bevrani University of Kurdistan 27
More Continue
MATLAB Program
[Lc_a,Lc_b,Lc_c,Lc_d]=unpck(Lc);
Lc_ss=ss(Lc_a,Lc_b,Lc_c,Lc_d);
[Lc_Gm,Lc_Pm,Lc_Wcg,Lc_Wcp] =
margin(Lc_ss);
figure('Position',pos1)
subplot(2,1,1)
vplot('liv,d',Lc_g)
subplot(2,1,2)
vplot('liv,p',Lc_p)
MATLAB Program
figure('Position',pos2)
nyquist(Lc_ss,'y')
z2 dist 3 dist 4
w2
D del _ f
r =0 + + + y2 e3
u2 +
K f (s ) G fnom W perf _ f 1l
+ + + + +
-
e4
W perf _ f 2l
K c (s) Gcnom
Feedback Structure
z1 Wdel _ fl Wdel _ fr w1
e1 W perf _ f 1l W perf _ f 1r dist1
+ + +
G fnom
+ + +
K c (s) Gcnom
u2 y2 -
K f (s )
H. Bevrani University of Kurdistan 31
Weighting Functions
Wdel _ f ( s )
( s + 800)( s + 1200) Wdel _ f = Wdel _ fl ´ Wdel _ fr
Wdel _ fl = 50 ´ ´ 10 - 2
( s + 8000)( s + 12000)
( s + 800)( s + 1200)
Wdel _ fr = 10 2 Wdel _ f = 50 ´
( s + 8000)( s + 12000)
MATLAB Program
Wdel_f_p=frsp(Wdel_f,omega1);
Wdel_f_g=20*log10(abs(vunpck(Wdel_f_p)));
Wdel_f_g=vpck(Wdel_f_g,omega1);
figure('Position',pos1)
vplot('liv,d',Wdel_f_g);
Weighting Functions
W perf _ f 1
1211´ 2
W perf _ f 1l = ´ 10 - 2 W perf _ f 1 = W perf _ f 1l ´ W perf _ f 1r
s + 0 .2 s + 0 .1
2 2
1211´ 2
W perf _ f 1r = 10 2 W perf _ f 1 =
s + 0.2 s + 0.12
2
MATLAB Program
Wperf_f1l = nd2sys([1211*2],[1 0.2 0.1^2],1e-2);
Wperf_f1r = 1e2
Wperf_f1 = mmult(Wperf_f1l,Wperf_f1r);
Wperf_f1_p=frsp(Wperf_f1,omega1);
Wperf_f1_g=20*log10(abs(vunpck(Wperf_f1_p)));
Wperf_f1_g=vpck(Wperf_f1_g,omega1);
figure('Position',pos2)
vplot('liv,d',Wperf_f1_g)
H. Bevrani University of Kurdistan 34
Weighting Functions
W perf _ f 2
360 ´ 400
W perf _ f 2l = ´ 10 - 2 W perf _ f 2 = W perf _ f 2 l ´ W perf _ f 2 r
( s + 120)( s + 400)
360 ´ 400
W perf _ f 2 r = 10 2 W perf _ f 2 =
( s + 120)( s + 400)
MATLAB Program
Wperf_f2l = zp2sys([],[-120; -400],360*400e-2);
Wperf_f2r = 1e2;
Wperf_f2 = mmult(Wperf_f2l,Wperf_f2r);
Wperf_f2_p=frsp(Wperf_f2,omega1);
Wperf_f2_g=20*log10(abs(vunpck(Wperf_f2_p)));
Wperf_f2_g=vpck(Wperf_f2_g,omega1);
figure('Position',pos2)
vplot('liv,d',Wperf_f1_g)
H. Bevrani University of Kurdistan 35
MATLAB Program
systemnames = ' Gcnom Kc Gfnom Wdel_fl …
Wdel_fr Wperf_f1l Wperf_f1r … é D del _ f 0 0 ù
ê ú
Wperf_f2l Wperf_f2r '; ê 0
D perf _ f 1 0
ú
êë 0 0 D perf _ f 2 úû
inputvar = '[ w2 ; dist3; dist4; control]';
outputvar = '[ Wdel_fl; Wperf_f1l; Wperf_f2l; …
-Gfnom - Wperf_f1r - Wperf_f2r - Gcnom ]'; z1 Wdel _ fl Wdel _ fr w1
input_to_Gcnom = '[ Kc ]'; e1 W perf _ f 1l W perf _ f 1r dist1
input_to_Kc = '[ Gfnom + Wperf_f1r + Wperf_f2r ]'; e2 W perf _ f 2 l W perf _ f 2 r dist 2
input_to_Gfnom = '[ Wdel_fr + control ]';
input_to_Wdel_fl = '[ control ]';
+ + +
input_to_Wdel_fr = '[ w2 ]'; G fnom
+ + +
input_to_Wperf_f1l = '[ Gfnom + Wperf_f1r + Wperf_f2r + Gcnom ]';
input_to_Wperf_f1r = '[ dist3 ]'; K c (s) Gcnom
input_to_Wperf_c2l = '[ Gfnom + Wperf_f1r + Wperf_f2r + Gcnom ]'; u2 y2 -
K f (s )
input_to_Wperf_c2r = '[ dist4 ]';
sysoutname = 'General_P2';
cleanupsysic = 'yes';
sysic
H. Bevrani University of Kurdistan 36
D-K Iteration
Iteration Summary
-------------------------------------------------
Iteration # 1 2 3
Controller Order 26 36 40
Total D-Scale Order 0 10 14
Gamma Achieved 1.909 1.094 0.910
Peak mu-Value 1.826 1.068 0.909
Controller K f (s )
1.03 ´10 4 ( s + 3.64 ´10 -1 ± j1.21)(s + 3.53 ´10 -1 ± j1.19)(s + 1.43)
K f ( s) =
( s + 3.65 ´10 -1 ± j1.24)(s + 3.07 ´10 -1 ± j1.17)(s + 1.16)(s + 1.34)
( s + 9.32 ´10 -1 ± j1.96)(s + 1.19 ± j1.97)(s + 2.27)(s + 2.59)(s + 3.35)
´
( s + 1.00 ´10 -1 ± j1.59 ´10 -5 )(s + 2.63)(s + 2.94 ´10 -1 ± j 2.11´10)
( s + 3.50 ´10)(s + 6.30 ´10)(s + 2.73 ´10 ± j5.06 ´10)(s + 1.03 ´10 2 )
´
( s + 1.49 ± j 2.22)(s + 1.14 ´10)(s + 2.22 ´10)(s + 4.36 ´10)(s + 1.26 ´10 2 )
(s + 4.61´10 2 ± j3.06 ´10 2 )(s + 9.45 ´10 2 ± j 2.75 ´10)
´
( s + 2.30 ´10 2 ± j8.75 ´10)(s + 3.78 ´10 2 )(s + 2.07 ´103 ± j9.69 ´10 2 )
( s + 2.26 ´10 2 ± j5.65 ´103 )
´
( s + 6.26 ´10 2 ± j 4.02 ´103 )
( s + 8.00 ´103 )(s + 1.20 ´10 4 )
´
(s + 1.92 ´10 4 ± j1.61´10 4 )
NOMINAL_DK = General_P2;
% Number of measurements
NMEAS_DK = 1;
AUTOINFO_DK = [1 3 1]
Continue
MATLAB Program
DK_DEF_NAME='himat_dk2';
dkit
k_dk3_p = frsp(k_dk3,omega1);
k_dk3_g = 20*log10(abs(vunpck(k_dk3_p)));
k_dk3_g = vpck(k_dk3_g,omega1);
% 低次元化
Kf_p=frsp(Kf,omega1);
[sysb,sig]=sysbal(k_dk3)
Kf_g=20*log10(abs(vunpck(Kf_p)));
Kf=strunc(sysb,36) Kf_g=vpck(Kf_g,omega1);
[Kf_a,Kf_b,Kf_c,Kf_d]=unpck(Kf);
[Kf_num,Kf_den]=ss2tf(Kf_a,Kf_b,Kf_c,Kf_d);
figure('Position',pos1)
Kf_tf=tf(Kf_num,Kf_den);zpk(Kf_tf)
subplot(2,1,1)
vplot('liv,d',Kf_g)
Kf_pole=spoles(Kf)
subplot(2,1,2)
Kf_zero=szeros(Kf)
vplot('liv,p',Kf_p)
Kf_close_p=spoles(Kf_cloop)
Kf_close_z=szeros(Kf_cloop)
figure('Position',pos1)
vplot('ri',Kf_close_p,'yx',Kf_close_z,'ro')
H. Bevrani University of Kurdistan 41
Continue
s max [F( jw )] £ 1
MATLAB Program
Kf_cloop_g=frsp(Kf_cloop,omega1);
Kf_cloop_svd_g=vsvd(Kf_cloop_g);
figure('Position',pos2)
vplot('liv,d',Kf_cloop_svd_g)
nom_perf2=sel(Kf_cloop_g,3,3);
nom_perf2_g=20*log10(abs…
(vunpck(nom_perf2)));
nom_perf2_g=vpck(nom_perf2_g,omega1);
rob_stab=sel(Kf_cloop_g,1,1);
rob_stab_g=20*log10(abs(vunpck(rob_stab)));
rob_stab_g=vpck(rob_stab_g,omega1);
figure('Position',pos3)
vplot('liv,d',rob_stab_g,nom_perf_g,…
nom_perf2_g)
H. Bevrani University of Kurdistan 43
Continue
MATLAB Program
Lf=mmult(madd(Gfnom,mmult(Gfnom,Kc GM 23.7 [dB]
,Gcnom)),Kf);
PM 67.6 [deg]
Lf_p=frsp(Lf,omega1);
Lf_g=20*log10(abs(vunpck(Lf_p)));
Lf_g=vpck(Lf_g,omega1);
[Lc_a,Lc_b,Lc_c,Lc_d]=unpck(Lc);
Lc_ss=ss(Lc_a,Lc_b,Lc_c,Lc_d);
[Lc_Gm,Lc_Pm,Lc_Wcg,Lc_Wcp] =
margin(Lc_ss);
figure('Position',pos1)
subplot(2,1,1)
vplot('liv,d',Lc_g)
subplot(2,1,2)
vplot('liv,p',Lc_p)
H. Bevrani University of Kurdistan 44
Frequency Response
MATLAB Program
figure('Position',pos2)
nyquist(Lf_ss,'y')
Simulation Results
Simulation Results
Thank you!