Documente Academic
Documente Profesional
Documente Cultură
m
1.-DESCRIPCIN DEL PROBLEMA
En el informe siguiente describe la sintonizacin de un controlador
mediante primer mtodo de ZIEGLER-NICHOLS (LAZO ABIERTO). En el
archivo ZN1.m se define una curva que se tomar como la respuesta a una
entrada en escaln de una desconocida planta proceso.
La respuesta obtenida de la supuesta planta de proceso a una entrada
escaln es la siguiente:
C ( s ) Ke Ls
U ( s ) Ts 1
Con las siguientes rectas se puede obtener las constantes.
Ti=0.5
Y Td= 0.5*L
y Td=0.65
Td= 0.5*L
%
-------------------------echo off
Kp=input('Introduzca la constante proporcional Kp = ');
Ti=input('Introduzca el tiempo integral Ti = ');
Td=input('Introduzca el tiempo derivativo Td = ');
% La funcin de transferencia del regulador es
numc=[Kp*Td*Ti, Kp*Ti, Kp] ;
denc=[Ti, 0];
% La funcin de transferencia en lazo abierto ser
numg=conv(numc,nump);
deng=conv(denc,denp);
% Y la funcin de transferencia del sistema en lazo cerrado
[num,den]=feedback(numg,deng,1,1,-1);
disp(' ')
disp(' ')
disp('La funcin de transferencia del sistema realimentado es')
printsys(num,den)
clf
% La respuesta al escaln ser
step(num,den,t);grid; title ('Respuesta al escaln')
disp(' ')
disp(' ')
disp('Para ver la respuesta al escaln abra la Figura en el menu
WINDOWS')
disp(' ')
disp(' ')
disp('Pulse una tecla para continuar')
pause
%
%
%
clg
subplot(2,2,1)
% La entrada es un escaln
escalon=ones(1,length(t)); plot(t,escalon);grid;title('Entrada escaln')
subplot(2,2,2)
% La respuesta al escaln ser
respesc=step(num,den,t); plot(t,respesc);grid; title ('Resp escaln')
subplot(2,2,3)
% La seal de error
error=escalon-respesc';
plot(t,error);grid;title('Seal de error')
derivada= diff(error)./diff(t);
derivada(length(t))=derivada(length(t)-1);
i=0; integral=[];integral(1)=1*0.1;
for i=1:length(t)-1
integral(i+1)= integral(i) + error(i+1)*0.1;
end
manipp= Kp*error;
manipd= Kp*Td*derivada;
manipi= (Kp/Ti)*integral;
manip=manipp + manipd + manipi ;
subplot(2,2,4)
plot(t,manip);grid;title('Seal de control')
disp(' ')
clc
disp(' ')
disp(' ')
disp('Vea en la Figura la evolucin de la seal de error')
disp('y la seal de salida del controlador')
disp(' ')
disp(' ')
echo on
% Bastantes reguladores industriales (Honeywell, Foxboro, Siemens,...)
% llevan este ajuste (o uno de Ziegler-Nichols modificado) de manera
% automtica
% Obsrvese que sin tener ningn conocimiento previo de la planta
% se regula razonablemente bien. No es posible conseguir un ajuste
% perfecto, ya que la identificacin hecha de la planta es bastante
% rupestre.
% Hasta luego, Lucas !
3.- EJECUCIN DEL PROGRAMA CON LOS VALORES CALCULADOS PARA EL PID
Con los valores calculados de Kp, Ti y Td se ingresaran al ejecutar el
programa anterior, que mostraran los resultados siguientes:
Kcr=50
Kcr=10
Kcr=15
Ti=0.5*Tc
Ti=0.29
Td= 0.125*Tc
Td=0.0725
K=0;
%
while K > 15 | K < 15
%
%
K=input('Introduzca la ganancia K = ');
numc=K;
denc=1;
% La funcin de transferencia en lazo abierto ser
[numg,deng]=series(numc,denc,nump,denp);
% Y la funcin de transferencia del sistema en lazo cerrado
[num,den]=feedback(numg,deng,1,1,-1);
disp(' ')
disp(' ')
disp('La funcin de transferencia del sistema realimentado es')
printsys(num,den)
%
clf
% La respuesta al escaln ser
t=[0:0.1:10];
step(num,den,t);grid; title ('Respuesta al escaln')
disp(' ')
disp(' ')
disp('Para ver la respuesta al escaln abra la Figura en el menu
WINDOWS')
disp(' ')
end
%
disp('Pulse una tecla para continuar')
pause
echo on
% Ahora que ya ha encontrado la oscilacin lmite, ajustaremos el
% controlador.
% Segn las frmulas de Ziegler-Nichols, los parmetros del controlador
PID
% sintonizado son:
%
Kp= 0.6*Kc
Ti=0.5*Tc
Td= 0.125*Tc
% Introduzca los parmetros del PID sintonizado y vea la respuesta al
% escaln que se obtiene.
%
Gc(s)= Kp(1 + Tds + 1/ Ti s) = (KpTdTi s^2 + KpTi s + Kp) / Tis
echo off
Kp=input('Introduzca la constante proporcional Kp = ');
Ti=input('Introduzca el tiempo integral Ti = ');
Td=input('Introduzca el tiempo derivativo Td = ');
% La funcin de transferencia del regulador es
numc=[Kp*Td*Ti, Kp*Ti, Kp] ;
denc=[Ti, 0];
% La funcin de transferencia en lazo abierto ser
numg=conv(numc,nump);
deng=conv(denc,denp);
% Y la funcin de transferencia del sistema en lazo cerrado
[num,den]=feedback(numg,deng,1,1,-1);
disp(' ')
disp(' ')
disp('La funcin de transferencia del sistema realimentado es')
printsys(num,den)
clf