Este ejemplo surgió de una práctica que realice para usar el CCS RTOS. El resultado fue un ejemplo, creo yo, bastante completo en la implementación de un control PID y el RTOS de CCS. Así que lo documenté y lo posteo, seguramente a alguien le va a servir la info expuesta.
Objetivo: Un sistema de control de temperatura configurable mediante un panel de control (Teclado mas display LCD), en donde se puede seleccionar entre control On/Off o PID, ingreso de Temperatura deseada (Set Point), cambio de alguno de los parámetros del PID (Kp, Ti, Td), Visualización de las variables (Temperatura actual del sistema, Temperatura deseada, Kp, Ti, Td) y un simple datalogger activable (Envía por RS232 temperatura cada ciertos ms)
El sistema a controlar será el horno Over que trae Proteus, excelente para esta práctica ya que trae un terminal donde nos indica la temperatura del horno necesaria para la realimentación. El Over lo configuramos de la siguiente manera para hacer más rápidas las simulaciones: 25, 0.7, 1, 1, 100.
Identificación del Sistema (Apuntes de
Identificación de sistemas)
En este caso para identificar el sistema simplemente aplique un escalón de 1 volts y determiné la salida. Capturé los datos cada 100ms, y con estos ingresé a la utilidad ident de Matlab.
Aquí blackgat explica paso a paso como determinar el sistema usando esta utilidad de Matlab. Este es solo un ejemplo así que no me preocupe por obtener un modelo bien determinado, en ese caso no solo hay que aplicar un escalón, sino aplicar una entrada de varios niveles, y así obtener un sistema estimado más aproximado al real.
En ident, seleccione oe221 logrando una identificación del 99.65%. El modelo del sistema resultante para Ts=0.1s:
GZ=\frac{0.6566z+0.6145}{z^2-1.809z+0.8178}
Aplicando D2C determinamos el modelo de sistema continuo:
GS=\frac{-0.0027s+140.4}{s^2+2.011s+0.9723}
Selección de muestro a lazo cerrado. Este valor esta íntimamente relacionado con el ancho de banda del sistema y las velocidades razonables de muestro están entre 6 y 10 veces este valor.
En Matlab determinamos el bode del sistema, dando un ancho de banda de 4.4 Hz, con esto seleccionamos 0.02 segundos como periodo de muestro. (1/10•4.4Hz). Utilizando C2D y Ts = 0.02 s determinamos el sistema muestreado :
GZ=\frac{0.0276z+0.0274}{z^2-1.96z+0.9606}
Control PID a aplicar(Ver
Apunte PID)
El control PID a utilizar es el siguiente:
Como se ve ya tiene implementado el control anti-windup. El efecto windup aparece al arrancar el sistema o en cualquier otra situación, donde aparece un error muy grande durante un tiempo prolongado. Esto hará que el término integral aumente para reducir el error. Pero si nuestro actuador es limitado, con esto me refiero que la tensión que podemos aplicarle al horno solo (en este caso) esta entre 0 y 5V, se saturará pero el termino integral seguirá creciendo. Cuando el error se reduce, la parte integral también comenzará a reducirse pero desde un valor muy alto, llevando mucho tiempo hasta que logre la estabilidad, generando fluctuaciones exageradamente grandes.
Discretización:
Para la parte integral se aproxima a sumas sucesivas, y la parte derivativa por una diferencia:
Sintonización del Control PID Sintonización de PIDEn este caso utilizo el método de Ziegler-Nichols basado en la respuesta en frecuencia. Se realimenta la planta con un regulador proporcional aumentando su ganancia hasta que el sistema presente una oscilación no amortiguada, determino la ganancia proporcional y el periodo de la oscilación:
Kc=1.4392, tc=0.44s
Kp=0.6Kc=0.8635, Ti=0.5tc=0.22, Td=0.125tc=0.055
Función de transferencia del PID discreto sin windup
\frac{U(z)}{E(z)}=\frac{q0z^2+q1z+q2}{z(z-1)}
Con el control PID sin windup utilizamos la herramienta sisotool para ver el resultado obtenido, y también si es posible mejorarlo.
Por ejemplo, un resultado mejor se obtiene modificando los ceros del control PID a
0.95; 0.95 y una ganancia de
K=8.57. Con estos valores los nuevos parámetros del PID son:
Kp=0.8142, Ti=0.7609, Td=0.1899
En simulink podemos ver el efecto que tiene la saturación del actuador:
Resultado obtenido al aplicar antiwindup:
Control On/Off (todo o nada
)
Es un sistema de control muy simple, y como su nombre lo indica, la señal de control en este caso será 0 Volts si Temperatura del horno es mayor a la deseada, y 5 Volts si es menor a la deseada. Mas info,
Control Todo o nada