🛠 Automatizar un movimiento preciso con el Controlador de Motor con Encoder
Objetivos
Este tutorial tiene como objetivo automatizar el movimiento de un motor DC utilizando control en bucle cerrado. A diferencia del modo PWM simple, el control en bucle cerrado utiliza datos del codificador para corregir la velocidad en tiempo real, garantizando la precisión de posicionamiento incluso bajo carga variable. Configuraremos la unidad para alcanzar una posición objetivo específica.
Materiales necesarios
- 1x M5Stack Encoder Motor Driver Unit (DRV8837DSGR)
- 1x M5Stack Core o Core2 (Maestro I2C)
- 1x Motor de engranajes de 6 hilos (compatible con codificador AB)
- 1x Cable Grove
- Fuente de alimentación externa DC 6-12V (conectada a la unidad)
- Cables de conexión del motor (a los puertos M+ y M-)
Pasos
- Conexión física: Conecte el motor a los terminales del motor de la unidad. Asegúrese de que los cables del codificador (generalmente los cables centrales o dedicados según el modelo) estén correctamente conectados a los puertos del codificador de la unidad. Conecte la unidad al maestro mediante el cable Grove (I2C). Proporcione alimentación externa (6-12V).
- Configuración de software: En su IDE (Arduino o UIFlow), inicialice la comunicación I2C. La dirección predeterminada es 0x2F. Si usa UIFlow, agregue el bloque 'Encoder Motor Driver'.
- Definición de parámetros: Configure el PPR (Pulsos por Revolución) de su codificador (entre 3 y 15). Por ejemplo, si su motor tiene un codificador de 12 PPR, ingrese este valor. Defina la velocidad objetivo en RPM.
- Comando de posición: Envíe un comando para mover el motor a una posición absoluta o relativa. Por ejemplo, pida al motor que gire 360 grados. El controlador utilizará el puente H DRV8837 para ajustar la corriente y la velocidad para alcanzar el objetivo.
- Monitoreo del estado: Use funciones de lectura para verificar la posición actual y la velocidad real. El LED RGB se puede configurar para indicar el estado (por ejemplo, azul en movimiento, verde cuando se alcanza el objetivo).
Verificación
Ejecute el programa. El motor debe girar y detenerse precisamente en la posición solicitada. Si bloquea ligeramente el motor con la mano, el controlador debería aumentar la corriente para mantener la posición (gracias a la detección INA199A). Verifique que la velocidad permanezca estable a pesar de las variaciones de carga.
Para ir más allá
Explore el modo de 'arranque/parada progresiva' para evitar choques mecánicos. También puede cambiar la dirección I2C para conectar varias unidades en el mismo bus y crear un sistema de posicionamiento de múltiples ejes.
Otros tutoriales para esta placa
- Primer cableado y puesta en marcha de la Encoder Motor Driver Unit
- Dominar las E/S con la Unidad de Motor con Encoder
- Primer encendido del Driver Motor Encoder
- Control de GPIO y LED RGB en la Encoder Motor Driver Unit
- Automatización con realimentación de encoder DRV8837
- Configuración avanzada y validación del bus I2C
Ejemplos de código para esta placa
m5stack-encoder-motor-i2c-esp32.inoC++ (Arduino)m5stack-encoder-motor-pwm-control.inoC++ (Arduino)m5stack-encoder-motor-closed-loop.inoC++ (Arduino)m5stack-encoder-motor-position-control.inoC++ (Arduino)m5stack-encoder-motor-led-status.inoC++ (Arduino)closed_loop_speed_pid.pyMicroPython