🛠 Automatiser un mouvement précis avec l'Encoder Motor Driver
Objectifs
Ce tutoriel vise à automatiser un mouvement de moteur DC en utilisant le contrôle en boucle fermée. Contrairement au mode PWM simple, la boucle fermée utilise les données de l'encodeur pour corriger la vitesse en temps réel, garantissant une précision de positionnement même sous charge variable. Nous allons configurer l'unité pour atteindre une position cible spécifique.
Matériel nécessaire
- 1x M5Stack Encoder Motor Driver Unit (DRV8837DSGR)
- 1x M5Stack Core ou Core2 (maître I2C)
- 1x Moteur à engrenages 6 fils (compatible encodeur AB)
- 1x Câble Grove
- Alimentation externe DC 6-12V (connectée à l'unité)
- Câbles de connexion moteur (vers les ports M+ et M-)
Étapes
- Connexion physique : Branchez le moteur sur les bornes moteur de l'unité. Assurez-vous que les fils de l'encodeur (généralement les fils centraux ou dédiés selon le modèle) sont correctement connectés aux ports d'encodeur de l'unité. Connectez l'unité au maître via le câble Grove (I2C). Fournissez l'alimentation externe (6-12V).
- Configuration logicielle : Dans votre IDE (Arduino ou UIFlow), initialisez la communication I2C. L'adresse par défaut est 0x2F. Si vous utilisez UIFlow, ajoutez le bloc « Encoder Motor Driver ».
- Définition des paramètres : Configurez le nombre de PPR (Pulses Per Revolution) de votre encodeur (entre 3 et 15). Par exemple, si votre moteur a un encodeur de 12 PPR, entrez cette valeur. Définissez la vitesse cible en RPM.
- Commande de position : Envoyez une commande pour déplacer le moteur vers une position absolue ou relative. Par exemple, demandez au moteur de tourner de 360 degrés. Le driver utilisera le pont en H DRV8837 pour ajuster le courant et la vitesse afin d'atteindre la cible.
- Suivi du statut : Utilisez les fonctions de lecture pour vérifier la position actuelle et la vitesse réelle. La LED RGB peut être configurée pour indiquer l'état (par exemple, bleu en mouvement, vert quand la cible est atteinte).
Vérification
Lancez le programme. Le moteur doit tourner et s'arrêter précisément à la position demandée. Si vous bloquez légèrement le moteur avec votre main, le driver devrait augmenter le courant pour maintenir la position (grâce à la détection INA199A). Vérifiez que la vitesse reste stable malgré les variations de charge.
Pour aller plus loin
Explorez le mode « démarrage/arrêt progressif » pour éviter les chocs mécaniques. Vous pouvez également modifier l'adresse I2C pour connecter plusieurs unités sur le même bus et créer un système de positionnement multi-axes.
Autres tutoriels pour cette carte
- Premier branchement et mise en route de l'Encoder Motor Driver Unit
- Maîtriser les entrées-sorties avec l'Encoder Motor Driver Unit
- Première mise en route du Driver Moteur Encoder
- Pilotage GPIO et LED RGB sur l'Encoder Motor Driver Unit
- Automatisation par retour d'encodeur avec la DRV8837
- Configuration avancée et validation du bus I2C
Exemples de code pour cette carte
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