Documentos de Académico
Documentos de Profesional
Documentos de Cultura
function ejemplo1
%programa para una red de adelanto
n=input('ingrese el numerador n=')
d=input('ingrese el denominador d=')
wn=input('ingrese el deseado la wn=')
e=input('ingrese el factor e=')
%sistema sin compensar
%cuando te dan POLO DESEADO PA METER WN Y E
%sigma=2
%wd=2*sqrt(3)
%s1=-sigma+j*wd
%wn=sqrt((sigma^2)+(wd^2))
%e=sigma/wn
%cuando te da ts y mp
%ts=4;
%mp=0.2;
%sigma=4/ts;
%---%Mp =exp(-sigma*pi/wd)
%wd=eval(solve('mp=exp(-sigma*pi/wd)'));
%--%polos del sistema continuo
%s1=-sigma+j*wd
%wn=sqrt((sigma^2)+(wd^2))
%e=sigma/wn
disp('funcion de transferencia a lazo abierto')
la=tf(n,d)
disp('funcion de transferencia a lazo cerrado')
lc=feedback(la,1)
%hallamos los polos y ceros dominantes de la ft
p=pole(lc)
p0=length(p)
z=zero(lc)
z0=length(z)
%hallemos la frecuencia natural no mortiguada y factor de amortiguamiento
[Wn,Z] = damp(lc)
%Wn = abs(log(lambda))/Ts
%Z = -cos(angle(log(lambda)))
disp('observara el LGR del sistema sin compensar en figure(1)')
figure(1)
rlocus(la)
title('sistema sin compensar')
disp('observara rspta en el tiempo del sistema sin compensar en
figure(2)')
figure(2)
step(lc)
title('sistema sin compensar')
%para poder hallar el sistema compensado hallar los polos deseados
disp('hallando los polos deseados')
pd1=-1*e*wn+wn*(sqrt(1-(e)^2))*i
pd2=conj(pd1)
% APLICAR CONDICION DE ANGULO
%hallando zeros y polos en lazo abierto
z1=roots(n)
p2=roots(d)
%hallamos la deficiencia angular,%sumatoria angulos de ceros - Sumatoria
%angulos de polos = -180
Pgina 1
Pgina 2
Pgina 3
Pgina 4
Pgina 5
Pgina 6
Pgina 7
%sistema compensado
n=[16.09 21.59]
d=[0.1 1.64 6.934 5.395 0]
bode(n,d,'b')
grid
hold on
%sistema no compensado
n1=[4]
d1=[0.1 1.1 1 0]
bode(n1,d1,'r')
hold of
%sistema compensado
n=[16.09 21.59]
d=[0.1 1.64 6.934 5.395 0]
sc=tf(n,d)
g=feedback(sc,1)
step(g,'b')
hold on
%sistema no compensado
n1=[4]
d1=[0.1 1.1 1 0]
snc=tf(n1,d1)
a=feedback(snc,1)
step(a,'r')
hold of
Pgina 8
ralfa1=ralfa-0.003;
ralfa2=ralfa+0.003;
w=0.1:0.01:100;
[mag,fase,w]=bode(gw2,w);
i=find(mag>ralfa1&mag<ralfa2)
w(i);
mag(i);
gcmax=mag(i);
wmax=w(i);
%wmax=1.82 rad/seg
% D) Encontrar la funcion del compensador gc(w)
wz=wmax*gcmax;
wp=wmax/gcmax;
kc=k/alfa;
gcw=zpk(-wz,-wp,kc);
gla=gcw*gw;
subplot(212)
margin(gla)
[gm1 pm1]=margin(gla);
delta=delta+5;
end
% end de while
% wz=0.9764 rad/seg, wp=3.3923 rad/seg % gm1=5.1292, pm1=52.4783
% E) Encontrar la funcion del compensador digital gc(z)
fs=1/T;
[numw denw]=tfdata(gcw,'v');
[numz denz]=bilinear(numw,denw,fs);
gcz=tf(numz,denz,T)
gcz=zpk(gcz)
gla=gz*gcz;
glc=feedback(gla,1);
figure
step(glc)
DISEO DE UN COMPENSADOR DE FASE EN ADELANTO
p=
-0.9967
-0.0000
n=
2
p=
-0.9967
0
Transfer function:
-0.000664 s^2 - 0.1927 s + 1.993
-------------------------------s^2 + 0.9967 s
gm =
5.1723
pm =
31.5664
i=
153
i=
162
i=
173
Transfer function:
5.662 z - 4.655
--------------z - 0.4934
Sampling time: 0.2
Zero/pole/gain:
5.6619 (z-0.8221)
----------------(z-0.4934)
Sampling time: 0.2
[numv,denv]=bilinear(num,den,0.5);
v=-T/2; numw=numv.*[v^2 v 1];
denw=denv.*[v^2 v 1];
gw=tf(numw,denw);
gw1=zpk(gw);
[z p k]=zpkdata(gw1,'v');
%Encontrar el valor de k
p=sort(p)
n=length(p)
if p(n)<abs(1e-5)
p(n)=0
else p(n)=p(n)
end
gw1=zpk(z,p,k);
gw1=tf(gw1);
[numw,denw]=tfdata(gw1,'v');
gw2=poly2sym(numw,'w')/poly2sym(denw,'w');
f=limit(w*(1+tao*w)/(1+alfa*tao*w)*gw2,w,0);
k=kv/f; k=eval(k);
gw2=k*gw1
subplot(211)
margin(gw2)
[gm pm]=margin(gw2)
% gm = 5.1723, pm = 31.5664
% B) A partir de Bode determinar el ngulo que
% requiere el compensador para cumplir con el
% margen de fase del sistema
delta=5;
pm1=pm;
while pm1<pms
phi=-(180-pms-delta);
phi1=phi-0.1;
phi2=phi+0.1;
w=0.1:0.01:100;
[mag,fase]=bode(gp,w);
% c) Ganancia mxima del compensador
i=find(fase>phi1 & fase<phi2);
% valores comprendidos entre phi1 y phi2
gcmax=mag(i);
% Parmetros
% intermedios del controlador
wmax=w(i)
% Valores de frec de corte wz y wp
wz=wmax(1,1)/10;
wp=wz(1,1)/gcmax(1,1);
kc=wp/wz;
% Funcin de transferencia del controlador Gc(s)
gcw=zpk(-wz,-wp,kc);
gla=gcw*gp; % Lazo abierto = Planta * Controlador
subplot(212);% Ubicacion de la Grafica
margin(gla) % Bode del sistema compensado
% Valores de Margen de magnitud y fase
[gm1,pm1]=margin(gla);
delta=delta+5;
% Incremento de delta
end % Fin del Bucle
% pm1 = 54.1, wz = 0.0700, wp = 0.0598
p = -0.9967
0
Transfer function:
-0.000664 s^2 - 0.1927 s + 1.993
-------------------------------s^2 + 0.9967 s
gm = 5.1723
pm = 31.5664
wmax =
0.7000
Zero/pole/gain:
0.85532 (z-0.9861)
-----------------(z-0.9881)
Sampling time: 0.2
kc=wp/wz;
% Funcin de transferencia del controlador Gc(s)
gcw=zpk(-wz,-wp,kc);
gla=gcw*gw1; % Lazo abierto = Planta * Controlador
% Valores de Margen de magnitud y fase
[gm1,pm1]=margin(gla);
delta=delta+5;
% Incremento de delta
end % Fin de while
figure
margin(gla)
% Bode del sistema compensado
%Se puede tener una nueva planta con funcion de
% transferencia igual a Gla y a esta se le aplica el compensador
% de adelanto para conseguir los 80
% SEGUNDA PARTE : COMPENSADOR ATRASO-ADELANTO
disp('DISEO DE UN COMPENSADOR DE FASE EN ADELANTO')
pms=80;
[gm pm]=margin(gla)
% Determinar el valor de phi del compensador
delta=5;
pm1=pm;
while pm1<pms
phi=pms-pm+delta;
phi=phi*pi/180;
alfa=(1-sin(phi))/(1+sin(phi));
ralfa=sqrt(alfa);
% determinar el valor de wmax para gcmax=ralfa
ralfa1=ralfa-0.005;
ralfa2=ralfa+0.005;
w=0.01:0.01:100;
[mag,fase,w]=bode(gla,w);
i=find(mag>ralfa1&mag<ralfa2);
w(i);
mag(i);
gwmax=mag(i);
wmax=w(i);
% Encontrar la funcion del compensador gc(w)
wz=wmax(1)*gwmax(1);
wp=wmax(1)/gwmax(1);
kc=1/alfa;
gcw=zpk(-wz,-wp,kc);
GlaSistema=gcw*gla;
[gm1 pm1]=margin(GlaSistema);
delta=delta+5;
end
figure
margin(GlaSistema)
% E) Encontrar la funcion del compensador digital de atraso gc(z)
fs=1/T;
[numw denw]=tfdata(gcw,'v');
[numz denz]=bilinear(numw,denw,fs);
gcz=tf(numz,denz,T);
gcz=zpk(gcz)
glaz=gz*gcz;
glcz=feedback(glaz,1);
figure
step(glcz)