SINTONIZAR PID CON ARDUINO – Control de velocidad de un motor
Introducción
En esta entrada, exploraremos una implementación básica y fácil de entender del control de velocidad de un motor usando Arduino. Aunque es un ejemplo simple, sirve como un excelente punto de partida hacia implementaciones más avanzadas y profesionales. Para este proyecto, he utilizado un conocido motorreductor junto con un encoder infrarrojo, elementos comunes en la construcción de maquetas de vehículos a pequeña escala.
Componentes
Arduino UNO R3
Yo he usado un Arduino Uno R3 pero os vale cualquier placa Arduino. Si usáis otra placa fijaros bien en cuales son los pines de las interrupciones para que todo funcione correctamente.
Protoboard
Motorreductor 3-6V
Controlador motor L298N
La placa L298N es un módulo controlador de motores ampliamente utilizado en robótica y proyectos de automatización. Su función principal es controlar la velocidad y la dirección de uno o dos motores de corriente continua (DC). Requiere una fuente de alimentación externa para los motores, que puede ser de mayor voltaje que la alimentación del circuito de control.
Disco ranurado
Son fáciles de conseguir. En ocasiones vienen con el motor o con el encoder incluidos en el mismo pack.
Encoder infrarrojo
Un lado emite una luz infrarroja mientras que el otro tiene un receptor fotoeléctrico. Cuando un disco ranurado (solidario al eje del motor) gira, las ranuras permiten que el receptor se active y desactive. Esto es proporcional a la velocidad. La señal se limpia a través del Inversor Schmidt incorporado y luego se envía a Arduino para su procesamiento.
Condensador 10 uF
Usado para atenuar el rebote de la señal del encoder.
Cables dupont
Yo he necesitado Macho-Macho y Macho-Hembra.
Fuente de alimentación externa de 7-12V
Necesaria para el motor. Se pueden usar pilas en su defecto.
Con todos los componentes, el coste del montaje ronda los 50€.
Esquema de conexiones
Montaje
He diseñado un sencillo soporte donde apoyar el motor para la ocasión. Si disponéis de impresora 3D lo tenéis en la carpeta del proyecto.
Identificación
Adecuación de la señal
Aún con el uso del condensador, la señal del encoder es muy ruidosa. Por ello implementaremos un filtro EMA (Exponential Moving Average), o media móvil exponencial representado por la ecuación 1.
\begin{align} A_{n}=\alpha M+(1-\alpha )A_{n}-1 \end{align}
Siendo An el valor filtrado, alpha es un factor entre 0 y 1, M es el valor muestreado de la señal a filtrar, y An-1 el valor filtrado anterior.
El filtro EMA da más peso a las lecturas más recientes, haciendo que la salida reaccione más rápidamente a los cambios recientes en los datos mientras suaviza las variaciones aleatorias. El valor de alpha determina qué tan rápido el filtro reacciona a los cambios en los datos. Un alpha pequeño hace que el filtro reaccione más lentamente, suavizando más la señal, mientras que un alpha grande hace que el filtro reaccione más rápidamente a los cambios.
A continuación una muestra del efecto de alpha en la señal del encoder con un tiempo de muestreo de un segundo. Se aprecia que a partir de 0.4 la señal empieza a tener demasiado ruido. Un valor entre 0.2 y 0.4 parece razonable aunque debemos comprobar que el filtro elegido no afecte de manera inapropiada al tiempo de respuesta de la señal.
Recopilación de datos en lazo abierto
Una vez filtrada correctamente la señal del encoder, procedemos a identificar el sistema. El sistema responde de manera autorregulada, lo que significa que al cambiar el voltaje, cambiamos la velocidad del motor, que se estabiliza en un nuevo punto de equilibrio. Esto nos permite llevar a cabo un ensayo en lazo abierto, que implica ajustar manualmente el voltaje del motor para observar y registrar cómo varía la velocidad del motor ante estos cambios.
Control PID
Esquema de control
La imagen muestra un esquema básico de un sistema de control de velocidad para un motor de corriente continua. En el diagrama, hay dos componentes principales identificados:
Encoder (SC-1): Este dispositivo se utiliza para capturar la velocidad de rotación del eje del motor y convertirla en señales eléctricas. Cada vez que el eje gira, el encoder genera pulsos que se pueden contar para determinar la velocidad de rotación.
Motor de corriente continua: Representado en la parte inferior de la imagen. El motor es la parte del sistema que realiza el trabajo mecánico y cuya velocidad se desea controlar. La señal de control proveniente del controlador PID modula la energía suministrada al motor para mantener la velocidad deseada.
El control funciona de la siguiente manera:
El motor se pone en marcha y su velocidad de rotación es capturada por el encoder. Esta velocidad es enviada al controlador PID, que compara la velocidad real (variable de proceso o PV) con la velocidad deseada (punto de consigna o SP). Si hay una diferencia entre la velocidad real y la deseada, el controlador PID calcula una señal de control (OP) adecuada para ajustar la potencia del motor y corregir el error. Esta señal de control ajusta la velocidad del motor, ya sea aumentándola o disminuyéndola para que coincida con el. Este es un proceso continuo y dinámico donde el controlador PID constantemente ajusta la señal de control en respuesta a las variaciones en la velocidad del motor para mantener la velocidad estable. En resumen, este esquema representa un sistema de control en lazo cerrado para mantener una velocidad constante en un motor de corriente continua, utilizando para ello un controlador PID que procesa la información del encoder y ajusta la señal de potencia al motor.
Prueba de sintonías
Tras la identificación en lazo abierto, estamos en disposición de calcular una serie de sintonías que nos darán una respuesta específica de las cuales debemos elegir una en función del tipo de respuesta que queramos para nuestro sistema. Os recuerdo que estas sintonías son un punto de partida y que podemos retocarlas para ajustar la respuesta a nuestras necesidades. De la mano de la elección de las constantes viene la elección de la ecuación PID. En este caso he llegado a la conclusión de que con una ecuación PI es suficiente, de hecho, en la mayoría de maquetas sencillas que implementéis será así y en pocas ocasiones os hará falta el término derivativo.
Conclusiones
Me gustaría resaltar la importancia de utilizar un filtro para adecuar la señal del encoder. Este aspecto es fundamental ya que un buen filtrado de la señal es esencial para obtener lecturas precisas y fiables. El filtro EMA nos ha permitido suavizar la señal de salida del encoder, reduciendo el ruido y mejorando así la calidad de los datos para una interpretación más precisa. Esta mejora en la calidad de la señal ha sido crucial para realizar ajustes finos en la sintonización de los PIDs, asegurando así respuestas del sistema más estables y eficientes.
Otro punto interesante que hemos abordado es la capacidad de realizar ensayos en lazo abierto para calcular las sintonías de los PIDs. Esta práctica nos ha permitido evaluar y elegir la respuesta más adecuada según nuestras necesidades específicas. El ensayo en lazo abierto es una técnica valiosa porque nos permite ajustar y experimentar con los parámetros del controlador PID sin la influencia de la retroalimentación del sistema. Esto facilita una comprensión más clara de cómo cada componente del PID afecta al comportamiento general del sistema, permitiendo así un ajuste más informado y efectivo.
En resumen, el trabajo realizado con la maqueta ha sido enormemente esclarecedor y educativo. Nos ha brindado la oportunidad de profundizar en aspectos técnicos esenciales de la ingeniería de control, desde la construcción y diseño de sistemas básicos hasta el sofisticado ajuste de parámetros de control. La experiencia adquirida a través de este proyecto nos proporciona una base sólida para futuras investigaciones y desarrollos en este emocionante campo.
Enlaces
- Carpeta del proyecto
- Arduino IDE
- PIDLab web
- Arduino COM Plotter
- Fritzing [Oficial] [Arduino Factory]
- Librería PID de Brett Beauregard [Github]
- Funcionamiento de un encoder infrarrojo [Sensorstec]
- Filtro exponencial EMA (Exponential Moving Average) [Arduino.cl] [Luis Llamas]
- Introducción al algoritmo PID y su implementación en Arduino [garikoitz.info]
Libros y publicaciones
[1] Karl J. Astrom, Tore Hägglund. Control PID avanzado, Pearson, ISBN: 978-84-8322-511-0
[2] Daniel Chuck. Los sistemas de primer orden y los controladores PID, edición 2012. [Link] [Link2]
[3] J.G. Ziegler, N.B. Nichols. Optimum Settings For Automatic Controllers, 1942 edition, American Society of Mechanical Engineers. [Link]
[4] G.H. Cohen, G.A. Coon. Theoretical Consideration of Retarded Control, 1953 edition, American Society of Mechanical Engineers. [Link] [Link2]
[5] Daniel E. Rivera. Internal Model Control: A Comprehensive View, 1999 edition, College of Engineering and Applied Sciences. [Link]
[6] R. Vilanova, A. Visioli. PID Control in the Third Millennium. Chapter 5, The SIMC Method for smooth PID Controller Tuning, Springer. ISBN: 978-1-4471-2424-5.
[7] Morilla García, Fernando. El controlador PID. Dpto. de Informática y Automática UNED. [Link]
[8] Aidan O’Dwyer. Handbook of PI and PID controller tuning rules, 3rd edition, Imperial College Press. ISBN: 978-1-84816-242-6