Está en la página 1de 20

Paso 1: simulación en lazo abierto disturbo Td

Td_amp=0 % disturbio

Td_amp = 0

syms t x y
A=[0 0 1 0;0 0 0 1;0 0 -9.2602 0;0 0 0 -3.4872]; % matriz A
B=[0 0;0 0 ;2.3613 0.0787;0.2402 0.7895]; % matriz B
C=[1 0 0 0;0 1 0 0]; % matriz C
D=[0 0;0 0]; % matriz D
[num1,den1]=ss2tf(A,B,C,D,1); % tf1
[num2,den2]=ss2tf(A,B,C,D,2); % tf2
helicoptero=ss(A,B,C,D);

Análisis de estabilidad

p=eig(helicoptero); % marginalmente estable

Análisis de controlabilidad

mc=ctrb(A,B); % matriz de contrabilidad


rc=rank(mc); % rango de la matriz de contrabilidad

PASO 2:selección de los polos deseados

a)Polos dominantes

Los otros polos se escogen

ts=1; % tiempo pico


wn=1.69; % frecuencia natural
z=0.59; % factor de amortiguamiento
po=[1 2*wn*z wn^2]; % nuevo polinomio
pd=roots(po); % polos dominantes
pd1=[ pd ; -8*z*wn] ; % nuevos polos diminantes
pn4=-1.2; % cuarto polo
K1=place(A,B,[pd1; pn4]); % matriz de ganancia retroalimentacion
x0=[0 0 0.1 0.1]' ; % condicion inicial
initial(A,B,C,D,x0) ; % grafica en lazo abierto
step(A-B*K1,B,C,D); % grafica en lazo cerrado

Nbar1=-inv(C*inv(A-B*K1)*B); % ganancia
step(A-B*K1, B*Nbar1,C,D); % grafica con filtro
pd=p((p<0))

b)Polos de ITAE para n=4 ts=1seg.

pd2=[-4.24+1.263i; -4.24+1.263i; -0.626+0.4141i ;-0.626-0.4141i];


K2=place(A,B,pd2); % matriz de ganancia de retroalimentacion

Warning: A complex gain matrix is required when the pole locations are not specified as
complex conjugate pairs.

step(A-B*K2,B,C,D); % grafico en lazo cerrado

Warning: The data cannot be plotted because it is not real valued.


Nbar2=-inv(C*inv(A-B*K2)*B); % ganancia
step(A-B*K1, B*Nbar2,C,D); % grafico con filtro

Warning: The data cannot be plotted because it is not real valued.

 
c)Polos de Bessel para n=4

% Td_amp=0.05

pd3=[-4.056+5.0723i ;-4.0156-5.0723 ;-5.5262+1.6553i; -5.5262-1.6553i];


K3=place(A,B,pd3); % matriz de ganancia en retroalimentacion

Warning: A complex gain matrix is required when the pole locations are not specified as
complex conjugate pairs.

step(A-B*K3,B,C,D) ; % grafico en lazo cerrado

Warning: The data cannot be plotted because it is not real valued.

Nbar3=-inv(C*inv(A-B*K3)*B); % ganancia
step(A-B*K1, B*Nbar3,C,D); % grafico con filtro

Warning: The data cannot be plotted because it is not real valued.


Paso 3: Efecto Integral

ny =2;nu = 2;nx = 4;% odern de los zeros

a)sistema aumentado

Ahat = [A , zeros(nx,ny)
-C, zeros(ny,ny)]; % matriz aumentada de A
Bhat = [ B
zeros(ny,nu)]; % matriz aumentada de B
Chat = [C zeros(ny,ny)]; % matriz aumentada de C
pd=[p ; -1 ; -0.9]; % nuevos polos
Khat=place(Ahat,Bhat,pd); % matriz de ganancia de retroalimentacion

Ki = Khat(:,5:6);
Kx= Khat(:,1:4);
Kr=-inv(C*inv(A-B*Kx)*B); % ganancia

b) polos debido al PI

p1=eig(Ahat-Bhat*Khat);
p2=eig(A);
step(Ahat-Bhat*Khat, Bhat*Kr,Chat,D); % grafico con filtro
 
 

DISEÑO DEL OBSERVADOR:

pl=[-2; -2 ;-1; -0.9] %polos del sistema del observador

pl =
-2.0000
-2.0000
-1.0000
-0.9000

 
L=place(A',C',pl)'

L =
-6.3602 0
0 -0.4872
60.6967 0
0 3.6990

Observador Completo:

 
Alc=[A -B*K1; L*C A-L*C-B*K1];
Bcl=[B*Nbar1; B*Nbar1];
Ccl=[C zeros(2,4)];
Dcl=[0];
planta_lc=ss(Alc,Bcl,Ccl,Dcl); %Modelo de la planta a lazo cerrado
step(planta_lc)

stepinfo(planta_lc)

ans = 2×2 struct array with fields:


RiseTime
SettlingTime
SettlingMin
SettlingMax
Overshoot
Undershoot
Peak
PeakTime

Observador reducido:

nx=2; ny=1;
Aaa=A(1,1);
Aab=A(1,2:end);
Aba=A(2:end,1);
Abb=A(3:end,3:end);
Baa=B(1,1);
Bb=B(2:end);
Ca=C(1);
Cb=C(2:end);
% rc1=rank(obsv(Abb,Aab))
% % polos deseados
% po=[-4 -4 -4 -4];
%
% L1=place(Abb',Aab',po)'
% %Matrices del estimador reducido
% % vdot= F*v+G*u+Hy
% F=Abb-L*Aab;
% G=Bb-L*Ba;
% H=F*L
 
% no se puede realizar porque el rango es 1 ya que nuestro sistema reducido es 3 por lo tanto
 

COMPENSADOR:

1.- Analisis de la primera salida:

B1=[0;0;2.3613;0.2402]

B1 =
0
0
2.3613
0.2402

C1=[1 0 0 0]

C1 =
1 0 0 0

D1=[0]

D1 = 0

K11=K1(1,1:4)

K11 =
1.2249 -0.4357 -3.1054 -0.2720

L1=[-6.3602;0;60.6967;0]

L1 =
-6.3602
0
60.6967
0

planta1=ss(A,B1,C1,D1)

planta1 =

A =
x1 x2 x3 x4
x1 0 0 1 0
x2 0 0 0 1
x3 0 0 -9.26 0
x4 0 0 0 -3.487
B =
u1
x1 0
x2 0
x3 2.361
x4 0.2402

C =
x1 x2 x3 x4
y1 1 0 0 0

D =
u1
y1 0

Continuous-time state-space model.

Comp=reg(planta1,K11,L1);
NU=zpk(Comp*planta1);
Gc_G=minreal(zpk(Comp*planta1));
GOL=-Comp*planta1

GOL =

A =
x1_e x2_e x3_e x4_e ? ? ? ?
x1_e 6.36 0 1 0 -6.36 0 0 0
x2_e 0 0 0 1 0 0 0 0
x3_e -63.59 1.029 -1.927 0.6422 60.7 0 0 0
x4_e -0.2942 0.1046 0.7459 -3.422 0 0 0 0
? 0 0 0 0 0 0 1 0
? 0 0 0 0 0 0 0 1
? 0 0 0 0 0 0 -9.26 0
? 0 0 0 0 0 0 0 -3.487

B =
u1
x1_e 0
x2_e 0
x3_e 0
x4_e 0
? 0
? 0
? 2.361
? 0.2402

C =
x1_e x2_e x3_e x4_e ? ? ? ?
u1 1.225 -0.4357 -3.105 -0.272 0 0 0 0

D =
u1
u1 0

Output groups:
Name Channels
Controls 1

Continuous-time state-space model.

Gc_G=minreal(zpk(Comp*planta1))

Gc_G =

From input to output "u1":


463.48 (s-0.01123) (s+3.487)
------------------------------------------------------
(s+9.26) (s+3.485) (s-0.001055) (s^2 - 4.495s + 51.25)

Output groups:
Name Channels
Controls 1

Continuous-time zero/pole/gain model.

T=minreal(zpk(feedback(-Gc_G,1)))

T =

From input to output "u1":


-463.48 (s+3.487) (s-0.01123)
----------------------------------------------
(s+2) (s+3.571) (s+0.9) (s^2 + 1.778s + 2.553)

Output groups:
Name Channels
Controls 1

Continuous-time zero/pole/gain model.

sist_comp=ss(feedback(-Gc_G,1));
step(sist_comp)

stepinfo(sist_comp)

ans = struct with fields:


RiseTime: 3.6727
SettlingTime: 5.1254
SettlingMin: 1.0032
SettlingMax: 1.0993
Overshoot: 0
Undershoot: 3.7226e+03
Peak: 41.1823
PeakTime: 1.9342

t=linspace(0,3.5)';
u=ones(length(t),1);
[y,t,x]=lsim(sist_comp,u,t);
plot(t,x,'--')

plot(t,y)
 

Respuesta a la frecuencia del compensador:

bode(GOL)
margin(A,B1,C1,D1)

 
2.- Analisis de la segunda salida

B2=[0;0;0.0787;0.7895]

B2 =
0
0
0.0787
0.7895

C2=[0 1 0 0]

C2 =
0 1 0 0

D2=[0]

D2 = 0

K12=K1(2,1:4)

K12 =
-0.4539 12.2561 0.8579 7.2885

L2=[0;-0.4872;0;3.6990]

L2 =
0
-0.4872
0
3.6990

planta2=ss(A,B2,C2,D2)

planta2 =

A =
x1 x2 x3 x4
x1 0 0 1 0
x2 0 0 0 1
x3 0 0 -9.26 0
x4 0 0 0 -3.487

B =
u1
x1 0
x2 0
x3 0.0787
x4 0.7895

C =
x1 x2 x3 x4
y1 0 1 0 0

D =
u1
y1 0
Continuous-time state-space model.

Comp2=reg(planta2,K12,L2);
NU2=zpk(Comp*planta2);
Gc_G2=minreal(zpk(Comp2*planta2));
GOL2=-Comp2*planta2

GOL2 =

A =
x1_e x2_e x3_e x4_e ? ? ? ?
x1_e 0 0 1 0 0 0 0 0
x2_e 0 0.4872 0 1 0 -0.4872 0 0
x3_e 0.03572 -0.9646 -9.328 -0.5736 0 0 0 0
x4_e 0.3584 -13.38 -0.6773 -9.241 0 3.699 0 0
? 0 0 0 0 0 0 1 0
? 0 0 0 0 0 0 0 1
? 0 0 0 0 0 0 -9.26 0
? 0 0 0 0 0 0 0 -3.487

B =
u1
x1_e 0
x2_e 0
x3_e 0
x4_e 0
? 0
? 0
? 0.0787
? 0.7895

C =
x1_e x2_e x3_e x4_e ? ? ? ?
u1 -0.4539 12.26 0.8579 7.289 0 0 0 0

D =
u1
u1 0

Output groups:
Name Channels
Controls 1

Continuous-time state-space model.

Gc_G2=minreal(zpk(Comp2*planta2))

Gc_G2 =

From input to output "u1":


-16.571 (s+1.168) (s+9.26)
---------------------------------------------------
(s-0.0008685) (s+1.17) (s+3.487) (s+7.373) (s+9.54)

Output groups:
Name Channels
Controls 1

Continuous-time zero/pole/gain model.

T2=minreal(zpk(feedback(-Gc_G2,1)))

T2 =
From input to output "u1":
16.571 (s+9.26) (s+1.168)
-----------------------------------------
(s+9.582) (s+7.788) (s+2) (s+1.199) (s+1)

Output groups:
Name Channels
Controls 1

Continuous-time zero/pole/gain model.

sist_comp2=ss(feedback(-Gc_G2,1));
step(sist_comp2)

stepinfo(sist_comp2)

ans = struct with fields:


RiseTime: 2.5713
SettlingTime: 4.6641
SettlingMin: 0.9040
SettlingMax: 1.0005
Overshoot: 0
Undershoot: 0
Peak: 1.0005
PeakTime: 7.7825

t=linspace(0,3.5)';
u=ones(length(t),1);
[y,t,x]=lsim(sist_comp2,u,t);
plot(t,x,'--')
plot(t,y)

Respuesta a la frecuencia del compensador:


bode(GOL2)

margin(A,B2,C2,D2)
ESTABILIDAD DE LYAPUNOV:

Q=[1 1 0 1;1 1 1 0;0 1 1 0;1 0 0 1] % nueva matriz simetrica

Q =
1 1 0 1
1 1 1 0
0 1 1 0
1 0 0 1

E=[1 2 3 1;2 1 0 1 ;3 0 2 0;1 1 0 1] % nueva matriz simetrica

E =
1 2 3 1
2 1 0 1
3 0 2 0
1 1 0 1

xl=lyap(A,Q,[],E) % ecuacion de lyapunov

xl =
1.0e+292 *
0.9762 -6.0161 0.0000 -0.0000
-6.0161 1.1552 -0.0000 -0.0000
0.0000 -0.0000 0.0000 0.0000
-0.0000 -0.0000 0.0000 0.0000

px=eig(xl) % polos de xl se puede observar que dos de sus polos son negativo por lo tanto es s

px =
1.0e+292
-4.9510
-0.0000
0.0000
7.0824

 
 
 

También podría gustarte