Codigo matlab clase nov. 5 de 2013.
A1=3;
A2=1;
R1=10000;
R2=5000;
g=9.8;
rho=1000;
%% Modelo en tiempo continuo
A=[-rho*g/(R1*A1) rho*g/(R1*A1);rho*g/(A2*R1) -rho*g/A2*(1/R1+1/R2)];
B=[1/A1; 0];
C=[0 1];
D=0;
tanques_c=ss(A,B,C,D);
%% Discretización del modelo
T=0.1;
tanques_d=c2d(tanques_c,T);
Ad=tanques_d.a;
Bd=tanques_d.b;
Cd=tanques_d.c;
Dd=tanques_d.d;
%% Espacio de estado aumentado
n=2
Ada=[Ad zeros(n,1);-Cd 1];
Bda=[Bd;0];
Cda=[Cd 0];
Dda=D;
%% Calculo del controlador
zeta_c=0.8;
ts_c=10;
wn_c=4.6/(zeta_c*ts_c);
wd_c=wn_c*sqrt(1-zeta_c^2);
zd_c=exp(-T*zeta_c*wn_c)*(cos(T*wd_c)+j*sin(T*wd_c));
pka=[zd_c zd_c' 0.01];
Ka=acker(Ada,Bda,pka)
K=Ka(1:2);
Ki=Ka(3);
%% Validacion diseño controlador
eig(Ada-Bda*Ka)
%% Deseño del observador usando la ec. de Ackerman
%% polos deseados del observador
ts_o=1;
zeta_o=0.8;
wn_o=4.6/(ts_o*zeta_o);
wd_o=wn_o*sqrt(1-zeta_o^2);
zd_o=exp(-T*wn_o*zeta_o)*(cos(T*wd_o)+j*sin(T*wd_o));
ECD=conv([1 -zd_o],[1 -zd_o']);
alfa_o=ECD(2:3);
Phi_Ad= Ad^2+alfa_o(1)*Ad+alfa_o(2)*eye(2);
Ob=obsv(Ad,Cd);
L=Phi_Ad*inv(Ob)*[0;1];
%% Validacion diseño observador
zd_o
eig(Ad-L*Cd)
No hay comentarios:
Publicar un comentario