You are on page 1of 16

GUIA DE PROGRAMAS, Jean Carlos Aquino Quispe

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

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

Pgina 1

GUIA DE PROGRAMAS, Jean Carlos Aquino Quispe


[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')
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,'g')%sitema compensado
hold off
%hallamos para el sistema compensado
figure(4)
sla=la;
rlocus(sla,'r')%sistema sin compensar
hold on
rlocus(sc1,'g')%sistema compensado
hold off
grid
figure(5)
sct1=sct;
step(sct1,'g')%sitema compensado

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

Pgina 2

GUIA DE PROGRAMAS, Jean Carlos Aquino Quispe


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)
denr=input('ingrese el denominador en lazo cerrado con rampa')
lc1=tf(n,denr);
figure(1)
rlocus(la)
figure(2)
step([1],[1 0])
hold on
step(lc1)
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 Bykc ,por parte del k^v ykv
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=')
sigma=-1*(real(pdomLC));
wd=imag(pdomLC);
s1=-sigma+j*wd;
wn=sqrt((sigma^2)+(wd^2));
e=sigma/wn;

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

Pgina 3

GUIA DE PROGRAMAS, Jean Carlos Aquino Quispe


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')
%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)
scLC=feedback(sc,1)
pols=pole(scLC)
pdompols=input('ingrese el polodomnuevo=')
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 sctn=')
sctr=input('ingrese sct con rampa sctr=')
figure(3)
step([1],[1 0],'b')
hold on
ntc=[stn];
dtc=[sctr];
add=tf(ntc,dtc);
step(add,'g')%sitema compensado
hold off
%hallamos para el sistema compensado
figure(4)
sla=la;
rlocus(sla,'r')%sistema sin compensar
hold on
rlocus(sc,'g')%sistema compensado
hold off
grid
figure(5)
sct1=sct;
step(sct1,'g')%sitema compensado

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

Pgina 4

GUIA DE PROGRAMAS, Jean Carlos Aquino Quispe


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)
figure(2)
step([1],[1 0])
hold on
step(lc1)
hold off
axis([0 10 0 10])
%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)

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

Pgina 5

GUIA DE PROGRAMAS, Jean Carlos Aquino Quispe


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=')

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

Pgina 6

GUIA DE PROGRAMAS, Jean Carlos Aquino Quispe


%halla del cero zpc ,el T
T=(1/zpc)
%se obtiene ahora EL POLO DE(1/TB)
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)
scla=tf(num,den)
sclc=feedback(scla,1)
figure(3)
rlocus(scla)
figure(4)
step(sclc)

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

Pgina 7

GUIA DE PROGRAMAS, Jean Carlos Aquino Quispe


% MARGEN DE GANANCIA Y FASE POR MATLAB
clc
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)
Z = input('ENTRE VECTOR DE CEROS: Z = ');
P = input('ENTRE VECTOR DE POLOS: P = ');
K = input('ENTRE VALOR DE GANANCIA: K = ');%entramos con una ganancia respectiva de k
T = input('ENTRE TIEMPO DE MUESTREO: T = ');
Glaz = zpk(Z,P,K,T)
% Frecuencia de muestreo
Ws = 2*pi/T
[MG,MP,Wcp,Wcg] = margin(Glaz);
disp('MARGEN DE GANANCIA ')
MGdB = 20*log10(MG);
display(MGdB)
disp('MARGEN DE FASE ');
display(MP)
disp('FRECUENCIA DE CRUCE DE FASE ');
display(Wcp)
disp('FRECUENCIA DE CRUCE DE GANANCIA ');
display(Wcg)

%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

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

%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

disp('DISEO DE UN COMPENSADOR DE FASE EN ADELANTO')


kv=2;
pms=50;
gp=zpk([ ],[0 -1],1);
T=0.2;
gz=c2d(gp,T,'zoh');
gz=tf(gz); % a)Encontrar el valor de k para que kv=2
syms w tao alfa k
[numz,denz]=tfdata(gz,'v');
num=numz.*[1 -1 1];
den=denz.*[1 -1 1];
[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');
%gw1= -0.00033201*(w+300.2)*(w-10)/(w*(w+0.9997));
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)
%Margen de ganancia=14.274 dB, margen de fase=31.566
% B)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);
% gcmax=0.5365
% C) determinar el valor de wmax para gcmax=ralfa

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

% Disear un compensador en atraso para la planta Gp(s)=1/s(s+1)


% de tal forma que el margen de fase sea de 50 y la constante de
% de velocidad kv sea de 2/seg. El tiempo de muestreo es de 0.2 seg.
clear all
home
disp('DISEO DE UN COMPENSADOR DE FASE EN ATRASO')
kv=2;
pms=50;
T = 0.2;
gp=zpk([ ],[0 -1],1);
gz=c2d(gp,T,'zoh');
gz=tf(gz);
% 0.01873 z + 0.01752 %
% z^2 - 1.819 z + 0.8187
% A) Valor de ganacia para cumplir con el kv
syms w tao alfa k
[numz,denz]=tfdata(gz,'v');
num=numz.*[ 1 -1 1];
den=denz.*[ 1 -1 1];

[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

%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)
gla=gz*gcz;
glc=feedback(gla,1);
figure
step(glc)
DISEO DE UN COMPENSADOR DE FASE EN ATRASO
p = -0.9967
-0.0000
n=

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

% Disear un compensador en atraso-adelanto para la planta Gp(s)=1 /s


(s+1) % de tal forma que el margen de fase sea de 80 y la constante de
% de velocidad kv sea de 2/seg. El tiempo de muestreo es de 0.2 seg.
clear all
clc
% PRIMERA PARTE : ENCONTRAR EL COMPENSADOR DE ADELANTO

disp('DISEO DE UN COMPENSADOR DE FASE EN ATRASO')


kv=2;
% Compensador de atraso compensa a 35
pms=50;
T = 0.2;
gp=zpk([ ],[0 -1],1);
gz=c2d(gp,T,'zoh');
gz=tf(gz);
%A) Valor de ganancia para cumplir con el kv
syms w tao alfa k
[numz,denz]=tfdata(gz,'v');
num=numz.*[ 1 -1 1];
den=denz.*[ 1 -1 1];
[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
figure
margin(gw2)
[gm pm]=margin(gw2)
%B) A partir de Bode determinar el ngulo que requiere
% el compensador de atraso para cumplir con el margen
% de fase del sistema de 50
delta=5;
pm1=pm;
while pm1<pms
phi=-(180-pms-delta);
phi1=phi-0.2;
phi2=phi+0.2;
w=0.1:0.01:100;
[mag,fase]=bode(gw1,w);
% c) Ganancia mxima del compensador
i=find(fase>phi1 & fase<phi2);
% valores comprendidos entre phi1 y phi2
gwmax=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)/gwmax(1,1);

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)

%ejemplo ,hallar si es controlable y la ganancia k


A=[0 1.7 0 0;0 0 -0.22 0;0 0 0 1.5;0 0 0 -48.41]
B=[0;0;0;-2400]
C=[1 0 0 0]
D=[0]
J=[-1+i -1-i -8]
%matriz de controlabilidad
MC1=[B A*B A^2*B A^3*B]
rank(MC1)
%polos del observador
L=[-4 -4];
k=acker(A,B,J)
[num,den]=ss2tf(A,B,C,D)
g=tf(num,den)
a=feedback(g,1)
step(a)