... generalized plant is described by hand
... function sysic() is used to obtain generalized plant
simulink model
simulink model for noise problem
execution example for Matlab
rub2 size(Ap) size(Ap,1) size(Ap,2) M = zeros(3,2) size(M,1) size(M,2) gopt simulink simout plot(t, y) plot(t, y, 'r', t, r, 'b') figure(3); bodemag(S, 'r', gopt/WS, 'r--', T, 'b', gopt/WT, 'b--'); ctrlpref bodemag(S, 'r', gopt/WS, 'r--', T, 'b', gopt/WT, 'b--'); grid on ctrlpref figure(6); plot(t, y, 'r', t, r, 'b') grid on figure(7); bodemag(P0, 'r', K, 'b') grid on rub2 grid on gopt plot(t, y, 'r', t, r, 'b') grid on simulink plot(t, y, 'r', t, r, 'b') plot(t, y, 'r', t, n, 'b') plot(t, y*10, 'r', t, n, 'b') plot(t, y, 'r', t, n, 'b') bodemag(P0, 'r', K, 'b') grid on bode(P0, 'r', K, 'b') grid on bode(P0, 'r', K, 'b', P0*K, 'm') grid on bode(P0, 'r', K, 'b', -P0*K, 'm') grid on size(K.a) size(WS.a) size(WT.a) size(P0.a)
2009.12.22 announcement to design controller
Please use LMI based H infinity control method instead of Riccati based method (default). Specifically, please use hinfsyn function in cont.m as follows:
[K, clp, gopt] = hinfsyn(G, 1, 1, 'DISPLAY', 'on', 'METHOD', 'lmi')
There were some numerical problems in the execution of cont.m last week: the gain characteristics of sensitivity(and complementary sensitivity) function was not bounded by the weighting function in the resultant figure as following:
You can also check if the design result is OK or not as following:
>> cont Test bounds: 0.0000 < gamma <= 0.9051 gamma hamx_eig xinf_eig hamy_eig yinf_eig nrho_xy p/f 0.905 4.1e-03 -2.2e-08 1.5e-03 -1.9e-20 0.0674 p 0.453 4.1e-03# ******** 1.5e-03 -3.8e-05# ******** f 0.679 4.1e-03# ******** 1.5e-03 -1.5e-04# ******** f 0.792 4.1e-03 -2.2e-08 1.5e-03 -3.9e-04# 0.0031 f 0.849 4.1e-03 -2.2e-08 1.5e-03 -9.0e-04# 0.0064 f 0.877 4.1e-03 -2.2e-08 1.5e-03 -2.1e-03# 0.0138 f 0.891 4.1e-03 -2.2e-08 1.5e-03 -5.3e-03# 0.0343 f 0.898 4.1e-03 -2.2e-08 1.5e-03 -2.2e-02# 0.1384 f Gamma value achieved: 0.9051 >> norm(clp, 'inf') ans = 1.2593
In the above result, the closed-loop H infinity norm were 0.9051 and 1.2593 by hinfsyn() and norm() functions, respectively. This inconsistency implies that the design result might be incorrect since these two values of gamma should be the same.
if((t > 5)&&(t < 15)){ r = 15.0; }else{ r = 5; }
if((t > 10.)&&(t < 12.)){ daconv(0, bit16_conv(torq_volt_conv(RATED_TORQ*-0.3))); }else{ daconv(0, bit16_conv(torq_volt_conv(0))); }
thetaM_rad = (double)read_theta(1) / (double)Pn212 * 2 * M_PI; speedM_rad = (thetaM_rad - thetaM_rad_before) / msg->sampling_period; thetaM_rad_before = thetaM_radsampling period should not become too small. On the other hand, sampling period should be chosen as small as possible so that desiged continuous-time controller could be closely implemented by its descretized version. Therefore, we have a dilemma to control our plant. The sampling period 0.25 msec was chosen by traial and error so that noise in measured speed is not too large. The gain in high frequency range of continuous-time controller should be small enough for discretization.
There are some ways to tackle the problem:
The final option will be explained below: