You are on page 1of 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')

You might also like