Unit 4-Encoder Motor Driver (DRV8837DSGR)

M5StackUnitSTM32published

⚡ L’essentiel en 60 secondes

Piloter plusieurs moteurs à courant continu de manière précise et coordonnée est souvent l’un des défis les plus complexes pour les amateurs de robotique et les ingénieurs en prototypage. Le module Unit 4-Encoder Motor Driver (DRV8837DSGR) de M5Stack se présente comme une solution intégrée et compacte pour relever ce défi, en offrant une interface simple pour gérer jusqu’à quatre moteurs équipés d’encodeurs. Loin d’être un simple amplificateur de puissance, cette carte agit comme un véritable sous-système de contrôle autonome, capable de gérer la logique complexe nécessaire au mouvement fluide et précis des mécanismes. Au cœur de ce module réside un microcontrôleur STM32F030C8T6, un circuit intégré qui prend en charge l’ensemble des tâches de calcul et de communication, libérant ainsi le processeur principal de votre projet pour se concentrer sur la logique d’application plutôt que sur la gestion bas niveau des signaux électriques. Cette architecture permet de déléguer au module la responsabilité de maintenir la vitesse ou la position des moteurs, une tâche qui exige une réactivité et une précision temporelle difficiles à obtenir avec des microcontrôleurs généralistes moins spécialisés.

La puissance de ce module repose sur l’intégration de quatre ponts en H de type DRV8837DSGR. Pour comprendre l’importance de ces composants, il faut imaginer le pont en H comme un ensemble de quatre interrupteurs électroniques disposés en forme de « H » autour du moteur. En activant les paires d’interrupteurs opposées, on peut inverser la direction du courant traversant le moteur, ce qui permet de le faire tourner dans un sens ou dans l’autre. Le DRV8837DSGR est un circuit intégré spécialisé qui combine ces interrupteurs avec des protections thermiques et contre les surintensités, assurant une fiabilité accrue. Chaque canal moteur peut supporter une charge maximale de 1,2 ampère sous une tension de 5 volts, ce qui convient parfaitement aux petits moteurs à engrenages couramment utilisés dans les jouets éducatifs, les petits bras robotiques ou les châssis de robots mobiles. La compatibilité avec les moteurs à engrenages à 6 fils ou de type TT, ainsi que le support des encodeurs offrant une résolution de 3 à 15 impulsions par tour (PPR), font de ce module un choix polyvalent pour divers projets mécaniques. Les encodeurs jouent ici un rôle crucial en fournissant un retour d’information continu sur la rotation du moteur, permettant au module de corriger en temps réel les écarts par rapport à la consigne demandée.

La communication avec ce module s’effectue via le bus I2C, un protocole de communication série standard qui permet de connecter plusieurs périphériques sur seulement deux fils de données. Par défaut, le module répond à l’adresse 0x24, mais cette adresse est configurable dans une plage allant de 0x08 à 0x77, ce qui offre une grande flexibilité pour intégrer plusieurs de ces cartes dans un même système sans conflit d’adressage. Cette approche simplifie considérablement le câblage, car contrairement aux méthodes de contrôle direct par broches GPIO qui nécessitent de nombreuses connexions physiques, l’I2C permet de piloter les quatre moteurs ainsi que de lire les données des encodeurs et du capteur de courant à travers un ensemble minimal de connexions. Le module dispose d’ailleurs de deux ports Grove HY2.0-4P, facilitant l’extension de la chaîne I2C vers d’autres modules compatibles avec l’écosystème M5Stack, tout en conservant une organisation propre et modulaire du câblage.

L’aspect le plus remarquable de ce pilote réside dans ses modes de contrôle avancés, qui vont bien au-delà de la simple modulation de largeur d’impulsion (PWM) basique. Le module intègre des algorithmes de régulation en boucle fermée pour la vitesse et la position. En mode boucle fermée de vitesse, le microcontrôleur ajuste automatiquement la puissance envoyée au moteur pour maintenir une vitesse constante, même si la charge mécanique varie, par exemple lorsqu’un robot rencontre une pente ou un obstacle. En mode position, le module peut commander au moteur d’atteindre un angle précis et de s’y maintenir, une fonctionnalité indispensable pour les bras robotiques ou les systèmes de pointage. De plus, les fonctions de démarrage et d’arrêt progressifs (soft start/stop) permettent d’éviter les à-coups mécaniques et les pics de courant au démarrage, prolongeant ainsi la durée de vie des engrenages et des composants électroniques. Le mode veille est également disponible pour réduire la consommation d’énergie lorsque les moteurs ne sont pas utilisés, une caractéristique précieuse pour les projets alimentés par batterie.

L’alimentation du module est conçue pour être flexible et robuste. Il peut être alimenté par une entrée DC externe comprise entre 6 et 12 volts via deux connecteurs PH2.0-2P, ou directement par le port Grove en 5 volts. Un convertisseur DC-DC intégré, de type abaisseur (buck converter), joue un rôle central dans la gestion de l’énergie. Il permet non seulement d’alimenter les moteurs, mais aussi de fournir jusqu’à 5 volts à 8 ampères sur la sortie, ce qui est suffisant pour alimenter la carte hôte ou d’autres périphériques connectés. Cette capacité de sortie élevée est particulièrement utile dans les configurations où plusieurs moteurs fonctionnent simultanément, nécessitant un courant important sans faire chuter la tension d’alimentation du système de contrôle. Pour surveiller cette consommation, le module intègre un circuit de détection de courant INA199A, permettant au microcontrôleur de lire en temps réel la consommation électrique de chaque moteur, une information vitale pour détecter les blocages mécaniques ou les anomalies de fonctionnement.

Physiquement, le module est extrêmement compact, avec des dimensions de 56,5 x 24,0 x 12,8 mm et un poids plume de seulement 10 grammes. Cette faible encombrement permet de l’intégrer facilement dans des espaces restreints, comme l’intérieur d’un châssis de robot ou au niveau des articulations d’un bras mécanique. Quatre connecteurs PH2.0-6P sont prévus pour brancher les moteurs, tandis qu’une LED RGB WS2812C offre un indicateur visuel programmable, utile pour le débogage ou pour signaler l’état du système. L’ensemble de ces caractéristiques fait de l’Unit 4-Encoder Motor Driver un outil de prédilection pour la conception de robots multi-articulés, de véhicules mobiles à quatre roues motrices ou de bras robotiques légers. En centralisant la gestion de la puissance, de la logique de contrôle et de l’acquisition de données des encodeurs sur une seule carte, M5Stack propose une solution qui simplifie le développement, réduit le temps de mise au point et améliore la fiabilité des systèmes robotiques complexes, tout en restant accessible aux débutants grâce à sa simplicité d’interface via le bus I2C et l’écosystème Grove.

Forum (1 sujet) →

AttrSpecsvérifié
socSTM32F030C8T6? non vérifié
motor_driver4x DRV8837DSGR H-bridge? non vérifié
communicationI2C (Default address 0x24, configurable 0x08-0x77)? non vérifié
encoder_support4-channel AB encoder, 3-15 PPR? non vérifié
power_inputDC 6-12V (2x PH2.0-2P) or DC 5V (Grove)? non vérifié
power_outputDC 5V @ 8A max (via DC-DC buck converter)? non vérifié
motor_loadMax single-channel DC 5V @ 1.2A? non vérifié
current_sensingINA199A circuit? non vérifié
interfaces2x HY2.0-4P Grove, 4x PH2.0-6P motor ports? non vérifié
dimensions56.5 x 24.0 x 12.8 mm? non vérifié
weight10.0 g? non vérifié
led1x WS2812C-2020 RGB? non vérifié
control_modesPWM, Forward/Reverse, Speed/Position Loop, Soft Start/Stop? non vérifié

Ce module M5Stack est conçu pour le pilotage précis de quatre moteurs à courant continu avec encodeurs. Il s'appuie sur un microcontrôleur STM32F030C8T6 et quatre ponts en H DRV8837DSGR pour offrir des fonctions de régulation en boucle fermée via le bus I2C.

+ Points forts

["- Régulation de vitesse et de position en boucle fermée avec démarrage/arrêt progressif","- Convertisseur DC-DC intégré fournissant jusqu'à 5V @ 8A pour alimenter les moteurs et l'hôte","- Support natif des encodeurs AB (3-15 PPR) et compatibilité avec les moteurs à engrenages 6 fils ou TT"]

− Points faibles

["- Charge maximale limitée à 1,2A par canal moteur à 5V","- Nécessite une alimentation externe DC 6-12V pour la puissance moteur (le port Grove 5V est insuffisant pour les charges élevées)","- Dimensions compactes (56,5 x 24,0 mm) pouvant limiter l'accès physique aux connecteurs en cas d'empilement dense"]

  • Retour d'expérience expert expert — expert-microdb
    • J'ai intégré la carte 4-Encoder Motor Driver (DRV8837DSGR) sur un châssis 4 roues. Le point fort est la boucle fermée PID gérée par le STM32F030, ce qui libère totalement l'hôte. La régulation de vitesse est précise avec des moteurs TT standards. Attention toutefois à la gestion thermique : bien qu… — expert-microdb
    • Bon retour. Je confirme que la communication I2C (0x24) est très stable, mais la documentation sur les registres de position est parfois floue. Pour les bras robotiques, le mode veille est crucial pour économiser l'énergie. J'ai noté que les encodeurs 3-15 PPR fonctionnent bien, mais si tu utilises… — membre-forum

Retours et projets de la communauté

Contenu indisponible pour le moment.

Contenu indisponible pour le moment.

["- non renseigné"]

Bibliothèque de code — exemples écrits pour cette carte

  • i2c-motor-spin.ino arduino

    Exemple minimaliste pour initialiser la communication I2C et envoyer une commande de vitesse sur le premier moteur.

  • closed-loop-speed-control.ino arduino

    Configure le canal moteur 1 en mode régulation de vitesse automatique utilisant les données de l'encodeur intégré.

  • relative-position-move.ino arduino

    Utilise le mode position pour déplacer le moteur 2 de 1000 pas relatifs, utile pour le contrôle précis d'articulations.

  • rgb-led-status-indicator.ino arduino

    Exemple d'utilisation de la LED RGB intégrée pour le feedback visuel de l'état du système de pilotage.

  • differential-drive-robot.ino arduino

    Contrôle coordonné de deux moteurs pour la navigation d'un robot mobile en utilisant la vitesse différentielle.

  • i2c_basic_motor_control.py Python

    Exemple minimal pour communiquer avec le module via I2C Linux (Raspberry Pi) pour contrôler un seul moteur.

  • closed_loop_speed_pid.ino C++

    Boucle de contrôle PID en C++ pour maintenir une vitesse cible en utilisant les retours des encodeurs via I2C.

  • rgb_status_led_ws2812.py Python

    Contrôle de la LED RGB embarquée pour signaler des états (ex: erreur, fonctionnement) via une interface I2C simplifiée.

  • current_sensing_ina199.ino C++

    Surveillance en temps réel du courant consommé par le moteur pour détecter les blocages ou surcharges et déclencher un arrêt.

  • multi_motor_sequencer.py Python

    Gestion des démarrages en douceur pour les 4 canaux afin de protéger l'alimentation DC-DC et les ponts H contre les appels de courant.