En esta entrada estudiaremos como obtener la ecuación de un Control PID Discreto a partir de las ecuaciones continuas del controlador, veremos su representación en ecuaciones en diferencias y como este controlador es implementado en sistemas microcontrolados como Arduino, PIC, Matlab o Simulink.
Antes de comenzar, te hago la invitación para que veas nuestro curso sobre Control Realimentado, donde hemos tratado diferentes métodos y criterios para sintonizar controladores PID discretos y continuos.
Y que te suscribas al canal si te interesa la teoría del control, la programación y los microcontroladores:
Controlador PID
El controlador PID (Proporcional – Integral – Derivativo) es el controlador más popular a nivel industrial debido a su robustez y facilidad de entendimiento, por lo que es prácticamente usado en el 95% de los casos.
Existen diversas representaciones del controlador PID, dentro de ellas tenemos la representación del control Paralelo el cual viene dado por la siguiente ecuación matemática en el dominio del tiempo:
u(t)=k_ce(t)+\dfrac{k_c}{\tau_i}\int_0^te(t)dt+k_c\tau_d\dfrac{de(t)}{dt}
Y que puede ser representado en el dominio transformado de Laplace como:
C(s)=k_c\left(1+\dfrac{1}{\tau_is}+\tau_ds \right)
El diagrama de bloques de un controlador PID viene dado por:
El diseño y sintonización de un controlador PID se basan en gran medida en la función de transferencia del sistema que se desea controlar. Para comprender cómo se derivan y aplican las funciones de transferencia en el contexto de los controladores PID, puedes consultar nuestro artículo sobre Función de Transferencia, donde cubrimos todos los fundamentos necesarios.
La siguiente figura, nos muestra una analogía de como funciona el controlador PID el cual actua sobre la señal de entrada e(t) [Error del sistema], donde la Acción Proporcional es el presente, la acción integral el pasado y la acción derivativa el futuro.
Controladores PID discreto
A continuación vamos a describir como se obtienen los controladores discretos (P PI PD PID) a través de una discretización de un controlador PID continuo;
Aproximación discreta del modo P (Proporcional)
Este tipo de controlador genera una salida que es proporcional al error actuante.
La ecuación de un controlador Proporcional es:
u(t)=k_ce(t)+u_0
Su forma discreta:
u(k)=k_ce(k)+u_0
La salida del controlador en el instante k-1
u(k-1)=k_ce(k-1)+u_0
Restando las dos ecuaciones anteriores (un tiempo de muestreo)
u(k)-u(k-1)=k_c\left[e(k)-e(k-1)\right]
Aplicando la transformada Z
(1-z^{-1})U(z)=k_c(1-z^{-1})E(z)
función de transferencia de pulso del controlador proporcional es:
C(z)=\dfrac{U(z)}{E(z)}=q_0
donde:
k_c=q_0
Aproximación discreta del modo PI
En el controlador PI se adiciona el efecto de la acción integradora donde la señal de salida experimenta un salto inicial proporcional al error actuante y a continuación presenta una variación gradual a una velocidad proporcional al error.
La ecuación de un controlador PI es:
u(t)=k_ce(t)+\dfrac{k_c}{\tau_i}\int_0^te(t)dt
Para tiempos de muestreo pequeños, la ecuación anterior se puede llevar a una ecuación en diferencias por discretización, reemplazando la parte integral por una suma. La integración continua se puede aproximar utilizando integración rectangular o integración trapezoidal. Utilizando el método de integración trapezoidal [1]:
A=\left[ \dfrac{e(k)+e(k-1)}{2} \right]T_s
El área total bajo la curva del error es igual a la suma de las áreas de todos los trapecios en que se pueda subdividir dicha área
\int e(t)dt=\sum_{h=0}^k \left[ \dfrac{e(h)+e(h-1)}{2} \right]T_s
entonces a partir de la ecuación continua
u(t)=k_c\left[e(t)+\dfrac{1}{\tau_i}\int_0^te(t)dt\right]
llevándolo a la versión discreta:
u(k)=k_c\left[e(k)+\dfrac{T_s}{2\tau_i}\sum_{h=0}^k \left[ e(h)+e(h-1) \right]\right]
La salida del controlador en el instante k-1
u(k-1)=k_c\left[e(k-1)+\dfrac{T_s}{2\tau_i}\sum_{h=0}^k \left[ e(h-1)+e(h-2) \right]\right]
Restando las dos ecuaciones anteriores (un tiempo de muestreo)
u(k)-u(k-1)=k_c\left[e(k)-e(k-1)+\dfrac{T_s}{2\tau_i}\sum_{h=0}^k \left[ e(h)-e(h-2) \right]\right]
de la ecuación anterior, vamos inicialmente a analizar el término:
\sum_{h=0}^k \left[ e(h)-e(h-2) \right]
Para eso vamos a suponer que vamos a ir hasta la muestra k=4
\sum_{h=0}^{4} \left[ e(h)-e(h-2) \right]
Abriendo el sumatorio anterior y siempre considerando que todos los errores e(h) solo son válidos para instantes de tiempo h positivos.
[e(0)-e(-2)]+[e(1)-e(-1)]+[e(2)-e(0)]+[e(3)-e(1)]+[e(4)-e(2)]=e(4)+e(3)
por lo tanto:
\sum_{h=0}^{4} \left[ e(h)-e(h-2) \right]=e(4)+e(3)
Lo que muestra entonces que para un k cualquiera, puedo reescribir el sumatório inicial que estaba en términos de h a términos de k:
\sum_{h=0}^k \left[ e(h)-e(h-2) \right]=e(k)+e(k-1)
Volviendo a la ecuación del diseño del controlador PI discreto:
u(k)-u(k-1)=k_c\left[e(k)-e(k-1)+\dfrac{T_s}{2\tau_i}\left[ e(k)+e(k-1) \right]\right]
u(k)-u(k-1)=k_c\left[\left(1+\dfrac{T_s}{2\tau_i}\right)e(k)-\left( 1-\dfrac{T_s}{2\tau_i} \right)e(k-1)\right]
Esta última ecuación del controlador PI la Podemos reescribir como:
u(k)=u(k-1)+q_0e(k)+q_1e(k-1)
donde:
q_0=k_c\left[1+\dfrac{T_s}{2\tau_i}\right]
q_1=-k_c\left[1-\dfrac{T_s}{2\tau_i}\right]
la ecuación en el dominio transformado Z del controlador PI es:
C(z)=\dfrac{U(z)}{E(z)}=\dfrac{q_0+q_1z^{-1}}{1-z^{-1}}
Aproximación discreta del modo PID
La acción derivativa del controlador PID aporta la característica de anticipación dentro del sistema de control.
La ecuación de un controlador PID es:
u(t)=k_ce(t)+\dfrac{k_c}{\tau_i}\int_0^te(t)dt+k_c\tau_d\dfrac{de(t)}{dt}
Al aproximar el término integral mediante la sumatoria trapezoidal y el término derivativo mediante la diferencia de dos puntos, se obtiene:
u(k)=k_c\left[e(k)+\dfrac{T_s}{2\tau_i}\sum_{h=0}^k \left[ e(h)+e(h-1) \right] + \dfrac{\tau_d}{T_s} \left[ e(k)-e(k-1) \right]\right]
La salida del controlador en el instante k-1
u(k-1)=k_c\left[e(k-1)+\dfrac{T_s}{2\tau_i}\sum_{h=0}^k \left[ e(h-1)+e(h-2) \right] + \dfrac{\tau_d}{T_s} \left[ e(k-1)-e(k-2) \right]\right]
u(k)-u(k-1)=k_c\left[e(k)-e(k-1)+\dfrac{T_s}{2\tau_i}\sum_{h=0}^k \left[ e(h)-e(h-2) \right] + \dfrac{\tau_d}{T_s} \left[e(k)-2 e(k-1)+e(k-2) \right]\right]
u(k)-u(k-1)=k_c\left[e(k)-e(k-1)+\dfrac{T_s}{2\tau_i}\left[ e(k)+e(k-1) \right] + \dfrac{\tau_d}{T_s} \left[e(k)-2 e(k-1)+e(k-2) \right]\right]
u(k)-u(k-1)=k_c\left[\left(1+\dfrac{T_s}{2\tau_i}+\dfrac{\tau_d}{T_s}\right)e(k)-\left(1-\dfrac{T_s}{2\tau_i}+\dfrac{2\tau_d}{T_s}\right)e(k-1)+\dfrac{\tau_d}{T_s}e(k-2)\right]
Esta última ecuación del controlador PID la Podemos reescribir como:
u(k)=u(k-1)+q_0e(k)+q_1e(k-1)+q_2e(k-2)
donde:
q_0=k_c\left(1+\dfrac{T_s}{2\tau_i}+\dfrac{\tau_d}{T_s}\right)
q_1=-k_c\left(1-\dfrac{T_s}{2\tau_i}+\dfrac{2\tau_d}{T_s}\right)
q_2=\dfrac{k_c\tau_d}{T_s}
La ecuación del controlador PID discreto en la transformada Z es:
C(z)=\dfrac{U(z)}{E(z)}=\dfrac{q_0+q_1z^{-1}+q_2z^{-2}}{1-z^{-1}}
Controlador PID discreto en arduino o en cualquier microcontrolador
El diseño de un controlador PID discreto en dispositivos embebidos es muy sencillo de implementar, especialmente este que hemos tratado en la entrada, donde lo que haremos es representar el Control PID Discreto representado en sus ecuaciones en diferencias.
Sin embargo, tengo algunos cursos PREMIUM de más de 6 horas donde te explico como implementar todo tipo de sistemas de control en dispositivos embebidos como el Arduino o el microcontrolador PIC de Microchip.
- Curso de Sistemas de Control en Dispositivos Microcontrolados en UDEMY (PIC y ARDUINO)
- Certificado de Aprobación una vez finalices el Curso
- DESCUENTO si accedes directamente con los siguientes botones de acceso.
- NOTA: Si buscas el curso directamente en UDEMY o si lo adquieres en otra plataforma distintas a las mostradas anteriormente NO OBTENDRÁS NINGUN DESCUENTO sobre el valor final del Curso.
Accede a los cursos dando click a cualquiera de los dos botones de ARRIBA!! sin embargo también puedes darle un vistazo a nuestras entradas como:
En este sitio web también tenemos varias implementaciones y explicaciones del controlador PID digital:
Como Hacer un Control PID de Temperatura con Arduino
Método Cohen y Coon de Sintonía para Controles PID
Control PID con microcontrolador PIC
A continuación vamos a ver un ejemplo de sintonización de un PID discreto con matlab & Simulink.
Controladores Discretos con Matlab
En matlab tenemos varias formas de realizar la implementación de controladores discretos, en este caso veremos como programar un controlador PID discreto, la más rápida e intuitiva es discretizando el controlador PID continuo, el cual puede ser calculado con técnicas clásicas como el Ziegler y Nichols.
O implementar directamente el controlador PID discreto que hemos visto en esta entrada
La discretización en matlab puede ser llevado a cabo con el comando c2d.
c2d Convierte el sistema dinámico de tiempo continuo en tiempo discreto.
SYSD = c2d (SYSC, TS, METHOD)
Calcula un modelo de tiempo discreto SYSD con tiempo de muestreo Ts que se aproxima al modelo de tiempo continuo SYSC. El parámetro METHOD selecciona el método de discretización, por lo tanto el PID discreto con Matlab puede usar los siguientes métodos:
- ‘zoh’ Retención de orden cero en las entradas
- ‘foh’ Interpolación lineal de entradas
- ‘impulse’ Discretización invariante del impulso
- ‘tustin’ Aproximación Bilineal (Tustin).
- ‘matched’ Método de emparejado de polos y ceros (solo para sistemas SISO).
- ‘least-squares’ Minimización por mínimos cuadrados del error entre las respuestas frecuenciales (solo para sistemas SISO).
- ‘damped’ Aproximación de Tustin amortiguada basada en la fórmula TRBDF2 (solo modelos dispersos).
El valor predeterminado es ‘zoh’ cuando se omite METHOD. El tiempo de muestreo Ts debe especificarse en las unidades de tiempo de SYSC. Cada uno de los métodos anteriores nos darán variantes del controlador PID discreto.
%% PID DISCRETO EN MATLAB % Sergio Andres Castaño Giraldo % https://controlautomaticoeducacion.com/ clc clear close all Ts=8; %Periodo de Muestreo %Modelo del Proceso k=1.175;tau=140;theta1=10; theta = theta1 + Ts/2; G=tf(k,[tau 1]); G.iodelay = theta1; %Discretización de la planta Gd = c2d(G,Ts,'zoh'); %Control PID por Ziegler y Nichols kp=(1.2*tau)/(k*theta); ti=2*theta; td=0.5*theta; incontrolabilidad = theta / tau C=tf(kp*[ti*td ti 1],[ti 0]); %Control PID Continuo %Discretización del Control Continuo Bilineal Cd=c2d(C,Ts,'tustin') %Aprozimacion Trapezoidal Cd2=kp+kp/ti*Ts/2*tf([1 1],[1 -1],Ts)+kp*td*1/Ts*tf([1 -1],[1 0],Ts) %Tiempo de Simulación nit = 30; t=0:Ts:(nit-1)*Ts; %Escalon r = ones(1,length(t)); % Calculo do controle PID digital Trapezoidal q0=kp*(1+Ts/(2*ti)+td/Ts); q1=-kp*(1-Ts/(2*ti)+(2*td)/Ts); q2=(kp*td)/Ts; %Potencias negativas % Cz = filt([q0 q1 q2],[1 -1], Ts); %Potencias positivas Cz = tf([q0 q1 q2],[1 -1 0], Ts) % Lazo Cerrado H = feedback(series(G,C),1); H1 = feedback(series(Gd,Cz),1); H2 = feedback(series(Gd,Cd),1); %Respuesta al escalón y1 = step(H1,t); y2 = step(H2,t); figure(1) subplot(211) plot(t,r,'--r',t,y1,'-k','linewidth',2),grid xlabel('t(s)'); ylabel('T(C)'); title('PID Discreto Trapezoidal') legend('Setpoint','Temperatura','location','southeast') subplot(212) plot(t,r,'--r',t,y2,'-k','linewidth',2),grid xlabel('t(s)'); ylabel('T(C)'); title('PID Discreto Discretizado') legend('Setpoint','Temperatura','location','southeast')
PID discreto en Simulink
Simulink también cuenta con el bloque directo del controlador PID discreto que puede ser encontrado en el blockset Simulink/Discrete. Donde se puede seleccionar el tipo de aproximación de la integral como Forward Euler, Backward Euler o Trapezoidal.
Puede ser implementado directamente con la planta en tiempo continuo o en tiempo discreto pues para simulink es indiferente.
Y el controlador PID Digital también puede ser implementado como una función de transferencia discreta (DiscreteTransfer Fcn) o un filtro (Discrete Filter).
En la implementación de controladores PID discretos, el uso de diagramas de bloques nos ayuda a representar de manera clara las operaciones de control digital y la retroalimentación dentro del sistema.
La configuración del PID discreto en Simulink se muestra a continuación:
El siguiente esquema en simulink funciona después de haber ejecutado el Script de Matlab mostrado anteriormente.
📚 Bibliografía:
- Control Digital, Teoría y Práctica 2Ed – Luis Eduardo García Jaimes, Medellín 2009
- Ogata, Katsuhiko. Sistemas de control tiempo discreto. Prentice Hall, 1996 D. F. México, 2a Edición
Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:
👉 Invitar a Sergio a un Café ☕️
Que esten muy bien, nos vemos en la siguiente entrada.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.