Diseño de un controlador PID en la línea de comandos
En este ejemplo, se muestra cómo diseñar un controlador PID para la planta dada por:
Como paso inicial, cree un modelo de la planta y diseñe un controlador PI simple para ella.
sys = zpk([],[-1 -1 -1],1);
[C_pi,info] = pidtune(sys,'PI')
C_pi = 1 Kp + Ki * --- s with Kp = 1.14, Ki = 0.454 Continuous-time PI controller in parallel form.
info = struct with fields:
Stable: 1
CrossoverFrequency: 0.5205
PhaseMargin: 60.0000
C_pi
es un objeto de controlador pid
que representa un controlador PI. Los campos de info
muestran que el algoritmo de ajuste selecciona una frecuencia de cruce de lazo cle abierto de aproximadamente 0,52 rad/s.
Examine la respuesta en escalón de lazo cerrado (seguimiento de referencia) del sistema controlado.
T_pi = feedback(C_pi*sys, 1); step(T_pi)
Para mejorar el tiempo de respuesta, puede definir una frecuencia de cruce objetivo más alta que el resultado que pidtune
selecciona automáticamente, 0,52. Aumente la frecuencia de cruce a 1,0.
[C_pi_fast,info] = pidtune(sys,'PI',1.0)
C_pi_fast = 1 Kp + Ki * --- s with Kp = 2.83, Ki = 0.0495 Continuous-time PI controller in parallel form.
info = struct with fields:
Stable: 1
CrossoverFrequency: 1
PhaseMargin: 43.9973
El nuevo controlador alcanza la frecuencia de cruce más alta, pero a costa de un menor margen de fase.
Compare la respuesta en escalón de lazo cerrado con los dos controladores.
T_pi_fast = feedback(C_pi_fast*sys,1); step(T_pi,T_pi_fast) axis([0 30 0 1.4]) legend('PI','PI,fast')
Esta reducción en el rendimiento se debe a que el controlador PI no dispone de suficientes grados de libertad para alcanzar un buen margen de fase a una frecuencia de cruce de 1,0 rad/s. Si se añade una acción derivada, se mejora la respuesta.
Diseñe un controlador PIDF para Gc
con la frecuencia de cruce objetivo de 1,0 rad/s.
[C_pidf_fast,info] = pidtune(sys,'PIDF',1.0)
C_pidf_fast = 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 with Kp = 2.72, Ki = 0.985, Kd = 1.72, Tf = 0.00875 Continuous-time PIDF controller in parallel form.
info = struct with fields:
Stable: 1
CrossoverFrequency: 1
PhaseMargin: 60.0000
Los campos de información muestran que la acción derivada del controlador permite que el algoritmo de ajuste diseñe un controlador más agresivo que alcance la frecuencia de cruce objetivo con un buen margen de fase.
Compare la respuesta en escalón de lazo cerrado y el rechazo de la perturbación en los controladores PI y PIDF rápidos.
T_pidf_fast = feedback(C_pidf_fast*sys,1); step(T_pi_fast, T_pidf_fast); axis([0 30 0 1.4]); legend('PI,fast','PIDF,fast');
Puede comparar el rechazo de la perturbación de entrada (carga) del sistema controlado con los controladores PI y PIDF rápidos. Para ello, represente la respuesta de la función de transferencia de lazo cerrado desde la entrada de la planta hasta su salida.
S_pi_fast = feedback(sys,C_pi_fast); S_pidf_fast = feedback(sys,C_pidf_fast); step(S_pi_fast,S_pidf_fast); axis([0 50 0 0.4]); legend('PI,fast','PIDF,fast');
Esta gráfica muestra que el controlador PIDF también proporciona un rechazo de la perturbación más rápido.