PID digital

Introducción

Muchos controladores actuales utilizan microcontroladores digitales. En esta página se presentará la programación de un regulador PID implementado con un microcontrolador. Los reguladores digitales sustituyen varios elementos en un sistema de control tradicional por cálculos en un sistema programado. En la figura siguiente puede verse un esquema de un regulador controlado por un microcontrolador:



Las funciones del microcontrolador están encerradas en un cuadrado con lineas de puntos. Los bloques que sirven de conexión entre el microcontrolador y el sistema son un DAC (conversor digital a analógico) y un ADC (conversor de analógico a digital). Estos dos bloques permiten traducir las señales analógicas del sistema controlado a números digitales utilizados por el microcontrolador y viceversa.
En ocasiones los conversores ADC y DAC se pueden implementar con un regulador PWM.

Período de muestreo

Mientras que los sistemas analógicos son continuos, los sistemas digitales son discontinuos. Esto significa que sus valores se evaluan o cambian cada cierto período de tiempo llamado tiempo de muestreo. El período de muestreo define cuantas veces por segundo se van a realizar las conversiones analógico-digitales y se van a calcular los parámetros del PID. En adelante el período de muestreo se representara por la letra T.

La respuesta en lazo cerrado de un sistema controlado por un PID digital va a depender de este período de muestreo. Si este tiempo es demasiado alto, la estabilidad del sistema será menor y el sistema puede llegar a hacerse inestable y no ser controlable. Un método para estimar el período de muestreo consiste en calcular el período de oscilación del sistema en lazo cerrado con una ganancia que provoque oscilaciones. Se tomará el período de muestreo como la décima parte del tiempo o período de oscilación.

En el ejemplo que aparece a continuación se ha aumentado la ganancia proporcional hasta que se mantengan las oscilaciones en la respuesta al escalón. El período de oscilación es entonces de 5.6 segundos y por lo tanto el período de muestreo debe ser menor de 0.56 segundos.



Tc = 26.8 - 21.2 = 5.6 segundos

T < Tc / 10 = 0.56 segundos   (Período de muestreo)


Si el sistema es sobreamortiguado y no presenta oscilaciones, el criterio para escoger el tiempo de muestreo partirá de la respuesta al escalón. Como regla general se acepta que T debe ser 10 veces menor que el tiempo de subida del sistema ante un escalón en lazo abierto. Este tiempo de subida se puede calcular como el tiempo que tarda el sistema en subir desde un 10% hasta un 90% del valor final.

Por ejemplo un sistema térmico que exiba la respuesta al escalón que se muestra a continuación:


Este sistema tarda en subir desde el 10% hasta el 90% del valor final 21.5 - 3.5 = 18 segundos.
Por lo tanto, para este sistema de ejemplo el tiempo de muestreo del controlador PID debe ser como máximo una decima parte de los 18 segundos:

T < Tiempo_de_respuesta / 10

T < 18/10    ->   T < 1.8 segundos

En los dos casos se ha utilizado la misma planta para calcular el tiempo de muestreo. Como puede verse los resultados son muy diferentes. Con el segundo método el tiempo de muestreo es tres veces mayor que con el primero. Por lo tanto el tiempo de muestreo depende también de la respuesta que se vaya a conseguir y del tipo de sistema. Siempre que se pueda utilizar el primer método, será preferible puesto que calcula tiempos menores y por lo tanto más seguros.

Período de muestreo y término derivativo

Si bien antes se ha explicado que reducir el tiempo de muestreo es deseable porque aumenta la estabilidad del sistema, reducir excesivamente el tiempo de muestreo presenta también problemas. El problema de reducir mucho el tiempo de muestreo, además de multiplicar los cálculos necesarios en el microcontrolador, es que con tiempos muy pequeños es más difícil calcular el término derivativo porque el ruido de alta frecuencia afecta más al sistema y porque la variación de la entrada entre dos muestreos es tan pequeña que le afecta el error de cuantificación del conversor analógico-digital. Por lo tanto lo ideal es establecer un tiempo de muestreo que consiga una respuesta aceptable en el sitema sin que sobrecargue mucho los cálculos y que no afecte al término derivativo.

Ejemplo: cómo afecta el error de cuantificación con tiempos de muestreo muy pequeños
Un sistema térmico cuyo sensor cambia con una velocidad de 0.1 voltio/segundo es convertido por un conversor analógico digital de 10bits (1023 muestras) que tiene una referencia de tensión de 5 voltios.
La variación del conversor analógico-digital será de 0.1v/s / 5v * 1023 puntos = 20 puntos/segundo.

Si el período de muestreo es de un segundo, la variación de la medida será suficientemente grande como para evaluar el término derivativo.
La lectura del sensor será en muestreos consecutivos: 100, 120, 140, 160, etc.

Pero si se toma un período de muestreo de 10 milisegundos, sólo una de cada 5 muestras va a presentar una variación de un punto en la señal de entrada del sensor.
Ahora la lectura del sensor será en muestreos consecutivos: 100, 100, 100, 100, 100, 101, 101, etc.
Por otra parte la ganancia derivativa será 100 veces mayor, al estar dividida por un tiempo de muestreo 100 veces más pequeño. El resultado es que la acción derivativa actuará a impulsos muy bruscos cada 5 ciclos. Este comportamiento no es deseable y se corrige simplemente aumentando el tiempo de muestreo.


Implementación del PID digital

Cada uno de los bloques que aparecen dentro del PID digital se traducen a una ecuación. Las ecuaciones para calcular el comparador y el controlador PID son las siguientes:

Referencia = 150

Sensor = read_ADC()

Error = Sensor - Referencia

Proporcional = Error * Kp

Integral = Integral + Error * Ki * T

Derivativo = (Error - Error_0) * Kd / T

Error_0 = Error

Control = Proporcional + Integral + Derivativo

write_DAC(Control)


Estas ecuaciones e intrucciones de entrada (read_ADC) y salida (write_DAC) se deben repetir con un período de T segundos (el tiempo de muestreo).
El valor de la referencia se ha escogido en 150, pero puede cambiarse a voluntad. Es el valor que se quiere conseguir en el sistema.

Unidades utilizadas por las funciones de entrada y salida

Las funciones de entrada y salida deben tener una conversión adecuada de unidades. La función read_ADC() debe devolver un valor con las mismas unidades que utilice la referencia. Es conveniente que la función write_DAC() acepte valores de control entre 0 y 5 voltios para que se correspondan con el valor real de salida del conversor DAC que tendrá una tensión entre 0 y 5 voltios.
Los valores de control no están acotados y por lo tanto pueden llegar a valer más que el valor máximo de salida de 5 voltios o menos que el valor mínimo de salida de 0 voltios. En este caso la función write_DAC() debe recortar los valores máximos a 5v y los valores mínimos a 0v.


Control anti-windup integral

El control integral es un sumatorio que puede llegar a acumular valores muy altos. Esto ocurre generalmente cuando el error es muy elevado y se mantiene durante mucho tiempo. En este caso el sistema está saturado y el control integral no puede hacer su función. En estos casos es recomendable desabilitar el control integral para que no se produzca un sobrepulso excesivo. Existen varias formas de implementar este control anti-windup. Aquí se se implementará desabilitando el control integral mientras el error sea superior a una cota determinada. Con este control implementado las ecuaciones se modifican de la siguiente manera:

if (abs(Error) < MaxIntegralError)
    Integral = Integral + Error * Ki * T
else
    Integral = 0

En las imágenes siguientes se puede observar una simulación de un control PID de temperatura de un horno con control anti-windup. El error máximo para que actue el control integral se ha establecido en 100, 30 y 10 grados:



Como se puede observar, en este primer caso se ha establecido el error en 100 y el sobrepulso llega a ser de 45ºC con un tiempo de establecimiento total de 26 segundos. Estos son valores muy altos.



En el segundo caso el control anti-windup se ha establecido con un error de 30 y el sobrepulso apenas llega a ser de 5 grados, con un tiempo de establecimiento de 14 segundos. Este valor de anti-windup consigue los mejores resultados del sistema.


En el tercer caso el control anti-windup se ha establecido con un error de 10 que es claramente insuficiente. En este caso no hay sobrepulso porque la acción integral entra demasiado tarde a corregir el error permanente. El problema que puede presentar este valor tan bajo es que el error se mantenga por encima del límite anti-windup y no llegue a corregirse en ningún momento o que la reducción del error se realice demasiado despacio.

 

Ruido en la realimentación

Hay varias fuentes de ruido que perturban la señal de realimentación h(t). A continuación se presentan las más importantes.

Ruido en el sensor y muestreo

La primera fuente de ruido es el propio sensor que puede dar una salida con ruido añadido de diversas frecuencias. Este ruido es difícil de filtrar, de forma que siempre que sea posible conviene reducirle al mínimo.

El ruido del sensor entra en el sistema digital a través del conversor analógico-digital. Según el teorema de Nyquist, la máxima frecuencia que puede medir un sistema de muestreo digital es igual a la mitad de la frecuencia de muestreo. Esto impone un límite máximo a las frecuencias que se van a poder muestrear con fidelidad.

Entonces ¿qué pasa con las frecuencias mayores a este límite? Esas frecuencias se traducen en frecuencias más bajas. Esto significa que el ruido de alta frecuencia se verá dentro del microcontrolador como una señal de menor frecuencia. Este efecto puede apreciarse bien en la siguiente imagen:



La señal (en rojo) es muestreada (en negro) con una frecuencia menor de 2 veces la frecuencia de la señal. Esto produce en la señal muestreada un corrimiento de la frecuencia y como resultado el sistema digital verá una frecuencia menor. Para evitar este efecto es conveniente limitar el ruido de alta frecuencia en la señal analógica por medio de un diseño cuidadoso, eligiendo un sensor adecuado y utilizando un filtro analógico cuando sea necesario. Los filtros digitales sólo podrán actuar de forma efectiva sobre las frecuencias que estén por debajo de la mitad de la frecuencia de muestreo.

Ruido de cuantificación

Este ruido está producido por el conversor analógico-digital y procede de redondear el valor analógico real al valor digital más próximo dado que el valor digital tiene un numero finito de valores. Este error se puede calcular a partir del número de bits del conversor analógico-digital y su rango de medida.

Ruido de cuantificación = rango_tensión / 2^(bits_adc+1)

En la siguiente imagen puede verse la representación del ruido de cuantificación:


En el caso de un microcontrolador típico con 10 bits de resolución y un rango de medida de 0 a 5 voltios, el ruido o error de cuantificación es de 5 / 2048 = +-2.44 milivoltios.

Este valor puede también convertirse a unidades de medida de salida de la planta a partir de la sensibilidad del sensor. Por ejemplo para un sensor de temperatura que entregue una salida con sensibilidad de 10mV/ºC

Ruido de cuantificación = rango_tensión / (2^(bits_adc+1) * sensibilidad)

Ruido de cuantificación = 5V / (2048 * 0.010V/ºC) = +-0.244 ºC

El ruido de cuantificación afecta negativamente a la respuesta del regulador, produciendo saltos en la señal de control que empeoran el comportamiento de la planta cuando el error es pequeño.


Referencias

Ogata, Katsuhiko. Sistemas de control en tiempo discreto. Segunda edición. Editorial Prentice Hall.

Diseño de reguladores digitales por respuesta en frecuencia


Comments