Mixed-sensitivity problem with low-order controller

This example illustrates the control of the fuel metering mechanism of a fuel injection motor. The classical mixed-sensitivity approach based on the sensitivity functions S , KS and T is used to synthesize a composite controller featuring integral action. We recall the definitions

$$S := (I+GK)^{-1},\; KS := K(I+GK)^{-1},\; T:= GK(I+GK)^{-1}.$$

Contents

Plant data

The fuel injection motor at 0 deg. Celsius has transfer function

load dataMotor ; G,
 
Transfer function:
 -0.01736 s^2 + 494 s - 314000
--------------------------------
s^3 + 98.34 s^2 + 9220 s + 87700
 

The control input u is the solenoid courant while the output y is the fuel metering mechanism which should be regulated. Performance objectives involve tracking a square wave with a period of 1 sec. with less than 0.1 sec. rise time and overshoot limited to 20 %. Robustness to neglected dynamics in the high frequency range is also important in this application as the motor operates on a wide range of temperatures and high-frequency range dynamics have been neglected. See "Application of H-infinity design to automotive fuel control" CSM, vol. 10, no. 3, pp. 102-106, 1990, for details.

Describe composite controller

Describe controller structure as a composite built from a 2nd-order system in series with an integrator

C2nd = ltiblock.ss('C0',nx-2,nu,ny);
C0 = 1/s*C2nd ;

Weighting functions

Build performance weight wS based on target ideal response

s = tf('s');
Tr = 0.2; del = 0.6; wn = 3/(Tr*del); Sd = 1.01-wn^2/(s^2+ 2*del*wn*s + wn^2) ; % realizable
wS=1/Sd ; % weight for S
%
% Add high-pass weight to penalize complementary sensitivity T
wT = 1/18000*(s+30)*(s+60)/(s/2000+1)^2 ;  % weight for T

% Penalize control signal
wKS = 0.01 ;

Build standard form and synthesis interconnection

P = augw(G, wS, wKS, wT);
CL0 = lft(P , C0);

Solve $H_\infty$ problem with hinfstruct

[CL,gam] = hinfstruct(CL0);
Final: Peak gain = 1.14, Iterations = 25

Construct final controller in series with the integrator

Css = ss(CL.Blocks.C0) ; Css,
Cfinal = 1/s*Css;
tf(Cfinal),
 
a = 
           C0.x1
   C0.x1  -107.7
 
b = 
             u1
   C0.x1  59.79
 
c = 
       C0.x1
   y1  59.79
 
d = 
           u1
   y1  -39.48
 
Continuous-time model.
 
Transfer function:
-39.48 s - 678.1
----------------
 s^2 + 107.7 s
 

Simulate square wave response of the motor

[u,t] = gensig('square',1,5) ;
Tsim = feedback(G*Cfinal,1) ;
figure(3); clf; lsim(Tsim,u,t); grid;
legend('square wave response of fuel metering');

Check high frequency range robustness

figure(4); clf;
bodemag(Tsim,1/wT,'r--',logspace(-2,3,200)); grid;
legend('complementary T','constraint 1/wT');