
¿Tu robot avanza recto con las ruedas levantadas, pero se desvía cuando toca el suelo? Una señal PWM fija puede hacer girar un motor, aunque su velocidad cambia con la carga, la fricción y la tensión de alimentación. Para corregir esas variaciones necesitamos medir lo que ocurre y ajustar la orden de movimiento.
En esta guía veremos cómo se relacionan un motor DC con encoder, un ESP32 y un controlador PID. Aprenderás a calcular RPM, entender las acciones proporcional, integral y derivativa, y organizar las primeras pruebas. Los números del ejemplo son didácticos: no representan mediciones de un prototipo.
1. ¿Qué aporta un encoder al control del motor?
El encoder convierte el movimiento del eje en señales que podemos contar. Un encoder incremental de dos canales, A y B, también permite identificar el sentido de giro mediante su desfase. Así podemos comparar la velocidad real con la velocidad que queremos alcanzar.
Un encoder de perilla para navegar menús sirve para aprender a leer señales, pero no sustituye automáticamente al encoder integrado en un motor. Su construcción, resolución y velocidad de trabajo son diferentes. Si estás empezando, revisa Diferencia entre Encoder y Potenciómetro.
El ciclo básico del sistema es: velocidad deseada → controlador → driver → motor → encoder → velocidad medida. La lectura vuelve al controlador y permite corregir el siguiente movimiento.
2. Materiales y conexiones que debes comprobar
- Una placa de desarrollo ESP32, identificando su modelo y los GPIO disponibles.
- Un motor DC con encoder y documentación de tensión, corriente y resolución.
- Un driver compatible con la corriente de trabajo y los picos previstos del motor.
- Una fuente o batería adecuada y regulación para la electrónica cuando sea necesaria.
- Cables, soporte para el motor y un multímetro para revisar la alimentación.
La señal del ESP32 gobierna el driver; la energía del motor llega por la etapa de potencia. No alimentes el motor desde un GPIO. Comprueba los niveles eléctricos de las salidas del encoder antes de conectarlas al ESP32 y utiliza adaptación de nivel si hace falta. No todas las salidas de encoder son eléctricamente iguales.
En un montaje con driver no aislado, las señales suelen necesitar una referencia de tierra común. Mantén firmes las conexiones de potencia y revisa el pin de habilitación y la tabla de funcionamiento del driver. Esta guía no asigna pines universales: dependen de la placa y los componentes elegidos.
3. Convierte las cuentas del encoder en RPM
Antes de ajustar el PID, verifica la medición. Necesitas conocer cuántas cuentas por vuelta produce tu método de lectura en el eje que te interesa.
Los datos PPR y CPR no siempre se utilizan de la misma manera entre fabricantes. Contar un flanco, dos flancos o los cuatro cambios de una señal en cuadratura produce distintos valores. Si el encoder está en el eje del motor, antes de la reductora, incluye la relación de transmisión para calcular las cuentas por vuelta de la salida.
RPM = (cuentas registradas / cuentas por vuelta) × (60 / intervalo en segundos)
Ejemplo: supongamos que el sistema registra 600 cuentas por vuelta del eje de salida. Si cuenta 120 durante 0.1 segundos:
RPM = (120 / 600) × (60 / 0.1) = 120 RPM
Si deseas 150 RPM, el error de velocidad en ese instante es de 30 RPM. Ese error es la entrada del controlador.
Un intervalo corto ofrece actualizaciones frecuentes, pero a baja velocidad puede registrar muy pocas cuentas y generar una medición escalonada. Un intervalo largo suaviza la lectura, aunque retrasa la respuesta. Elige el intervalo según la resolución y la dinámica del motor; mide el tiempo real transcurrido.
4. ¿Qué hacen las letras P, I y D?
| Acción | Función | Qué observar |
|---|---|---|
| Proporcional (P) | Corrige según el error actual. | Una ganancia excesiva puede provocar oscilaciones. |
| Integral (I) | Acumula el error para reducir una diferencia persistente. | La acumulación durante saturación puede causar sobreimpulso. |
| Derivativa (D) | Responde a la rapidez del cambio. | Puede amplificar ruido y necesita tratamiento adecuado. |
En una implementación discreta básica:
error = RPM_objetivo − RPM_medida
integral = integral + error × dt
derivada = (error − error_anterior) / dt
salida = Kp × error + Ki × integral + Kd × derivada
Las ganancias dependen de las unidades, el intervalo de actualización y la escala de salida. No copies valores de otro montaje esperando el mismo resultado. Para muchos controles de velocidad, un PI bien ajustado puede ser suficiente; evalúa la acción derivativa solo si aporta una mejora. Derivar la medición, en lugar del error, puede evitar el salto derivativo producido por un cambio brusco de consigna.
5. Organiza el programa antes de conectar todo
El ESP32 debe contar señales sin perder eventos, estimar la velocidad y actualizar la orden a intervalos definidos. Puedes utilizar interrupciones breves o, cuando tu variante lo admita, el periférico PCNT. La documentación de Espressif sobre PCNT explica el conteo de pulsos y la decodificación en cuadratura para el ESP32.
La siguiente secuencia es pseudocódigo, no un programa listo para cargar:
Cuando corresponde actualizar el control:
medir dt y leer el incremento del contador de forma consistente
calcular RPM con las cuentas por vuelta verificadas
calcular el error respecto a la consigna
actualizar el controlador con límites y anti-windup
limitar la orden al rango permitido por el driver
aplicar PWM y dirección según la configuración del montaje
guardar tiempo y valores para la siguiente actualización
El anti-windup evita que la integral siga creciendo cuando el actuador ya está en su límite y el error intenta llevarlo más allá. También define qué ocurre al detener el sistema o perder la señal del encoder: una lectura de cero no siempre significa que debas aumentar la potencia.
6. Ajusta el control paso a paso
- Verifica el sentido. A baja potencia, comprueba que el giro y el signo del encoder sean coherentes. Un signo incorrecto puede convertir la corrección en una aceleración indeseada.
- Prueba sin PID. Registra la velocidad con varias órdenes PWM para conocer la respuesta básica y la zona en la que el motor comienza a moverse.
- Empieza con P. Deja Ki y Kd en cero, utiliza una consigna moderada y aumenta Kp gradualmente. Reduce la ganancia si aparecen oscilaciones.
- Agrega I si hace falta. Introduce una acción integral pequeña cuando persista un error estable, manteniendo sus límites.
- Evalúa distintos puntos. Prueba varias consignas y cargas dentro de las especificaciones. Registra corriente y temperatura cuando corresponda.
En una primera prueba con ruedas, levántalas y asegura el soporte. Cuando la respuesta sea predecible, evalúa el robot a baja velocidad sobre el suelo.
7. Cómo saber si el ajuste mejoró
Registra tiempo, consigna, RPM medida y orden PWM. Observa el tiempo de establecimiento, el sobreimpulso, el error persistente y las oscilaciones. Repite las pruebas en condiciones comparables y cambia un parámetro por vez. Puedes apoyarte en Proyectos con Arduino y Python para explorar el registro y la visualización de datos.
- RPM demasiado altas o bajas: revisa cuentas por vuelta, reducción y unidades del intervalo.
- Lecturas que saltan: revisa resolución, ruido, conexiones y posibles eventos perdidos.
- Oscilaciones: revisa ganancias, retardos, saturación y frecuencia de actualización.
- Reinicios al arrancar: comprueba alimentación y distribución de potencia antes de culpar al PID.
- PWM máxima sin alcanzar la consigna: revisa carga, límites del conjunto y viabilidad de la velocidad objetivo.
Publicaciones relacionadas de IA ROBOTXYZ
- Diferencia entre Encoder y Potenciómetro: distingue dos componentes que pueden parecer similares.
- Encoder con Arduino NANO y LED NeoPixel: practica la lectura de un encoder de interfaz antes de abordar el control de un motor.
- Conexión del ESP32 y un Sensor de Efecto Hall: conoce otra forma de detectar movimiento y contar revoluciones.
- Proyectos con Arduino y Python: explora comunicación y adquisición de datos para analizar tus pruebas.
¿Qué motor y encoder utilizas? Comparte su resolución, la relación de reducción y la velocidad que deseas controlar. Esos datos son el punto de partida para transformar una orden de movimiento en un control medible.
Comentarios
Publicar un comentario