Main Content

pidtune

Algoritmo de ajuste de PID para un modelo de planta lineal

Descripción

ejemplo

C = pidtune(sys,type) diseña un controlador PID de tipo type para la planta sys. Si type especifica un controlador PID de un grado de libertad (1-DOF), el controlador se diseña para el lazo de feedback unitario como se ilustra a continuación:

Si type especifica un controlador PID de dos grados de libertad (2-DOF), pidtune diseña un controlador de 2-DOF como en el lazo de feedback de la siguiente ilustración:

pidtune ajusta los parámetros del controlador PID C para equilibrar el rendimiento (tiempo de respuesta) y la robustez (márgenes de estabilidad).

ejemplo

C = pidtune(sys,C0) diseña un controlador del mismo tipo y forma que el controlador C0. Si sys y C0 son modelos de tiempo discreto, C tiene las mismas fórmulas de integrador discreto que C0.

ejemplo

C = pidtune(___,wc) especifica un valor objetivo wc para la primera frecuencia de cruce de ganancias de 0 dB de la respuesta en lazo abierto.

C = pidtune(___,opts) utiliza opciones de ajuste adicionales, como el margen de fase objetivo. Utilice pidtuneOptions para especificar el conjunto de opciones opts.

ejemplo

[C,info] = pidtune(___) devuelve la estructura de datos info, que contiene información sobre la estabilidad de lazo cerrado, la frecuencia de cruce de ganancias de lazo abierto seleccionada y el margen de fase real.

Ejemplos

contraer todo

En este ejemplo, se muestra cómo diseñar un controlador PID para la planta dada por:

sys=1(s+1)3.

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 al escalón de lazo cerrado (seguimiento de referencia) del sistema controlado.

T_pi = feedback(C_pi*sys, 1);
step(T_pi)

Figure contains an axes object. The axes object contains an object of type line. This object represents 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 al 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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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 derivativa, 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 derivativa del controlador permite que el algoritmo de ajuste diseñe un controlador más ajustado que alcance la frecuencia de cruce objetivo con un buen margen de fase.

Compare la respuesta al escalón de lazo cerrado y una anulación de perturbaciones 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');

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent PI,fast, PIDF,fast.

Puede comparar la anulación de perturbaciones 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');

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent PI,fast, PIDF,fast.

Esta gráfica muestra que el controlador PIDF también proporciona una anulación de perturbaciones más rápida.

Diseñe un controlador PID de forma estándar para la siguiente planta.

sys=1(s+1)3

Para diseñar un controlador de forma estándar, utilice un controlador de forma estándar como argumento C0 para pidtune.

sys = zpk([],[-1 -1 -1],1);
C0 = pidstd(1,1,1); 
C = pidtune(sys,C0)
C =
 
             1      1          
  Kp * (1 + ---- * --- + Td * s)
             Ti     s          

  with Kp = 2.18, Ti = 2.57, Td = 0.642
 
Continuous-time PID controller in standard form

Diseñe un controlador PI de tiempo discreto utilizando un método especificado para discretizar el integrador.

Si su planta es de tiempo discreto, pidtune devuelve automáticamente un controlador de tiempo discreto utilizando el método de integración estándar de Euler predeterminado. Para especificar un método de integración diferente, utilice pid o pidstd para crear un controlador de tiempo discreto con el método de integración deseado.

sys = c2d(tf([1 1],[1 5 6]),0.1);
C0 = pid(1,1,'Ts',0.1,'IFormula','BackwardEuler');  
C = pidtune(sys,C0)
C =
 
             Ts*z 
  Kp + Ki * ------
              z-1 

  with Kp = -0.0658, Ki = 1.32, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time PI controller in parallel form.

Si se utiliza C0 como valor de entrada, pidtune diseña un controlador C de la misma forma, tipo y método de discretización que C0. La pantalla muestra que el término integral de C utiliza el método de integración implícito de Euler.

Especifique un integrador trapezoidal y compare el controlador resultante.

C0_tr = pid(1,1,'Ts',0.1,'IFormula','Trapezoidal');
Ctr = pidtune(sys,C0_tr)
Ctr =
 
       Ts*(z+1)
  Ki * --------
       2*(z-1) 

  with Ki = 1.32, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time I-only controller.

Diseñe un controlador PID de 2-DOF para la planta dada por la función de transferencia:

G(s)=1s2+0.5s+0.1.

Utilice un ancho de banda objetivo de 1.5 rad/s.

wc = 1.5;
G = tf(1,[1 0.5 0.1]);
C2 = pidtune(G,'PID2',wc)
C2 =
 
                       1              
  u = Kp (b*r-y) + Ki --- (r-y) + Kd*s (c*r-y)
                       s              

  with Kp = 1.26, Ki = 0.255, Kd = 1.38, b = 0.665, c = 0
 
Continuous-time 2-DOF PID controller in parallel form.

Utilizar el tipo 'PID2', pidtune genera un controlador de 2-DOF, representado como un objeto pid2. La ventana confirma este resultado. La ventana también muestra que pidtune ajusta todos los coeficientes del controlador, incluyendo las ponderaciones de valores de consigna b y c, para equilibrar el rendimiento y la robustez.

Argumentos de entrada

contraer todo

Modelo de sistema dinámico SISO de la planta para el diseño del controlador. sys puede ser:

  • Cualquier tipo de modelo de sistema dinámico SISO, incluidos los modelos LTI numéricos y los modelos identificados. Si sys es un modelo ajustable o con incertidumbre, pidtune diseña un controlador para el valor actual o nominal de sys.

  • Un modelo de tiempo continuo o discreto.

  • Estable, inestable o integrador. Sin embargo, una planta con polos inestables podría no ser estabilizable en un control PID.

  • Un modelo que incluye cualquier tipo de retardo de tiempo. Sin embargo, una planta con grandes retardos de tiempo podría no alcanzar un rendimiento adecuado en un control PID.

  • Un arreglo de modelos de planta. Si sys es un arreglo, pidtune diseña un controlador independiente para cada planta del arreglo.

Si la planta tiene polos inestables y sys es uno de los siguientes:

  • Un modelo frd

  • Un modelo ss con retardos de tiempo internos que no pueden convertirse a retardos de E/S

se debe utilizar pidtuneOptions para especificar el número de polos inestables de la planta, si los hay.

Tipo de controlador que se desea diseñar, especificado como un vector de caracteres. El término tipo de controlador se refiere a qué términos están presentes en la acción del controlador. Por ejemplo, un controlador PI solo tiene un término proporcional y un término integral, mientras que un controlador PIDF contiene términos proporcionales, integradores y derivativos filtrados. type puede tomar los valores que se resumen a continuación. Para más información acerca de estos tipos de controladores, consulte PID Controller Types for Tuning

Controladores de 1-DOF

  • 'P': solo proporcional

  • 'I': solo integral

  • 'PI': proporcional e integral

  • 'PD': proporcional y derivativo

  • 'PDF': proporcional y derivativo con filtro de primer orden en el término derivativo

  • 'PID': proporcional, integral y derivativo

  • 'PIDF': proporcional, integral y derivativo con filtro de primer orden en el término derivativo

Controladores de 2-DOF

  • 'PI2': proporcional e integral de 2-DOF

  • 'PD2': proporcional y derivativo de 2-DOF

  • 'PDF2': proporcional y derivativo de 2-DOF con filtro de primer orden en el término derivativo

  • 'PID2': proporcional, integral y derivativo de 2-DOF

  • 'PIDF2': proporcional, integral y derivativo de 2-DOF con filtro de primer orden en el término derivativo

Para más información sobre los controladores PID de 2-DOF en general, consulte Two-Degree-of-Freedom PID Controllers.

Controladores de 2-DOF con ponderaciones de valores de consigna fijos

  • 'I-PD': PID de 2-DOF con b = 0, c = 0

  • 'I-PDF': PIDF de 2-DOF con b = 0, c = 0

  • 'ID-P': PID de 2-DOF con b = 0, c = 1

  • 'IDF-P': PIDF de 2-DOF con b = 0, c = 1

  • 'PI-D': PID de 2-DOF con b = 1, c = 0

  • 'PI-DF': PIDF de 2-DOF con b = 1, c = 0

Para información más detallada acerca de los controladores PID de 2-DOF con ponderación de valores de consigna fijos, consulte PID Controller Types for Tuning.

Forma del controlador

Cuando se utiliza la entrada type, pidtune diseña un controlador de forma paralela (pid o pid2). Utilice la entrada C0 en lugar de type si desea diseñar un controlador de forma estándar (pidstd o pidstd2).

Si sys es un modelo de tiempo discreto con un tiempo de muestreo Ts, pidtune diseña un controlador de tiempo discreto con el mismo Ts. El controlador tiene la fórmula del integrador discreto ForwardEuler tanto para acciones integrales como derivativas. Utilice la entrada C0 en lugar de type si desea diseñar un controlador que tenga una fórmula de integrador discreto diferente.

Para más información sobre las formas y fórmulas del controlador PID, consulte:

Propiedades de establecimiento del controlador PID del controlador diseñado, especificadas como un objeto pid, pidstd, pid2 o pidstd2. Si proporciona C0, pidtune:

  • Diseña un controlador del tipo representado por C0.

  • Devuelve un controlador pid si C0 es un controlador pid.

  • Devuelve un controlador pidstd si C0 es un controlador pidstd.

  • Devuelve un controlador pid2 de 2-DOF si C0 es un controlador pid2.

  • Devuelve un controlador pidstd2 de 2-DOF si C0 es un controlador pidstd2.

  • Devuelve un controlador con los mismos valores Iformula y Dformula que C0 si sys es un sistema de tiempo discreto. Consulte las páginas de referencia de pid, pid2, pidstd y pidstd2 para más información sobre Iformula y Dformula.

Valor objetivo para la frecuencia de cruce de ganancias de 0 dB de la respuesta en lazo abierto ajustada. Especifique wc en unidades de radianes/TimeUnit, donde TimeUnit es la unidad de tiempo de sys. La frecuencia de cruce wc establece aproximadamente el ancho de banda de control. El tiempo de respuesta en lazo cerrado es aproximadamente 1/wc.

Aumente wc para acelerar la respuesta. Disminuya wc para mejorar la estabilidad. Cuando se omite wc, pidtune elige automáticamente un valor, basado en la dinámica de la planta, que logra un equilibrio entre respuesta y estabilidad.

Conjunto de opciones de ajuste adicionales para el algoritmo de diseño pidtune, como el margen de fase objetivo o el enfoque de diseño. Use pidtuneOptions para crear opts.

Argumentos de salida

contraer todo

Controlador diseñado para sys. Si sys es un arreglo de modelos lineales, pidtune diseña un controlador para cada modelo lineal y devuelve un arreglo de controladores PID.

Forma del controlador:

  • Si el segundo argumento de pidtune es type, C es un controlador pid o pid2.

  • Si el segundo argumento de pidtune es C0:

    • C es un controlador pid si C0 es un objeto pid.

    • C es un controlador pidstd si C0 es un objeto pidstd.

    • C es un controlador pid2 si C0 es un objeto pid2.

    • C es un controlador pidstd2 si C0 es un objeto pidstd2.

Tipo de controlador:

  • Si el segundo argumento de pidtune es type, C generalmente tiene el tipo especificado.

  • Si el segundo argumento de pidtune es C0, C generalmente tiene el mismo tipo que C0.

En cualquier caso, sin embargo, cuando el algoritmo puede lograr un rendimiento y una robustez adecuados utilizando un controlador de orden inferior al especificado con type o C0, pidtune devuelve un C con menos acciones de las especificadas. Por ejemplo, C puede ser un controlador PI, aunque type sea 'PIDF'.

Dominio del tiempo:

  • C tiene el mismo dominio del tiempo que sys.

  • Si sys es un modelo de tiempo discreto, C tiene el mismo tiempo de muestreo que sys.

  • Si especifica C0, C tiene el mismo Iformula y Dformula que C0. Si no se especifica C0, tanto Iformula como Dformula son Forward Euler. Consulte las páginas de referencia de pid, pid2, pidstd y pidstd2 para más información sobre Iformula y Dformula.

Si especifica C0, C también obtiene propiedades del modelo como InputName y OutputName de C0. Para más información sobre las propiedades del modelo, consulte las páginas de referencia de cada tipo de modelo de sistema dinámico.

Estructura de datos que contiene información sobre el rendimiento y la robustez del lazo PID ajustado. Los campos de info son:

  • Stable: valor booleano que indica estabilidad de lazo cerrado. Stable es 1 si el lazo cerrado es estable y 0 en caso contrario.

  • CrossoverFrequency: primera frecuencia de cruce de 0 dB del sistema de lazo abierto C*sys, en rad/TimeUnit, donde TimeUnit es la unidad de tiempo especificada en la propiedad TimeUnit de sys.

  • PhaseMargin: margen de fase del lazo PID ajustado, en grados.

Si sys es un arreglo de modelos de planta, info es una arreglo de estructuras de datos que contiene información sobre cada lazo PID ajustado.

Sugerencias

  • De forma predeterminada, pidtune con la entrada type devuelve un controlador pid de forma paralela. Para diseñar un controlador de forma estándar, utilice un controlador pidstd como argumento de entrada C0. Para más información sobre las formas de controlador paralela y estándar, consulte las páginas de referencia de pid y pidstd.

  • Para realizar un ajuste interactivo del PID en Live Editor, consulte la tarea Tune PID Controller de Live Editor. Esta tarea permite diseñar un controlador PID de forma interactiva y genera automáticamente código de MATLAB® para un script en vivo.

Algoritmos

Para más información sobre el algoritmo de ajuste PID de MathWorks®, consulte PID Tuning Algorithm.

Funcionalidad alternativa

Referencias

[1] Åström, Karl J., and Tore Hägglund. Advanced PID Control. Research Triangle Park, NC: ISA-The Instrumentation, Systems, and Automation Society, 2006.

Historial de versiones

Introducido en R2010b