Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% encontró este documento útil (0 votos)
3 vistas5 páginas

cTIPO 0 CON OBSERVADOR

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 5

TIPO 0 CON OBSERVADOR

DISCRETO TIPO 0

TIPO 1
Asignación de polos CON ENTRADA NULA

DISEÑO DE PID EXPERIMENTAL


Gba=G*H; step(Gba)
VEMOS COMO ES LA RESPUESTA
[y t]=step(Gba);
i=find(y<(y(end)*0.632));
t63=t(i(end));
i=find(y<(y(end)*0.283));
t28=t(i(end));
k=y(end)/1;
d=(3*t28-t63)/2;
tau=t63-d;
d/tau<1 0 si BA 0.15<d/tau<0.6
d/tau
s=tf('s'); Gaprox=exp(-d*s)*k/(s*tau+1);
figure step ( G , 'b' ,Gaprox , 'r-.') ; legend grid ;
%PID Z-N BUCLE %PID Z-N BUCLE CERRADO %METODO DE LOPEZ %METODO DE ROVIRA
ABIERTO [Kc,MP,fcP,fcG]=margin(Gba); kp=(1.495*(d/tau)^(-0.945))/k; step(Gba)
COMPROBAR PID ki=kp*(1.101*(d/tau)^(-0.711))/tau a=1.086; b=-0.869;
GRÁFICA BA T=2*pi/fcP kd=kp*(0.560*tau*(d/tau)^1.006); kp=(a*(d/tau)^(b))/k;
kp=1.2*(tau)/(k*d); kp=0.6*Kc; C=pid(kp,ki,kd) a=-0.130; b=0.740
ti=2*d ti=T/2 td=T/8 T=F*feedback(G*C,H); %ki=kp/ti %kd=kp*td
td=0.5*d ki=kp/ti kd=kp*td figure step(T) hold off ki=kp*(a*(d/tau)+(b))/tau;
ki=kp/ti C=pid(kp,ki,kd) a=0.348 b=0.914
kd=kp*td T=F*feedback(G*C,H); kd=kp*(a*tau*(d/tau)^b);
C=pid(kp,ki,kd) step(T) stepinfo(T) C=pid(kp,ki,kd)
T=F*feedback(G*C,H); T=F*feedback(C*G,H);
step(T) step(T)

%Calculo polos dominantes en %CALCULO ANGULO CERO


funcion SO y Ts p=pole(Gba)z=zero(Gba) %TEOREMAS TIEMPO
syms Z SO=0.01; ts=0.5; p1=p(1) p2=p(2) p3=p(3) c1=z MUESTREO
IZQ PD pid(C)
[z]=solve(log(SO)==-pi*Z/sqrt(1-Z^2),Z); teta2=atan2d(wd,(-sigma+p2)); GBC=F*feedback(Gg*C,H);
z=eval(z); sigma=4/ts; wn=sigma/z; DERECHA PD a=stepinfo(GBC);
wd=wn*sqrt(1-z^2); P1=-sigma+wd*j teta1=180-atan2d(wd,(sigma-p1)); So=a.Overshoot/100
P2=-sigma-wd*j teta2=180-atan2d(wd,(sigma-p2)); ts=a.SettlingTime
%Calculo polos dominantes en teta3cero=180-atan2d(wd,(sigma-c1)); zeta=sqrt(log(So)^2/(pi^2+log(S
función Tp Ts tetaCERO=teta1+teta2-teta3cero-180 o)^2)); wn=4/(zeta*ts);
Pcero=-wd/tand(180-tetaCERO)+sigma %teorema del muestreo
;Pcero=-Pcero Tsmax2=2*pi/(wn*2) %
transformación bilineal:
Tsmax=2*pi/(wn*10)

%DISCRETIZAR PID
C=pid(A.kp,A.ki,A.kd,A.Tf,0.01,'IFormula','BackwardEuler','DFormula','BackwardEuler')
'ForwardEuler' ,'Trapezoidal' C=c2d(A,0.01,'matched') EMPAREJAMIENTO POLOS CERO
tustin es el bilineal

%ANTI WIND
ti=(pidz.kp/pidz.ki) td=(pidz.kd/pidz.kp) Kb=1/sqrt(ti*td)
%ki=kp/ti %kd=kp*td
ESPACIO DE ESTADOS

%TIPO 0 % TIPO 1
Mo=obsv(sys) rank(Mo) Mc=ctrb(sys) Mo=obsv(sys) rank(Mo) Mc=ctrb(sys)
rank(Mc) P=[A B; -C 0]; rank(P) rank(Mc)
syms Z SO=0.20; ts=1; sys=ss(A,B,C,0); %como era observable y
[z]=solve(log(SO)==-pi*Z/sqrt(1-Z^2),Z); z=eval(z); controlable
sigma=4/ts wn=sigma/z wd=wn*sqrt(1-z^2) p3=p1*5; polos_BC=[p1,p2,p3];
sigma=sigma; wd=wd; K=acker(sys.A,sys.B,polos_BC)
p1=-sigma-wd*j p2=-sigma+wd*j p3=real(p1)*5; A_BC=sys.A-sys.B*K;
polos_BC=[p1,p2,p3] B_BC=sys.B*K(2) POSICIÓN DE LA SALIDA
A_hat=[A zeros(4,1); -C 0]; sys_BC=ss(A_BC,B_BC,sys.C,0);
B_hat=[B;0]; [y ,t ,x]= step(sys_BC) ; step(sys_BC)
K_hat=acker(A_hat,B_hat,polos_BC) stepinfo(sys_BC)
Kss=K_hat(1:4) ; Ki=-K_hat(5) ; COMPROBAR QUE CUMPLE ESPECIFICACIONE
A_BC=A_hat-B_hat*K_hat B_BC=[zeros(4,1);1] figure plot(t,y) grid ;
sys_BC=ss(A_BC,B_BC,[C 0],0); title( 'S a l i d a l ') xlabel ( 'Tiempo ( s ) ' ) ;
[y,t,x]=step(sys_BC); ylabel('angulo ( r a d i a n e s ) ' ) ; figure
COMPROBAR QUE CUMPLE ESPECIFICACIONE plot(t,x)
step(sys_BC) stepinfo(sys_BC) plot(t,x)

PLOT VARIABLES DE CAMBIO AMPLITUD MÁXIMO %actuacion DE TIPO 0


SALIDA ref = max(x(:,3)) Kss=K_hat(1:4) ; Ki=-K_hat(5)
opt=stepDataOptions;
plot ( t , x ( : , 1 ) ) ; grid n_max = max(abs(x(:,n))) u=-Kssd*x(:,1:4)'+Kid*x(:,5)'
opt.StepAmplitude=ref;
title ( ' variable 1' ) ; plot(t,u) grid; title('Actuacion);
[y, t, x] =step(sys_BC,ref);
ylabel ( 'radianes' ) ; xlabel('Segundos'); ylabel('Fup (N)');
OTRO ref = 100
xlabel ( ' Tiempo ( s ) ') ; Config =
%actuacio DE TIPO 1
RespConfig('Amplitude',ref);
[y, t, x] =
u=-K*x(:,1:4)'+K(4)*1 %este uno se
step(sys_BC,Config);
cambia x el valor del step

plot(t,u)

%OBSERVADOR
polos_obs=5*[real(p1),real(p2),p3,p3]

SI ES DISCRETO polosd = exp(polos_obs*T)


Kobsv = acker(A', C', polos_obs)'
%DISRETO TIPO 0 %DISCRETO TIPO 1
T=0.1 sys_z=c2d(sys,0.01);
sysd = c2d(sys, T) [G, H, Cd, Dd] = ssdata(sysd)
[G, H, Cd, Dd] = ssdata(sysd) polosz=exp(polos_BC*0.01)
Mc = ctrb(G, H) rank(Mc) kz=acker(G,H,polosz)
Mob = obsv(G, Cd) rank(Mob) %Rango n, máximo, A_BCZ=G-H*kz B_BCZ=H*kz(SALIDA) Dz=0
P = [G sysd.B; -sysd.C*sysd.A 0] P=[G H; -Cd*G 1] sys_bcz=ss(G-H*kz,H*kz(2),Cd,Dz,0.01)
rank(P) %Rango(n+1), maximo, es invertible, step(sys_bcz) stepinfo(sys_bcz)
podemos calcular K_hat por asignacion de polos
%Obtengo las matrices extendidas tiempo discreto
Ghat = [G zeros(4,1); -Cd*G 1] Hhat = [H; -Cd*H] %UBIACION POR POLOS
Chat = [Cd 0] Dhat = Dd u=-K*x(:,1,4)
AA=A-B*K B=0 C=C D=0
polosd = exp(polos_BC*T)
sysnula=ss(AA,0,C,0)
Khat = acker(Ghat, Hhat, polosd) %ENTRADA NULA CON CONDICIONES INICIALES
Kssd = Khat(1:4) [y,t,x]=initial(sys_BC,[pi/3 0])
Kid = -Khat(5) plot(t,x)

GG = Ghat-Hhat*Khat
%Simulamos el sistema para una velocidad de
HH=[zeros(4,1);1]
referencia v = velocidad/3.6 %de km/s a m/s
CC = Chat DD = Dhat
[yramp tramp xramp] = lsim(sysbc, v*t, t)
sysbc = ss(GG, HH, CC, DD, T)
figure %Represento la velocidad q es salida.
step(sysbc) stepinfo(sysbc)
plot(t, yramp) hold on plot(t,v*t, 'r-')
plot ( t , xramp ( : , 1 ) ) ; gr id

También podría gustarte