Using hinfsyn / dksyn, the resulting controller K has an input (B) matrix with only zeros.

1 view (last 30 days)
Hello
I am trying to build an hinf controller, and I am a little confused about the result. I am trying to control a simple plant G with a feedback K and weight functions W1 (error), W2 (control signal) and W3 (measurement noise) using the connect command.
close all
clear all
clc
% model parameters
K = ureal('K',5.2e7,'Range',[5.0e7 5.4e7]);
C = ureal('C',0.9,'Range',[0.6 1.2]);
Fe = ureal('Fe',5e6,'Percentage',10); %%approximated, not consider the sqrt
A = [0 1; -K -C];
B = [0; Fe];
C = [1 0];
D = 0;
G = uss(A,B,C,D);
G.u = 'Vin';
G.y = 'x';
% define loop shapes
%W1
kdep=1; % No overshoot
epss=0.01; % Statical error
trep=0.1; % Settling time
invW1=tf([kdep 3*epss/trep],[1 3/trep]);
W1=1/invW1;
W1.u = 'e';
W1.y = 'y_Wperf';
%W2
o2=800;
M2=10.3;
e2=0.005;
W2=tf([ 1 o2/M2],[e2 o2]);
W2.u = 'Vin';
W2.y = 'y_Wu';
%W3
b=0.02; % maximum disturbance
W3=zpk(b);
W3.u = 'noise';
W3.y = 'y_Wn';
% build the system
Sum1 = sumblk('x_n = y_Wn + x');
Sum2 = sumblk('e = ref - x_n');
Model_inputs = {'ref';'noise';'Vin'};
Model_outputs = {'e';'y_Wperf';'y_Wu'};
Model_1 = connect(G,W3,W2,W1,Sum1,Sum2,Model_inputs,Model_outputs);
%%use hinfsyn to compute the H_inf value and controllers K
ncont = 1; % one control input u
nmeas = 1; % one output y
[K,~,gamma] = hinfsyn(Model_1.NominalValue,nmeas,ncont)
%[K,~,RPmuval] = dksyn(Model_1,nmeas,ncont)
%response
S=inv(1+G*K);
T=1-S;
step(T,5)
The resulting system in closed loop is 0 due to the resulting controller. I tried to solve the same problem by building a simulink model of the problem and using the command linmod and hinfric, what gave me a controller K that works. However linmod does not recognizes the uncertainty of the system. Any thought on this would be helpfull.

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!