Está en la página 1de 8

function ejemplo1

%programa para una red de adelanto


n=input('ingrese el numerador n=')
d=input('ingrese el denominador d=')
%sistema sin compensar
%------------%cuando te dan POLO DESEADO PA METER WN Y E
%sigma=1
%wd=1*sqrt(3)
%s1=-sigma+j*wd
%s2=-sigma-j*wd
%wn=sqrt((sigma^2)+(wd^2))
%e=sigma/wn
wn=input('ingrese el deseado la wn=')
e=input('ingrese el factor e=')
%-----------------------%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(' los polos deseados son:')
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
[q,w]=size(p2);

[t,r]=size(z1);
angsp=(180/pi)*angle(-e*wn-p2+wn*(sqrt(1-(e)^2))*i)
angsz=(180/pi)*angle(-e*wn-z1+wn*(sqrt(1-(e)^2))*i)
sumang=0;
for a=1:q
sumang=sumang+angsp(a,w)
end
disp('sumang')
disp('la contribucion angular es:')
def=sumang-180
% hallando por el compensador en adelanto, hallando la ubicacion de el
zero
% y el polo.por el metodo de la bisectriz hallaremos las ubicaciones del
polo y zero
%para el polo en controlador adelanto(pca)
disp('localizacion del polo')
angpca=(((180/pi)*angle(pd1))/2)-(def/2);
pca=-1*((wn*(sqrt(1-(e)^2)))/(tan(angpca*pi/180))+1*e*wn)
disp('localizacion del zero')
anh=(((180/pi)*angle(pd1))/2)-(def/2);
anj=((180/pi)*angle(pd1)-90);
angzca=anj-anh;
zca=-1*(1*e*wn-((wn*(sqrt(1-(e)^2)))*(tan(angzca*pi/180))))
%hallando la ganancia K, se tendra que realizar por medio de la condicion
%de magnitud, se tiene, primero la nueva planta(funcion de transferencia
% mas el compensador en adelando.
n1=[1 -zca];
d1=[1 -pca];
[n2,d2]=series(n,d,n1,d1);
disp('funcion de transferencia a lazo abierto sin kc')
sc=tf(n2,d2)
s=pd1;
gla1=poly2sym(n2,'z')/poly2sym(d2,'z');
z=pd1;
mag = abs(eval(gla1));
disp('la ganancia es kc= ')
kc=1/mag
%respuesta en el tiempo del sistema sin compensar
disp('funcion de transferencia con kc')
disp('funcion de transferencia con el compensador en lazo abierto')
sc1=kc*sc
disp('funcion de transferencia con el compensador en lazo cerrado')
sct=feedback(sc1,1)
figure(3)
step(sct,lc)%sitema compensado con el sistema no compensado
legend('sc','snc')
title('sitema compensado con el sistema no compensado')
hold off
%hallamos para el sistema compensado
figure(4)
sla=la;
rlocus(sla,sc1,'r')%sistema sin compensar
legend('snc','sc')
title('sitema compensado con el sistema no compensado')
grid

function ejemplo2
% programa para resolver sistema compensado en atraso
n=input('ingrese el numerador n=')
d=input('ingrese el denominador d=')
kv=input('ingrese la cte. error estatico k^v=')
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)
z=zero(lc)
%hallemos la frecuencia natural no mortiguada y factor de amortiguamiento
[Wn,Z] = damp(lc)
disp('funcion de transferencia a lazo cerrado')
lc
denr=input('ingrese el denominador en lazo cerrado con rampa')
lc1=tf(n,denr);
figure(1)
rlocus(la)
title('sistema no compensado')
figure(2)
step([1],[1 0])
legend('rampa')
hold on
step(lc1)
title('sistema no compensado')
hold off
axis([0 40 0 40])
%calcular la cte de error estatico.sistema no compensado
%kv=lim(s-0).(s*G(s)), la s se va con una s del G(s),
p=pole(la)
lp=length(p)
p1=abs(p);
p2=p1(2:(lp))
lp2=length(p2);
multilpik=1;
for k=1:lp2
multilpik=multilpik*p2(k)
end
am=multilpik
kv1=(n/am)
%ahora hallamos B y kc ,por parte del k^v y kv
disp('kc*B*kv1=k^v')
B=input('eliga B=')
%ahora obtenida B,Elegimos el cero y el polo del compensador de atraso
(cercanos,
%cerca al origen y T grande)
disp('Elegimos el cero y el polo del compensador de atraso
(cercanos,cerca al origen y T grande')
n1=input('ingrese (1/T) del compensador atraso n1=')
%halla del cero el T
T=(1/n1)
%se obtiene ahora EL POLO DE(1/TB)
d2=(1/(T*B))
disp('poner el polo domante pdomLC')
%pdomLC=input('ingrese el polo dominante LC=')

pdomLC=p(2,1)
sigma=-1*(real(pdomLC));
wd=imag(pdomLC);
s1=-sigma+j*wd;
wn=sqrt((sigma^2)+(wd^2));
e=sigma/wn;
angp=(180/pi)*angle(-e*wn+d2+wn*(sqrt(1-(e)^2))*i)
angz=(180/pi)*angle(-e*wn+n1+wn*(sqrt(1-(e)^2))*i)
def=angz-angp
while def<-5
'def es menor que -5'
end
disp('la deficiencia esta correcta es pequea')
%de ahi llevamos kc con G(s)Gc(s)
n3=[1 n1];
d3=[1 d2];
[nsc,dsc]=series(n,d,n3,d3)
disp('funcion de transferencia a lazo abierto sin kc')
sc=tf(nsc,dsc)
disp('funcion de transferencia a lazo cerrado sin kc')
scLC=feedback(sc,1)
pols=pole(scLC)
%pdompols=input('ingrese el polo dominante nuevo=')
pdompols=pols(2,1)
gla1=poly2sym(nsc,'z')/poly2sym(dsc,'z');
z=pdompols;
mag = abs(eval(gla1));
disp('la ganancia es kc= ')
%ganancia kc
kc=1/mag
disp('funcion de transferencia con el compensador en lazo abierto')
sc1=kc*sc
disp('funcion de transferencia con el compensador en lazo cerrado')
sct=feedback(sc1,1)
stn=input('ingrese el num ft con el compensador sctn=')
sctr=input('ingrese el den ft con el compensador con rampa sctr=')
ntc=[stn];
dtc=[sctr];
add=tf(ntc,dtc);
%hallamos para el sistema compensado
figure(4)
sla=la;
rlocus(sla,sc)%sistema sin compensar
legend('snc','sc')
title('sistema compensado y sin compensar')
grid
figure(5)
sct1=add;
step(sct1,'b',lc1,'r')%sitema compensado
legend('sc','snc')
title('sistema compensado y sin compensar')
axis([0 40 0 40])

function ejemplo3
%programa para hacer funcion atraso-adelanto
n=input('ingrese el numerador de G(s), n=')
d=input('ingrese el denominador de G(s), d=')
e=input('ingrese el factor de amortiguamiento deseado, e=')
wn=input('ingrese la frecuencia natural no amortiguada, wn')
kv=input('ingrese la constante de error estatico deseado, kv= ')
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)
z=zero(lc)
%hallemos la frecuencia natural no mortiguada y factor de amortiguamiento
[Wn,Z] = damp(lc)
%%%%%%%%%%%%%%%%%%%
denr=input('ingrese el denominador en lazo cerrado con rampa')
lc1=tf(n,denr);
figure(1)
rlocus(la,'b')
legend('snc')
title('sistema no compensado')
%%%%%%%%
figure(2)
nr=[1];
dr=[1 0];
lar=tf(nr,dr);
step(lar,lc1)
legend('rampa','snc')
axis([0 10 0 10])
%%%%%%%%%
figure(3)
step(lc)
title('sistema no compensado')
%%%%%%%%%%%%
%calcular la cte de error estatico.sistema no compensado
%kv=lim(s-0).(s*G(s)), la s se va con una s del G(s),
p=pole(la)
lp=length(p)
p1=abs(p);
p2=p1(2:(lp))
lp2=length(p2);
multilpik=1;
for k=1:lp2
multilpik=multilpik*p2(k)
end
am=multilpik
kv1=(n/am)
%paso N01 hallamos los polos deseados del sistema:e y wn
%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
[q,w]=size(p2);
[t,r]=size(z1);
angsp=(180/pi)*angle(-e*wn-p2+wn*(sqrt(1-(e)^2))*i)
angsz=(180/pi)*angle(-e*wn-z1+wn*(sqrt(1-(e)^2))*i)
sumang=0;
for a=1:q
sumang=sumang+angsp(a,w)
end
disp('sumang')
disp('deficiencia angular es:')
def=sumang-180
%como corresponde el compensador de atraso adelanto, hallaremos el
Gc(s),de
%adelanto A partir de la FT en lazo abierto no compensado G(s), para
%determinar la deficiencia angular _,. La parte de adelanto de fase del
%compensador de atraso-adelanto debe contribuir con este ngulo phi.
% hallando por el compensador en adelanto, hallando la ubicacion de el
zero
% y el polo.por el metodo de la bisectriz hallaremos las ubicaciones del
polo y zero
%para el polo en controlador adelanto(pca)
disp('localizacion del polo')
angpca=(((180/pi)*angle(pd1))/2)-(def/2);
pca=-1*((wn*(sqrt(1-(e)^2)))/(tan(angpca*pi/180))+1*e*wn)
disp('localizacion del zero')
anh=(((180/pi)*angle(pd1))/2)-(def/2);
anj=((180/pi)*angle(pd1)-90);
angzca=anj-anh;
zca=-1*(1*e*wn-((wn*(sqrt(1-(e)^2)))*(tan(angzca*pi/180))))
%hallando la ganancia K, se tendra que realizar por medio de la condicion
%de magnitud, se tiene, primero la nueva planta(funcion de transferencia
% mas el compensador en adelando.
n1=[1 -zca];
d1=[1 -pca];
[n2,d2]=series(n,d,n1,d1);
disp('funcion de transferencia a lazo abierto sin kc')
sc=tf(n2,d2)
s=pd1;
gla1=poly2sym(n2,'z')/poly2sym(d2,'z');
z=pd1;
mag = abs(eval(gla1));
disp('la ganancia es kc= ')
kc=1/mag
%respuesta en el tiempo del sistema sin compensar
disp('funcion de transferencia con kc')
disp('funcion de transferencia con el compensador en lazo abierto')
sc1=kc*sc
disp('funcion de transferencia con el compensador en lazo cerrado')
sct=feedback(sc1,1)
%rlocus(sc1,'g');%sistema compensado con adelanto
%hallando kv error estatico
disp('kc*B*kv1=k^v')
%debemos preveeer que b >1;
y=(pca/zca)

B=(kv*y/(kc*kv1))
%ahora obtenida B,Elegimos el cero y el polo del compensador de atraso
(cercanos,
%cerca al origen y T grande)
disp('Elegimos el cero y el polo del compensador de atraso
(cercanos,cerca al origen y T grande')
zpc=input('ingrese (1/T) del compensador atraso zpc=')
%halla del cero zpc ,el T
disp('zero del compensado en atraso')
T=(1/zpc)
%se obtiene ahora EL POLO DE(1/TB)
disp('polo del compensado en atraso')
ppc=(1/(T*B))
%del polo deseado tenemos
sigma=-1*(real(pd1));
wd=imag(pd1);
s1=-sigma+j*wd;
wn1=sqrt((sigma^2)+(wd^2));
e1=sigma/wn;
angp=(180/pi)*angle(-e1*wn1+ppc+wn1*(sqrt(1-(e1)^2))*i)
angz=(180/pi)*angle(-e1*wn1+zpc+wn1*(sqrt(1-(e1)^2))*i)
def=angz-angp
while def<(-5)
'def es menor que -5'
end
disp('la deficiencia esta correcta')
% ahora tendria que realizarse control por magnitud deberia de ser igual
a
% a 1
HY=abs((s1+zpc)/(s1+ppc))
% ahora la funcion de transferencia tendria la sgte. forma:
nzpa=[1 zpc]
dzpa=[1 ppc]
n3=kc*conv(n,n1)
d3=conv(d,d1)
num=conv(n3,nzpa)
den=conv(d3,dzpa)
disp('funcion de transferencia lazo abierto')
scla=tf(num,den)
disp('funcion de transferencia lazo cerrado')
sclc=feedback(scla,1)
denramp=input('ingrese el denominador sclc con rampa: denramp=')
sclcr=tf(num,denramp);
%%%%%%%%%%%%%
figure(4)
rlocus(scla,la)
legend('sc','snc')
title('sistema compensado')
%%%%%%%%%%%%
figure(5)
step(sclc,lc)
legend('sc','snc')
title('sistema compensado')
%%%%%%%
figure(6)
step(sclcr,lar,lc1)
legend('sc','rampa','snc')

title('sistema compensado')
axis([0 40 0 40])

También podría gustarte