Está en la página 1de 2

% Nise, N.S.

% Control Systems Engineering, 3rd ed.


% John Wiley & Sons, New York, NY, 10158-0012
%
% Control Systems Engineering Toolbox Version 3.0
% Copyright © 2000 by John Wiley & Sons, Inc.
%
% (ch11p3) Ejemplo 11.3: Usemos MATLAB para diseñar un compensador de plomo. los
% programa resuelve el Ejemplo 11.3 en el texto y sigue la misma técnica de diseño
% demostrado en ese ejemplo. Ingresará el porcentaje de exceso deseado, pico
% de tiempo, y Kv. MATLAB luego diseña el compensador de plomo utilizando diagramas
de Bode,
% calcula Kv y traza una respuesta de paso en bucle cerrado.

'(ch11p3) Example 11.3' % Mostrar etiqueta.


pos=input('Type %OS '); % Ingresar porcentaje deseado de sobrepaso.
Tp=input('Type peak time '); % Ingresar tiempo pico deseado.
Kv=input('Type value of Kv '); % Ingresar Kv deseado.
numg=[100]; % Definir numerador de G(s).
deng=poly([0 -36 -100]); % Definir denominador de G(s).
G=tf(numg,deng) % Crear G(s).
s=tf([1 0],1) % Crear función de transferencia, 's'.
sG=s*G; % Crear sG(s).
sG=minreal(sG); % Cancelar factores comunes.
K=dcgain(Kv/sG); % Resolver para K.
'G(s)' % Mostrar etiqueta.
G=zpk(K*G) % Poner K en G(s), convertir a la
% forma factorizada, y mostrar.
z=(-log(pos/100))/(sqrt(pi^2+log(pos/100)^2))
% Calcular la relación de amortiguación
requerida.
Pm=atan(2*z/(sqrt(-2*z^2+sqrt(1+4*z^4))))*(180/pi)
% Calcular el margen de fase requerido.
wn=pi/(Tp*sqrt(1-z^2)); % Calcular la frecuencia natural
% requerida.
wBW=wn*sqrt((1-2*z^2)+sqrt(4*z^4-4*z^2+2))
% Determinar ancho de banda requerido.
w=0.01:0.5:1000; % Establecer rango de frecuencia desde 0.01 hasta
% 1000 en pasos de 0.5.
[M,P]=bode(G,w); % Obtener datos de Bode.

figure(1)
bode(G,w)
grid on
[Gm,Pm,Wcg,Wcp]=margin(G) % Hallar margen de fase actual.
Pmreq=atan(2*z/(sqrt(-2*z^2+sqrt(1+4*z^4))))*(180/pi)
% Calcular el margen de fase requerido.
Pmreqc=Pmreq+10; % Añadir una corrección de factor de 10
% grados.
Pc=Pmreqc-Pm; % Calcular la contribución de la fase
% requerida del compensador de adelanto.
% Design lead compensator.

beta=(1-sin(Pc*pi/180))/(1+sin(Pc*pi/180));
% Hallar el compensador beta.
magpc=1/sqrt(beta); % Hallar la magnitud pico del compensador.
for k=1:1:length(M); % Hallar la frecuencia a la cual
% el sistema no compensado tiene una
% magnitud de 1/magpc.
% Esta frequencia será el nuevo
% margen de fase de frequencia.
if M(k)-(1/magpc)<=0; % Buscar la magnitud pico.
wmax=w(k); % Esta es la frecuencia a la magnitud
% pico.
break % Detener el ciclo.
end % Fin if.
end % Fin for.
% Calcular el zero, polo, y ganancia del compensador de adelanto.
zc=wmax*sqrt(beta); % Calcular la ruptura de baja frecuencia
% del compensador de adelanto.
pc=zc/beta; % Calcular la ruptura de alta frecuencia
% del compensador de adelanto.
Kc=1/beta; % Calcular la ganancia del
% compensador de adelanto.
'Gc(s)' % Mostrar etiqueta.
Gc=tf(Kc*[1 zc],[1 pc]); % Crear Gc(s).
Gc=zpk(Gc) % Convertir Gc(s) a la forma factorizada y
% mostrar.
'Ge(s)=G(s)Gc(s)' % Mostrar etiqueta.
Ge=G*Gc % Crear Ge(s)=Gc(s)G(s).
sGe=s*Ge; % Crear sGe(s).
sGe=minreal(sGe); % Cancelar factores comunes.
Kv=dcgain(sGe) % Calcular Kv.
T=feedback(Ge,1); % Encontrar T(s).
figure(2)
step(T) % Generar una respuesta escalonada, con
compensador de adelanto,
% en ciclo cerrado.
title('Lead-Compensated Step Response')
% Añadir título al compensador de adelanto,
mediante
% respuesta escalonada de ciclo cerrado.

También podría gustarte