🛠 Piloter les GPIO et périphériques avec l'Encoder Motor Driver Unit

Unité de pilotage moteur à encodeur 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.

Objectifs

Ce tutoriel avancé vise à démontrer comment utiliser les ressources internes de l'Encoder Motor Driver Unit (basée sur STM32G031) au-delà du simple pilotage moteur. Nous allons configurer la LED RGB WS2812C, lire les entrées GPIO disponibles via l'interface Grove, et comprendre l'interaction entre le microcontrôleur et le pont en H DRV8837. L'objectif est de créer une logique de feedback visuel et de contrôle externe.

Matériel nécessaire

Étapes

Installez les bibliothèques nécessaires. L'unité utilise une adresse I2C par défaut de 0x2F. ``cpp #include <M5Unified.h> #include <M5_I2CEncoderMotor.h> ``

  1. Configuration de l'environnement

Initialisez le bus I2C et l'objet moteur. Vérifiez la connexion avec le microcontrôleur STM32G031. ``cpp M5_I2CEncoderMotor motor; void setup() { M5.begin(); Wire.begin(); motor.init(0x2F); motor.setMotorMode(MOTOR_MODE_PWM); // Mode bas niveau pour test GPIO } ``

  1. Initialisation et communication I2C

La LED intégrée sert d'indicateur d'état. Utilisez la fonction dédiée pour changer la couleur selon la vitesse ou les erreurs. ``cpp void loop() { // Exemple : LED rouge si erreur, verte si actif if(motor.isRunning()) { motor.setLedColor(0, 255, 0); // Vert } else { motor.setLedColor(255, 0, 0); // Rouge } } ``

  1. Contrôle de la LED RGB (WS2812C)

L'unité expose des pins via le connecteur Grove. Pour lire un capteur externe (ex: bouton), configurez le pin correspondant en entrée. Notez que la logique interne du STM32 gère le multiplexage. ``cpp // Exemple générique de lecture via le bus I2C si le capteur est connecté en série // Ou utilisation directe des pins Grove si mappés sur le MCU principal ``

  1. Utilisation des GPIO via Grove

Implémentez une boucle qui ajuste la PWM en fonction d'une entrée externe simulée ou réelle, tout en mettant à jour la LED. ``cpp int speed = 100; // Lecture d'une valeur (simulée ou via capteur I2C) speed = constrain(speed + random(-10, 10), 0, 255); motor.setMotorSpeed(speed); delay(100); ``

  1. Boucle de contrôle avancée

Vérification

Pour aller plus loin

Explorez le mode de contrôle en boucle fermée de position en utilisant les données de l'encodeur AB pour asservir la vitesse. Vous pouvez aussi configurer l'adresse I2C (0x08-0x77) pour gérer plusieurs unités sur le même bus.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels