Control PID de velocidad angular de motor DC con encoder

Control PID Digital de Velocidad para un Motor DC con Encoder utilizando ESP32 y Pantalla OLED
1. Introducción
El control de velocidad de motores de corriente directa (DC) es una aplicación fundamental dentro de la automatización, la robótica y los sistemas de control industrial.
En este proyecto se desarrolla un sistema de control automático de velocidad para un motor DC con encoder incremental, utilizando un microcontrolador ESP32 como unidad principal de procesamiento.
El sistema implementa un controlador PID digital en tiempo discreto, programado mediante una ecuación en diferencias, que permite regular la velocidad del motor de acuerdo con una referencia establecida por el usuario.
Para facilitar la interacción, se incorpora una pantalla OLED que permite visualizar los parámetros del controlador, la velocidad de referencia, la velocidad medida y la señal de control aplicada al motor.
El usuario podrá seleccionar la velocidad deseada y configurar las ganancias proporcional (Kp), integral (Ki) y derivativa (Kd) antes de iniciar el control automático, utilizando únicamente un potenciómetro y un pulsador.
La medición de velocidad se realiza mediante un encoder incremental acoplado al eje del motor, proporcionando la señal de retroalimentación necesaria para cerrar el lazo de control.
El objetivo es construir una plataforma experimental que permita estudiar el comportamiento de un controlador PID digital y analizar su desempeño ante diferentes condiciones de operación.
2. Objetivo general
Diseñar e implementar un sistema de control PID digital de velocidad para un motor DC con encoder incremental, utilizando un ESP32 como unidad de procesamiento y una interfaz OLED para la configuración y supervisión de las variables del sistema.
El controlador deberá mantener la velocidad del motor cercana a la referencia establecida, ajustando automáticamente la señal PWM aplicada al motor mediante una etapa electrónica de potencia.
3. Objetivos específicos
- Implementar la adquisición de velocidad mediante un encoder incremental.
- Utilizar el ESP32 para procesar las señales provenientes del encoder.
- Calcular la velocidad del motor en revoluciones por minuto (RPM).
- Implementar un controlador PID digital mediante ecuación en diferencias.
- Generar una señal PWM para regular la velocidad del motor.
- Incorporar una pantalla OLED para visualizar las variables del sistema.
- Permitir la selección de la referencia de velocidad mediante un potenciómetro.
- Incorporar un pulsador para navegar por el menú y confirmar las configuraciones.
- Permitir el ajuste individual de las ganancias Kp, Ki y Kd antes de iniciar el control.
- Evaluar la respuesta dinámica del sistema mediante diferentes pruebas experimentales.
4. Descripción general del sistema
El proyecto está compuesto por seis bloques funcionales:
- Motor DC con encoder incremental.
- Sistema de adquisición de velocidad.
- Microcontrolador ESP32.
- Controlador PID digital.
- Etapa de potencia mediante un puente H.
- Interfaz de usuario mediante pantalla OLED, potenciómetro y pulsador.
El sistema opera mediante una estructura de control en lazo cerrado.
El encoder proporciona información sobre la velocidad real del motor. El ESP32 compara esta medición con la referencia seleccionada y calcula el error de velocidad.
Posteriormente, el controlador PID determina la acción necesaria para corregir la diferencia entre ambas señales y genera una salida PWM que modifica la potencia aplicada al motor.
Este proceso se repite periódicamente, permitiendo que el sistema compense las variaciones de carga y mantenga la velocidad deseada.
5. Descripción de los componentes principales
5.1. Motor DC con encoder incremental
El motor DC constituye el elemento físico que se desea controlar.
Se utiliza un motor equipado con encoder incremental, el cual proporciona pulsos digitales proporcionales al movimiento del eje.
Dependiendo del tipo de encoder, se pueden utilizar uno o dos canales de salida (A y B).
Cuando se utilizan ambos canales, es posible determinar tanto la velocidad como el sentido de giro del motor mediante la decodificación en cuadratura.
Las señales del encoder se conectan a las entradas digitales del ESP32, utilizando interrupciones para registrar los pulsos.
La resolución del encoder y la relación de transmisión, cuando existe una caja reductora, deberán considerarse durante el cálculo de velocidad.
5.2. ESP32
El ESP32 es la unidad central de procesamiento del sistema.
Sus principales funciones son:
- Adquirir las señales del encoder.
- Calcular la velocidad instantánea del motor.
- Obtener la referencia establecida por el usuario.
- Calcular el error de velocidad.
- Ejecutar el algoritmo PID discreto.
- Generar la señal PWM.
- Administrar el menú de configuración.
- Actualizar la información de la pantalla OLED.
Una de sus principales ventajas es la disponibilidad de temporizadores, interrupciones y periféricos PWM, lo que permite desarrollar un sistema de control con un periodo de muestreo definido.
5.3. Pantalla OLED
Se utiliza una pantalla OLED de 0.96 pulgadas con resolución de 128 × 64 píxeles y comunicación I2C.
La pantalla funciona como interfaz principal del sistema y permite visualizar los parámetros de configuración y las variables durante el funcionamiento.
Se contemplan dos pantallas principales:
Pantalla de configuración:
Permite modificar los parámetros antes de iniciar el control.
Ejemplo de visualización:
CONFIGURAR PID
REF: 100 RPM
Kp: 1.00
Ki: 0.10
Kd: 0.05
INICIAR CONTROL
Pantalla de monitoreo:
Una vez iniciado el control, se muestran las variables de funcionamiento.
CONTROL PID
REF: 100 RPM
MED: 98 RPM
ERROR: 2 RPM
PWM: 45 %
CONTROL ACTIVO
5.4. Potenciómetro
Se utiliza un potenciómetro de 10 kΩ conectado a una entrada analógica del ESP32.
Su función es permitir la modificación de los valores seleccionados en el menú.
Durante la configuración inicial, el usuario podrá seleccionar la velocidad de referencia y modificar las ganancias Kp, Ki y Kd.
El valor analógico leído por el ESP32 se convierte en una variable digital que posteriormente se escala al rango correspondiente.
5.5. Pulsador
El pulsador permite interactuar con el menú de configuración.
Sus funciones principales son:
- Seleccionar la variable que se desea modificar.
- Confirmar la referencia de velocidad.
- Cambiar entre los parámetros Kp, Ki y Kd.
- Guardar las ganancias configuradas.
- Iniciar el control automático.
- Detener el sistema cuando sea necesario.
Se recomienda implementar un sistema de antirrebote por software para evitar múltiples detecciones de una sola pulsación.
5.6. Etapa de potencia
La etapa de potencia permite suministrar la corriente necesaria al motor DC.
Se recomienda utilizar un controlador de motor basado en puente H, seleccionado de acuerdo con el voltaje nominal y la corriente de arranque y operación del motor.
Entre las alternativas se encuentran:
- TB6612FNG para motores pequeños y corrientes compatibles con sus especificaciones.
- BTS7960 para motores que requieren una etapa de mayor capacidad.
- Otros controladores de puente H dimensionados de acuerdo con la carga.
El ESP32 genera una señal PWM que controla la potencia aplicada al motor mediante el driver.
La etapa de potencia debe contar con las protecciones eléctricas correspondientes y compartir una referencia de tierra adecuada con el sistema de control.
6. Fundamentos del control PID digital
La parte central del proyecto es la implementación de un controlador PID en tiempo discreto.
Un controlador PID convencional está compuesto por tres acciones de control:
- Proporcional.
- Integral.
- Derivativa.
En una implementación digital, estas acciones deben expresarse mediante ecuaciones discretas que puedan ejecutarse periódicamente en el microcontrolador.
El ESP32 no trabaja directamente con señales continuas, sino que procesa muestras de las variables adquiridas en intervalos de tiempo definidos.
Por esta razón, el controlador se implementará mediante una ecuación en diferencias.
6.1. Cálculo del error
La primera operación consiste en calcular la diferencia entre la velocidad deseada y la velocidad medida.
e(k) = r(k) – y(k)
Donde:
- e(k): error actual.
- r(k): referencia de velocidad.
- y(k): velocidad medida.
- k: índice de la muestra actual.
Si la referencia es de 100 RPM y la velocidad medida es de 80 RPM, el error será de 20 RPM.
El controlador deberá actuar para incrementar la velocidad hasta aproximarse a la referencia.
6.2. Acción proporcional
La acción proporcional responde directamente al error actual.
Su expresión es:
P(k) = Kp · e(k)
Donde Kp representa la ganancia proporcional.
Al incrementar Kp, el controlador responde con mayor intensidad ante las desviaciones de velocidad.
Sin embargo, una ganancia proporcional demasiado elevada puede producir oscilaciones e inestabilidad.
6.3. Acción integral
La acción integral permite acumular el error a lo largo del tiempo.
En su forma discreta puede representarse mediante:
I(k) = I(k-1) + Ki · Ts · e(k)
Donde:
- I(k): acción integral actual.
- I(k-1): acción integral anterior.
- Ki: ganancia integral.
- Ts: periodo de muestreo.
- e(k): error actual.
Esta acción permite compensar las perturbaciones y reducir el error en estado estacionario.
Es especialmente importante cuando el motor presenta variaciones de carga o requiere un esfuerzo adicional para mantener determinada velocidad.
6.4. Acción derivativa
La acción derivativa considera la variación del error entre muestras consecutivas.
Su expresión discreta es:
D(k) = (Kd / Ts) · [e(k) – e(k-1)]
Donde:
- D(k): acción derivativa.
- Kd: ganancia derivativa.
- Ts: periodo de muestreo.
- e(k): error actual.
- e(k-1): error anterior.
Esta acción permite anticipar cambios en el error y puede contribuir a reducir el sobreimpulso y las oscilaciones.
Debido a que la medición del encoder puede presentar ruido y cuantización, se recomienda incorporar un filtro digital en la acción derivativa.
6.5. Ecuación general del PID discreto
La salida del controlador se obtiene sumando las tres acciones:
u(k) = P(k) + I(k) + D(k)
Sustituyendo las expresiones anteriores:
u(k) = Kp·e(k) + I(k) + (Kd/Ts)·[e(k)-e(k-1)]
Con:
I(k) = I(k-1) + Ki·Ts·e(k)
Esta es una formulación PID discreta de posición.
6.6. Implementación mediante ecuación en diferencias incremental
Para este proyecto también se puede utilizar la formulación incremental del controlador PID, que calcula directamente el cambio requerido en la señal de control.
La ecuación es:
u(k) = u(k-1) + Δu(k)
Donde:
Δu(k) = Kp·[e(k)-e(k-1)] + Ki·Ts·e(k) + (Kd/Ts)·[e(k)-2e(k-1)+e(k-2)]
Donde:
- u(k): salida actual del controlador.
- u(k-1): salida anterior.
- Δu(k): incremento de la salida.
- Kp: ganancia proporcional.
- Ki: ganancia integral.
- Kd: ganancia derivativa.
- Ts: periodo de muestreo.
- e(k): error actual.
- e(k-1): error anterior.
- e(k-2): error de dos muestras anteriores.
Esta formulación resulta especialmente interesante para el desarrollo del proyecto porque permite calcular la variación necesaria de la señal PWM a partir de los errores actuales y anteriores.
La salida deberá limitarse al intervalo de operación permitido por el actuador.
Para evitar la acumulación excesiva de la acción integral cuando la salida alcanza sus límites, se deberán implementar estrategias anti-windup.
6.7. Periodo de muestreo
El periodo de muestreo es uno de los parámetros más importantes del controlador digital.
Representa el intervalo de tiempo entre dos ejecuciones consecutivas del algoritmo PID.
Para este proyecto se propone inicialmente un periodo de muestreo de 10 ms, equivalente a una frecuencia de ejecución de 100 Hz.
Este valor deberá validarse experimentalmente de acuerdo con la dinámica del motor, la resolución del encoder y la velocidad de respuesta requerida.
La adquisición de pulsos del encoder debe mantenerse mediante interrupciones independientes del ciclo de cálculo PID.
El periodo de muestreo deberá mantenerse constante para garantizar que los cálculos integral y derivativo sean correctos.
7. Medición de velocidad mediante encoder
La velocidad del motor se obtiene a partir del número de pulsos registrados durante un intervalo de muestreo.
La ecuación general para calcular las revoluciones por minuto es:
RPM = (N / PPR) · (60 / Ts)
Donde:
- N: cantidad de pulsos registrados durante el periodo.
- PPR: cantidad efectiva de pulsos por revolución.
- Ts: tiempo de muestreo en segundos.
Es importante definir correctamente la resolución efectiva del encoder.
Si se utiliza decodificación en cuadratura x4, el número de cuentas por revolución deberá considerar los cuatro flancos de ambos canales.
Cuando el encoder está instalado en el eje del motor y existe una caja reductora, se deberá incorporar la relación de transmisión para obtener la velocidad del eje de salida.
El cálculo deberá considerar estas características para evitar errores en la medición de RPM.
8. Estrategia de operación del sistema
El sistema contará con dos modos principales de funcionamiento.
8.1. Modo de configuración
Al encender el equipo, el ESP32 inicializa los periféricos y muestra el menú de configuración en la pantalla OLED.
En este modo el motor permanece detenido.
El usuario podrá realizar las siguientes operaciones:
Paso 1. Seleccionar la referencia
Mediante el potenciómetro se establece la velocidad deseada del motor, expresada en RPM.
Paso 2. Ajustar la ganancia proporcional
El usuario selecciona Kp y modifica su valor mediante el potenciómetro.
Paso 3. Ajustar la ganancia integral
Se selecciona Ki y se establece el valor deseado.
Paso 4. Ajustar la ganancia derivativa
Se selecciona Kd y se modifica su valor.
Paso 5. Confirmar la configuración
El pulsador permite guardar los parámetros y confirmar que el sistema está listo para iniciar.
Paso 6. Iniciar el control
Una vez configurados los valores, el usuario selecciona la opción de inicio y el ESP32 activa el controlador PID.
Las ganancias podrán almacenarse en memoria no volátil para conservar la configuración después de apagar el equipo.
8.2. Modo de control automático
Al iniciar el control, el sistema cambia a la pantalla de monitoreo.
El encoder comienza a proporcionar la información de velocidad y el ESP32 ejecuta periódicamente el algoritmo PID.
La salida calculada se convierte en una señal PWM que controla el puente H.
Si la velocidad medida es inferior a la referencia, el controlador incrementará la acción de control.
Si la velocidad supera la referencia, reducirá la señal aplicada al motor.
Este proceso continuará mientras el control permanezca activo.
Se recomienda incorporar una función de parada que deshabilite inmediatamente la etapa de potencia.
9. Diagrama de bloques del sistema
La arquitectura de control se basa en un sistema de retroalimentación negativa.
La secuencia funcional es:
Referencia de velocidad → Comparación → Error → Controlador PID digital → PWM → Driver de potencia → Motor DC.
El encoder incremental mide la velocidad real del motor y envía la información nuevamente al ESP32.
Esta señal de retroalimentación permite comparar continuamente la velocidad real con la referencia establecida.
El sistema también incorpora una interfaz de usuario independiente para modificar los parámetros de operación antes de iniciar el control.
10. Lista de materiales
| Cantidad | Componente | Especificación |
|---|---|---|
| 1 | ESP32 DevKit V1 | 30 pines |
| 1 | Motor DC con encoder | Encoder incremental |
| 1 | Driver de motor | TB6612FNG, BTS7960 u otro adecuado |
| 1 | Pantalla OLED | 0.96 pulgadas, 128 × 64, I2C |
| 1 | Potenciómetro | 10 kΩ lineal |
| 1 | Pulsador | Normalmente abierto |
| 1 | Fuente de alimentación | Según voltaje y corriente del motor |
| 1 | Convertidor DC-DC | Si se requiere alimentación regulada |
| 1 | PCB o protoboard | Montaje electrónico |
| 1 | Juego de conectores | Borneras y terminales |
| 1 | Caja de montaje | Protección del circuito |
| 1 | Interruptor | Encendido general |
La selección del driver y la fuente deberá realizarse considerando la corriente nominal, la corriente de arranque o bloqueo del motor y las características eléctricas del encoder.
11. Sintonización de las ganancias PID
Una parte fundamental del proyecto es determinar las ganancias apropiadas del controlador.
Los valores Kp, Ki y Kd tienen una influencia directa en el comportamiento dinámico del motor.
Se propone realizar una sintonización experimental mediante los siguientes pasos:
Etapa 1. Ajuste proporcional
Se comienza con Ki y Kd en cero.
Se incrementa gradualmente Kp hasta obtener una respuesta adecuada sin provocar oscilaciones excesivas.
Etapa 2. Incorporación integral
Se introduce Ki progresivamente para reducir el error en estado estacionario.
Se observa la capacidad del motor para mantener la velocidad ante variaciones de carga.
Etapa 3. Incorporación derivativa
Se incorpora Kd para mejorar el comportamiento transitorio y reducir las oscilaciones.
Etapa 4. Evaluación final
Se realizan pruebas con diferentes referencias de velocidad y condiciones de carga para determinar el comportamiento del sistema.
Las ganancias deberán ajustarse considerando el periodo de muestreo y las unidades utilizadas en el cálculo del PID.
12. Pruebas experimentales
Para evaluar el desempeño del controlador se proponen las siguientes pruebas:
Prueba 1. Respuesta ante cambios de referencia
Se establece una velocidad inicial y posteriormente se modifica la referencia.
Se registra el comportamiento de la velocidad real y el tiempo necesario para alcanzar el nuevo valor.
Prueba 2. Evaluación del sobreimpulso
Se analiza si la velocidad del motor supera la referencia durante el transitorio.
Se determina el porcentaje de sobreimpulso y su influencia en la estabilidad.
Prueba 3. Tiempo de establecimiento
Se determina el tiempo necesario para que la velocidad permanezca dentro de una banda de tolerancia alrededor de la referencia.
Prueba 4. Error en estado estacionario
Se compara la referencia con la velocidad medida después de que el sistema alcanza condiciones estables.
Prueba 5. Respuesta ante perturbaciones
Se aplica una variación de carga al motor para observar la capacidad del controlador de recuperar la velocidad deseada.
Prueba 6. Comparación de ganancias
Se modifican Kp, Ki y Kd para analizar su influencia sobre la respuesta dinámica.
Prueba 7. Comparación de formulaciones PID
Se puede comparar el desempeño del controlador en forma posicional e incremental para evaluar las diferencias en el cálculo de la salida y su comportamiento ante saturación.
13. Variables de interés para el análisis
Durante las pruebas se recomienda registrar las siguientes variables:
| Variable | Símbolo | Unidad |
|---|---|---|
| Referencia | r(k) | RPM |
| Velocidad medida | y(k) | RPM |
| Error | e(k) | RPM |
| Ganancia proporcional | Kp | Según convención |
| Ganancia integral | Ki | Según convención |
| Ganancia derivativa | Kd | Según convención |
| Periodo de muestreo | Ts | segundos |
| Salida PID | u(k) | % |
| Ciclo de trabajo PWM | PWM | % |
Los datos obtenidos permitirán generar gráficas de referencia, velocidad real, error y señal de control.
Estas gráficas serán útiles para estudiar el comportamiento del controlador y evaluar sus parámetros de desempeño.
14. Aplicaciones del proyecto
El sistema desarrollado puede utilizarse en diferentes aplicaciones didácticas y experimentales:
- Control de velocidad de motores DC.
- Laboratorios de control automático.
- Prácticas de instrumentación electrónica.
- Sistemas de seguimiento de velocidad.
- Proyectos de robótica móvil.
- Automatización de mecanismos.
- Sistemas de transporte mediante bandas.
- Estudio de controladores PID digitales.
- Implementación de algoritmos de control en microcontroladores.
15. Ventajas del sistema
- Implementación de un controlador PID digital real.
- Utilización de ecuaciones en diferencias.
- Medición de velocidad mediante encoder incremental.
- Configuración de referencia sin necesidad de computadora.
- Ajuste independiente de las ganancias PID.
- Visualización de variables en tiempo real.
- Generación de PWM mediante ESP32.
- Arquitectura modular que permite ampliar el proyecto.
- Plataforma adecuada para experimentación y aprendizaje de control automático.
