Continuamos con esta mini serie de entradas dedicadas a sistemas de control en Arduino. Llega el momento más temido por muchos, hacer el ajuste o tuning del PID.
En entradas anteriores hemos visto qué es un controlador, el control con histéresis, y hemos presentado el poderoso controlador PID. Destacamos que, sin ser el controlador perfecto, el PID es popular por ser relativamente sencillo y conseguir buenos comportamientos en un gran número de plantas, sin conocer su naturaleza.
También dijimos que la respuesta de un PID depende de los parámetros K, Ki y Kd del controlador. Y que estos dependen de la planta que estemos controlando, es decir, no hay “valores mágicos” que hagan que funcione siempre bien.
En función del valor que pongamos a los parámetros, obtendremos una buena respuesta, o una respuesta lenta, u oscilante, o incluso … recordad, muerte, destrucción, despido.
Para hacerlo más complicado, el efecto de los factores en la respuesta no es independiente. Su aportación se mezcla y entremezcla. Por lo que no podemos ajustar los parámetros de “uno a uno”.
La bondad y el éxito de nuestro controlador depende totalmente del ajuste. Para ello, es importante que conozcamos las características y efectos de cada factor en la respuesta del sistema.
Resumen de los efectos del PID
Resumiendo lo que vimos en la entrada anterior, a modo de chuleta:
Componente proporcional
- Poco K, respuesta lenta
- Mucho K, sobrepasamiento, oscilación, e incluso inestabilidad
- No consigue eliminar el error en estacionario
Integral
- Elimina el error estacionario
- Demasiado Ki, oscilación e inestabilidad
Derivado
- Mejora el comportamiento general
- Demasiado Kd, comportamiento “raro” en la salida
- Muy sensible al ruido
- Muy sensible a cambios bruscos en el error (perturbaciones o cambio de consigna)
Por otro lado, ante una entrada oscilante obtendremos una respuesta oscilante. Es importante saber
- El efecto causado por K, tiene la misma frecuencia
- El efecto causado por Ki, tiene diferente frecuencia
Ajustando el PID
Existen muchas formas de ajustar un PID, algunas más o menos teóricas. Vamos a hacer un pequeño repaso.
Caracterización planta
Consiste en determinar la función de transferencia de la planta. Prácticas habituales son aplicar una entrada escalón o frecuencial, y analizar las características de la salida.
Después podemos operar matemáticamente para realizar un cálculo exacto del controlador para la respuesta requerida
Aplicación de reglas de sintonización
De forma similar, consiste en aplicar una determinada entrada al sistema, y medir la salida. A continuación, se aplican una de las muchas reglas de sintonización (ejemplo famoso, reglas Ziegler-Nichols) para obtener los parámetros del PID.
Auto tuning
En similar al anterior, pero realizado de forma automática por el controlador. Los reguladores PID han avanzado mucho y, en la actualizad, muchos tienen estupendos algoritmos de auto ajuste.
Precisamente, esta capacidad de auto ajuste es uno de los motivos del éxito comercial de los controladores PID.
Ajuste manual
Finalmente, tenemos el ajuste “a mano”. Que, aunque suene fatal, es una opción muy válida y muy popular. En muchas ocasiones, un operador humano puede conseguir un ajuste tan bueno (o incluso superior) a un Auto tuning genérico.
Y es en el que nos vamos a centrar en esta entrada, porque es mucho menos teórico y más apropiado para los proyectos #maker (robots, control de luz, etc) que son los que se hacen frecuentemente con Arduino.
Ajuste manual del PID
Para ajustar el PID manualmente deberemos poder actuar sobre la entrada del sistema, sobre los parámetros del PID, y visualizar la respuesta. Y aquí, “visualizar” no significa necesariamente poner un osciloscopio. En el caso de un motor, por ejemplo, podemos “ver” la respuesta del sistema simplemente mirando cómo gira (o como suena).
Si buscáis tutoriales en internet, veréis principalmente dos “escuelas”.
Ajuste proporcional/integral/derivativo
- Ajustar K hasta que el sistema sobre pase o empiece a sobre oscilar
- Ajustar Ki hasta eliminar error estacionario
- Aumentar Kd hasta que empiezan a pasar cosas raras
Ajuste propocional/derivativo/integral
- Ajustar K hasta que el sistema sobre pase o empiece a sobre oscilar
- Aumentar Kd hasta que empiezan a pasar cosas raras
- Ajustar Ki hasta eliminar error estacionario
Con los dos vais a conseguir resultados similares, en último término. Personalmente aconsejo el primero y no entiendo por qué se empeñan en explicar el segundo.
El motivo es que el termino derivado es muy sensible al ruido de la medición y, por tanto, es el difícil de ajustar en un caso real. Pero, podéis probar por vosotros mismos.
Y para que practiquéis el ajuste manual de los parámetros aquí tenéis un simulador de PID, con una planta genérica que tiene un poco de todo (es un segundo orden con un pelín de retraso puro).
Mueve los Slider de Kp, Ki y Kd para ver los cambios en la respuesta del controlador.
K
Ki
Kd
Podéis jugar con los distintos métodos para ajustar el PID hasta conseguir una respuesta adecuada. (pista, en torno a K = 2.5, Ki = 0.02, Kd = 12 tiene buena pinta)
Por supuesto, los parámetros dependen de la respuesta que queráis. ¿Admitimos sobrepasar un poco la consigna a cambio de más velocidad? ¿Preferimos más lento, pero menos esfuerzo en el motor? Depende de vuestros criterios de diseño.
Y hemos terminado el tema del ajuste del PID. En la próxima entrada veremos cómo implementar un control PID en Arduino.