🛠 Dominar las E/S con la Unidad de Motor con Encoder
Objetivos
Este tutorial tiene como objetivo comprender las interfaces de entrada/salida de la Unidad de Motor con Encoder (DRV8837DSGR). Configuraremos la comunicación I2C para controlar el LED RGB programable WS2812C integrado y leer los pulsos del encoder para estimar la posición del motor. Este nivel de introducción requiere una comprensión básica de los protocolos de comunicación serie.
Hardware Necesario
- Una placa de desarrollo compatible con M5Stack (Core2, StickC Plus2 o Stack)
- La Unidad de Motor con Encoder (DRV8837DSGR)
- Un motor con engranajes de 6 hilos con encoder AB
- Cables Grove o conectores compatibles
- Software Arduino IDE o M5Burner
Pasos
- Instalación de Bibliotecas: En Arduino IDE, instala la biblioteca oficial
M5Stacky la biblioteca dedicadaM5EncoderMotorDriver. Estas bibliotecas gestionan los registros internos del STM32G031. - Conexión Física: Conecta la unidad a un puerto Grove I2C (G16/G17 o G21/G22 según tu placa). Asegúrate de que la fuente de alimentación externa DC 6-12V esté conectada al conector dedicado, ya que el motor requiere más corriente que la que puede proporcionar solo el puerto Grove.
- Inicialización I2C: En el código, inicializa el bus I2C. La dirección predeterminada del controlador es 0x2F. Verifica la conexión mediante una función de escaneo I2C si es necesario.
- Configuración del LED RGB: Usa la función para establecer el color del LED WS2812C. Por ejemplo, configura el LED en rojo para indicar que el motor está listo. El LED sirve aquí como un indicador de estado visual simple.
- Lectura del Encoder: Configura el controlador para leer los pulsos del encoder AB. Aunque el control en bucle cerrado es avanzado, aquí leemos el valor bruto del contador para observar los cambios de posición.
Verificación
Sube el código. El LED de la unidad debe encenderse en rojo. Gira el motor a mano o con un comando de rotación lenta. Abre el Monitor Serie (115200 baudios). Deberías ver los valores del encoder aumentar o disminuir según la dirección de rotación, confirmando que las entradas del encoder y la salida del LED funcionan correctamente a través de I2C.
Para Ir Más Allá
Explora el control de velocidad en bucle cerrado utilizando los datos del encoder para ajustar el PWM automáticamente, o usa la detección de corriente INA199A para monitorear la carga del motor.
Otros tutoriales para esta placa
- Primer cableado y puesta en marcha de la Encoder Motor Driver Unit
- Automatizar un movimiento preciso con el Controlador 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