Está en la página 1de 25

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; wn=1.69; z=0.59; % tiempo pico


po=[1 2*wn*z wn^2]; pd=roots(po); % frecuencia natural
pd1=[ pd ; -8*z*wn] ; pn4=-1.2; % factor de amortiguamiento
K1=place(A,B,[pd1; pn4]); % nuevo polinomio
% polos dominantes
x0=[0 0 0.1 0.1]' ;
% nuevos polos diminantes
initial(A,B,C,D,x0) ;
% cuarto polo
% matriz de ganancia retroalimentacion
% condicion inicial
% 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)]; Chat = [C % matriz aumentada de B
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 =
- 0
6.360
2
0 -
0.4872
60.69 0
67
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
lo tanto
% no se puede realizar porque el rango es 1 ya que nuestro sistema reducido es 3 por

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
x 0 0 1 0
1
x 0 0 0 1
2
x 0 0 - 0
3 9.26
x 0 0 0 -
4 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.36
1
? 0.240
2
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

Outpu groups:
t
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 field


with s:
RiseTime: 3.67
27
SettlingTime: 5.12
54
SettlingMin: 1.00
32
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)

plant =
a2

A =
x1 x2 x3 x4
x1 0 0 1 0
x2 0 0 0 1
x3 0 0 - 0
9.26
x4 0 0 0 -
3.487
B =
u1
x1 0
x2 0
x3 0.078
7
x4 0.789
5
C =
x1 x3
x2 x4
y1 0 0 0

1
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 0
0.4872
x3_e 0.03572 -0.9646 -9.328 -0.5736 0 0 0 0
x4_e 0.3584 -13.38 - -9.241 0 3.699 0 0
0.6773
? 0 0 0 0 0 0 1 0
? 0 0 0 0 0 0 0 1
? 0 0 0 0 0 0 - 0
9.26
? 0 0 0 0 0 0 0 -
3.487
B =
u
1
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: Channel
Name s
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 field


with s:
RiseTime: 2.571
3
SettlingTime: 4.664
1
SettlingMin: 0.904
0
SettlingMax: 1.000
5
Overshoot: 0
Undershoot: 0
Peak: 1.000
5
PeakTime: 7.782
5

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+2 *
92
0.9762 - 0.0000 -
6.016 0.0000
1
- 1.155 - -
6.0161 2 0.0000 0.0000
0.0000 - 0.0000 0.0000
0.000
0
- - 0.0000 0.0000
0.0000 0.000
0

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