martes, 5 de noviembre de 2013

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