Diseño de un Compensador de Adelanto Atraso
Programación en Matlab – Script:
%---------------------------------------------
%Diseño de un Compensador de Atraso - Adelanto
%Ogata K, Ingeniería de Control Moderna
%Tercera Edicion
%Ejemplo 9.3, pag. 632
%---------------------------------------------
close all;clear all;clc;
fprintf('-------------------------------------------\n')
fprintf('Diseño de un Compensador de Atraso-Adelanto\n')
fprintf('Ogata K, Ingeniería 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)
%Diseño 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')
Resultados de la compilación del programa:
1 comentario:
Tenes el de atraso y adelanto por separado?
Publicar un comentario