🛠 Controlar GPIOs y periféricos con la Encoder Motor Driver Unit

Unidad de control de motor con encoder M5Stack (DRV8837DSGR) · avance · Exploitez les capacités avancées de l'Encoder Motor Driver Unit pour gérer les entrées-sorties, la LED RGB et l'affichage via son microcontrôleur STM32.

Objetivos

Este tutorial avanzado tiene como objetivo demostrar cómo utilizar los recursos internos de la Encoder Motor Driver Unit (basada en STM32G031) más allá del simple control del motor. Configuraremos el LED RGB WS2812C, leeremos las entradas GPIO disponibles a través de la interfaz Grove y entenderemos la interacción entre el microcontrolador y el puente H DRV8837. El objetivo es crear una lógica de retroalimentación visual y control externo.

Material necesario

Pasos

Instala las bibliotecas necesarias. La unidad usa una dirección I2C por defecto de 0x2F. ``cpp #include <M5Unified.h> #include <M5_I2CEncoderMotor.h> ``

  1. Configuración del entorno

Inicializa el bus I2C y el objeto del motor. Verifica la conexión con el microcontrolador STM32G031. ``cpp M5_I2CEncoderMotor motor; void setup() { M5.begin(); Wire.begin(); motor.init(0x2F); motor.setMotorMode(MOTOR_MODE_PWM); // Modo de bajo nivel para prueba GPIO } ``

  1. Inicialización y comunicación I2C

El LED integrado sirve como indicador de estado. Usa la función dedicada para cambiar el color según la velocidad o errores. ``cpp void loop() { // Ejemplo: LED rojo si hay error, verde si está activo if(motor.isRunning()) { motor.setLedColor(0, 255, 0); // Verde } else { motor.setLedColor(255, 0, 0); // Rojo } } ``

  1. Control del LED RGB (WS2812C)

La unidad expone pines a través del conector Grove. Para leer un sensor externo (ej: botón), configura el pin correspondiente como entrada. Nota que la lógica interna del STM32 maneja la multiplexación. ``cpp // Ejemplo genérico de lectura vía bus I2C si el sensor está conectado en serie // O uso directo de pines Grove si están mapeados al MCU principal ``

  1. Uso de GPIO vía Grove

Implementa un bucle que ajuste la PWM según una entrada externa simulada o real, actualizando el LED. ``cpp int speed = 100; // Lectura de un valor (simulado o vía sensor I2C) speed = constrain(speed + random(-10, 10), 0, 255); motor.setMotorSpeed(speed); delay(100); ``

  1. Bucle de control avanzado

Verificación

Para ir más allá

Explora el modo de control de posición en lazo cerrado usando los datos del encoder AB para regular la velocidad. También puedes configurar la dirección I2C (0x08-0x77) para gestionar múltiples unidades en el mismo bus.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales