Está en la página 1de 9

Diseo de un Compensador de Atraso- Matlab

Programacin en Matlab Script:


%--------------------------------------------%Diseo de un Compensador de Atraso
%Ogata K, Ingeniera de Control Moderna
%Tercera Edicion
%Ejemplo 9.2, pag. 623
%--------------------------------------------close all;clear all;clc;
fprintf('-------------------------------------------\n')
fprintf('Diseo de un Compensador de Atraso\n')
fprintf('Ogata K, Ingeniera de Control Moderna\n')
fprintf('Tercera Edicion\n')
fprintf('Ejemplo 9.2, pag. 623\n')
fprintf('-------------------------------------------\n')
%Requerimientos del sistemas
kv=5; MF1=40;MG1=10;
%Planta
den1=[1 0];
den2=[1 1];
den3=[.5 1];
den4=conv(den1,den2);
den=conv(den4,den3);
kva=1/polyval(deconv(den,[1 0]),0);
k=kv/kva
num=[k];
fprintf('\n**Planta del Sistema**\n')
planta=tf(num,den)
%Se halla los vectores de Ganancia y Fase (fase)
w0=logspace(-2,2,500);
[Gan,Fase]=bode(num,den,w0);
GandB=20*log10(Gan);
%Marge de fase
indice=find(GandB<=0);
wcgan=w0(indice(1));
MF=Fase(indice(1))+180;
%Margende ganancia

indice2=find(Fase<=-180);
wcfase=w0(indice2(1));
MG=-GandB(indice2(1));
%Angulo de fase
Fadic=-180+MF1+5;
%Buscamos la frecuencia de corte wgc que tenga esa fase
indice3=find(Fase<=Fadic);
wgc=w0(indice3(1));
%Ganancia de fase a esa frecuencia de corte
GanW=GandB(indice3(1));
%Atenuacin del compensador
beta=10^(GanW/20);
%Para asegurar una frecuencia alta del compensador se hace
T=5/wgc;
%Parmetros del Compensador
zc=1/T;
pc=1/(beta*T);
kc=k/beta;
numc=kc*[1 zc];
denc=[1 pc];
fprintf('\n**Compensador Diseado**\n')
Comp=tf(numc,denc)
%Planta Compensada
fprintf('\n**Planta Compensada**\n')
plantacompensada=series(planta,Comp)
%Grfica de Bode del Compensador en atraso
%Respuesta en el Tiempo
figure(1);step(feedback(planta,1)),hold on, grid on
step(feedback(plantacompensada,1))
title('Respuesta en el Tiempo')
legend('Planta Sin Compensador','Planta Compensada')
%Respuesta en Frecuencia
figure(2);bode(planta),hold on, grid on
bode(plantacompensada)
title('Respuesta en Frecuencia')
legend('Planta Sin Compensador','Planta Compensada')

Diseo de un Compensador de Adelanto - Matlab

Programacin en Matlab Script:


%-------------------------------------%Diseo de un Compensador de Adelanto
%Ogata K, Ingeniera de Control Moderna
%Tercera Edicion
%Ejemplo 9.1, pag. 615
%-------------------------------------close all;clear all;clc;
fprintf('-------------------------------------\n')
fprintf('Diseo de un Compensador de Adelanto\n')
fprintf('Ogata K, Ingeniera de Control Moderna\n')
fprintf('Tercera Edicion\n')
fprintf('Ejemplo 9.1, pag. 615\n')
fprintf('--------------------------------------\n')
%Planta
num=4;den=[1 2 0];
fprintf('\n**Planta del Sistema**\n')
planta=tf(num,den)
%Requerimientos del sistemasDiseo
kv=20; MFD=50;MG=50;
kva=polyval(num,0)/polyval(deconv(den,[1 0]),0);
k=kv/kva;
%Se contina el diseo sobre plantaaux=k*planta
numaux=k*num; denaux=den; plantaaux=tf(numaux,denaux);

%Se halla los vectores de Gnancia (gandB) y Fase (fase)


w=logspace(-1,2,500);[gan,fase]=bode(numaux,denaux,w);
gandB=20*log10(gan);
%Se halla el margen de fase: MF
Vectindices=find(gandB<0);indice=vectindices(1);mf=180-(-fase(indice));
% Se halla la fase a compensar: Fadic
Fadic=MFD-MF+5;
%alfa
alfa=(1-sin(Fadic*pi/180))/(1+sin(Fadic*pi/180));
%Ganancia del Compensador
r=20*log10(sqrt(1/alfa));
%Se halla la nueva frecuencia de cruce de ganancia: wn
Vectindice2=find(gandB<-r);indice2=Vectindice2(1);wm=w(indice2);
%T
T=1/sqrt(alfa)/wm;
%Parmetros del Compensador
Zc=1/T;Pc=1/alfa/T;Kc=k/alfa;
fprintf('\n**Compensador Diseado**\n')
Comp=tf(Kc*[1 Zc],[1 Pc])
%Planta Compensada
fprintf('\n**Planta Compensada**\n')
plantacompensada=series(planta,Comp)
%Respuesta en el Tiempo
figure(1);step(feedback(planta,1)),hold on, grid on
step(feedback(plantacompensada,1))

title('Respuesta en el Tiempo')
legend('Planta Sin Compensador','Planta Compensada')
%Respuesta en Frecuencia
figure(2);bode(planta),hold on, grid on
bode(plantacompensada)
title('Respuesta en Frecuencia')
legend('Planta Sin Compensador','Planta Compensada')
Resultados de la compilacin del programa:
-----------------------------------------------------Diseo de un Compensador de Adelanto
Ogata K, Ingeniera de Control Moderna
Tercera Edicion
Ejemplo 9.1, pag. 615
------------------------------------------------------**Planta del Sistema**
Transfer function:
4
--------s^2 + 2 s
**Compensador Diseado**
Transfer function:
40.39 s + 178.2
--------------s + 17.82
**Planta Compensada**

Transfer function:
161.5 s + 713
------------------------s^3 + 19.82 s^2 + 35.65 s
Diseo de un Compensador de Adelanto-Atraso en Matlab
Programacin en Matlab Script:
%--------------------------------------------%Diseo de un Compensador de Atraso - Adelanto
%Ogata K, Ingeniera de Control Moderna
%Tercera Edicion
%Ejemplo 9.3, pag. 632
%--------------------------------------------close all;clear all;clc;
fprintf('-------------------------------------------\n')
fprintf('Diseo de un Compensador de Atraso-Adelanto\n')
fprintf('Ogata K, Ingeniera de Control Moderna\n')
fprintf('Tercera Edicion\n')
fprintf('Ejemplo 9.3, pag. 632\n')
fprintf('-------------------------------------------\n')
%Requerimientos del sistemas
kv=10; MFD=50;MGD=50;
%Planta
den1=[1 0];
den2=[1 1];
den3=[1 2];
den4=conv(den1,den2);
den=conv(den4,den3);
kva=1/polyval(deconv(den,[1 0]),0);
k=kv/kva;
num=[k];
fprintf('\n**Planta del Sistema**\n')
planta=tf(num,den)
%Diseo del COMPENSADOR DE ATRASO DE FASE
%Diagrama de bode de la planta
w0=logspace(-1,2,500);
[Gan0,Fase0]=bode(planta,w0);

GandB0=20*log10(Gan0);
%Hallamos el margen de fase y ganancia
w1=logspace(-1,2,500);
[Gan1,Fase1]=bode(planta,w1);
Gandb1=20*log10(Gan1);
%Margende fase
indice1=find(Gandb1<=0);
wcg1=w1(indice1(1));
MF=Fase1(indice1(1))+180;
%Margende ganancia
indice2=find(Fase1<=-180);
wcf1=w1(indice2(1));
MG=-Gandb1(indice2(1));
%Margen deseado del compensador
Fadic1=-180+MFD+12;
%Frecuencia del compensador
indice3=find(Fase1<=Fadic1);
wgcomp=w1(indice3(1));
%Hallamos la ganancia de fase a esa frecuencia
Ganf=Gandb1(indice3(1));
%el compensador agrega
beta=10^(Ganf/20);
%Para asegurar una frecuencia alta del compensador se hace
T=5/wgcomp;
z1comp=1/T;
p1comp=1/(beta*T);
k1comp=k/beta;
numcomp=k1comp*[1 z1comp];
dencomp=[1 p1comp];
Comp1=tf(numcomp,dencomp);
Scomp1=series(planta,Comp1);
%COMPENSADOR DE ADELANTO DE FASE
%Planta + Compensador de Atraso
w=logspace(-4,1,500);
[Gan2,Fase2]=bode(Scomp1,w);

Gandb2=20*log10(Gan2);
%Margen de fase
VecIndice1=find(Gandb2<=0);
Indice1=VecIndice1(1);
Wogan=w(Indice1);
MF2=Fase2(Indice1)+180;
%Fase adicional
Fadic2=MFD-MF2;
%Se calcula el factor de atenuacion Alfa
alfa=(1-sin(Fadic2*pi/180))/(1+sin(Fadic2*pi/180));
%Nuevo cruce de ganancia
%Ganancia adicionada por el compensador
r=20*log10(1/sqrt(alfa));
VecIndice2=find(Gandb2<=-r);
Indice2=VecIndice2(1);
Wm=w(Indice2);
T2=1/[sqrt(alfa)*Wm ];
%parametros del compensador
Z2comp=1/T2;
P2comp=1/(alfa*T2);
k2comp=1/alfa;
numcomp2=k2comp*[1 Z2comp];
dencomp2=[1 P2comp];
Comp2=tf(numcomp2,dencomp2);
%Planta Compensada
fprintf('\n**Planta Compensada**\n')
plantacompensada=series(Scomp1,Comp2)
%Respuesta en el Tiempo
figure(1);step(feedback(planta,1)),hold on, grid on
step(feedback(plantacompensada,1))
title('Respuesta en el Tiempo')
legend('Planta Sin Compensador','Planta Compensada')
%Respuesta en Frecuencia
figure(2);bode(planta),hold on, grid on
bode(plantacompensada)

title('Respuesta en Frecuencia')
legend('Planta Sin Compensador','Planta Compensada')

También podría gustarte