Tutoriel · Débutant · 30 min de lecture
A4988 : câblage et Vref pour limiter le courant
A4988 sur un Arduino et un NEMA 17 : réglez la limite de courant au multimètre. Formule de Vref, piège des résistances de mesure, et le prix de l'esquiver.
À quoi sert vraiment le driver
Un A4988 n’est pas un interrupteur. C’est un régulateur de courant qui se trouve commuter.
Cette distinction compte parce qu’un enroulement de moteur pas à pas est une inductance de faible résistance — 2 à 4 ohms, typiquement. Branchez un enroulement de 2,8 Ω directement sur 24 V et la loi d’Ohm annonce 8,6 A, de quoi détruire le moteur en quelques secondes. Le rôle du driver est de découper l’alimentation des milliers de fois par seconde pour que le courant moyen se stabilise à une valeur que vous choisissez, puis de faire passer ce courant d’une bobine à l’autre selon le motif qui fait tourner le champ.
Le driver a donc besoin d’un seul nombre : combien de courant par phase. C’est la limite de courant, et son réglage est le seul ajustement de la carte. Tout le reste — micropas, direction, validation — est une broche à configurer une fois.
Le câblage
| Broche A4988 | Va vers | Remarque |
|---|---|---|
| VMOT | Alimentation moteur 8–35 V | Pas le 5 V de l’Arduino. Jamais. |
| GND (à côté de VMOT) | Masse de l’alimentation moteur | Le retour du courant fort |
| VDD | 5 V de l’Arduino | Alimentation logique, quelques milliampères |
| GND (à côté de VDD) | GND de l’Arduino | Doit partager la masse avec l’alimentation moteur |
| 1A, 1B | Une bobine du moteur | Dans un sens ou dans l’autre — cela inverse juste le sens |
| 2A, 2B | L’autre bobine du moteur | Se tromper d’appariement est l’erreur fatale |
| STEP | N’importe quelle sortie de l’Arduino | Une impulsion, un micropas |
| DIR | N’importe quelle sortie de l’Arduino | Niveau haut ou bas selon le sens |
| ENABLE | GND, ou une broche de l’Arduino | Active à l’état bas : à la masse pour alimenter |
| RESET, SLEEP | Reliées entre elles | Les deux doivent être hautes ; les ponter suffit |
| MS1, MS2, MS3 | Voir le tableau ci-dessous | Flottant signifie pas complet |
Deux règles de câblage concentrent presque tout le risque :
- Un condensateur électrolytique de 100 µF entre VMOT et GND, près de la carte. Pas négociable. La fiche technique et la documentation de chaque carte le disent, et la raison est que le hacheur tire le courant par à-coups violents ; sans capacité de découplage à proximité, l’inductance des fils d’alimentation transforme ces à-coups en surtensions qui dépassent la tenue de 35 V de la puce. Les cartes meurent à la mise sous tension, pas en fonctionnement, et c’est généralement pourquoi.
- Ne jamais débrancher le moteur tant que le driver est alimenté. Couper une bobine alimentée produit une surtension inductive violente sans nulle part où aller. Coupez l’alimentation d’abord, à chaque fois.
Si les quatre fils du moteur ne sont pas repérés, trouvez les paires avec un multimètre : au sein d’une bobine vous lirez quelques ohms, et entre bobines vous lirez un circuit ouvert. Appariez par continuité, puis reliez une paire à 1A/1B et l’autre à 2A/2B.
Régler la limite de courant
Il y a un potentiomètre sur la carte, et le tourner change une tension de référence que la puce compare à la tension aux bornes de ses résistances de mesure. Vous mesurez cette référence — Vref — entre le curseur du potentiomètre et la masse.
La formule sur un A4988 est :
Vref = I_phase × R_sense × 8
Voici le piège qui coûte des moteurs. R_sense n’est pas la même sur toutes les cartes. Les cartes sont livrées avec des résistances de mesure de 0,1 Ω ou de 0,05 Ω, et le résultat de la formule diffère d’un facteur deux :
| Résistance de mesure | Marquage sur la carte | Vref pour 1,0 A | Vref pour 1,2 A | Vref pour 1,5 A |
|---|---|---|---|---|
| 0.1 Ω | R100 |
0.80 V | 0.96 V | 1.20 V |
| 0.05 Ω | R050 |
0.40 V | 0.48 V | 0.60 V |
| 0.068 Ω | R068 |
0.54 V | 0.65 V | 0.82 V |
Lisez le marquage des deux résistances CMS noires près du bas de la carte avant tout calcul. Régler 1,2 V sur une carte à résistances de 0,05 Ω, et vous venez de demander 3 A dans un moteur de 1,7 A.
La procédure :
- Alimentez la carte — VMOT branché, moteur débranché. La puce a besoin de la tension moteur pour réguler, mais le moteur n’a pas besoin de tourner.
- Cherchez le courant nominal par phase du moteur. Un NEMA 17 courant fait 1,5 A ou 1,7 A.
- Prenez 70 à 85 % comme cible. Le courant nominal suppose un refroidissement de fiche technique que vous n’avez pas, et les derniers 20 % de courant achètent très peu de couple pour beaucoup de chaleur.
- Calculez Vref avec la formule et la résistance de mesure que vous avez vraiment.
- Posez la pointe noire du multimètre sur une broche de masse et la pointe rouge sur la vis métallique du potentiomètre. Tournez lentement — un quart de tour est un gros changement — jusqu’à lire votre valeur.
Un petit tournevis en céramique vaut le coup. Un tournevis métallique qui ponte le potentiomètre vers autre chose pendant que la carte est sous tension est une façon courante de détruire un driver.
À dire plainement : la limite de courant est le T_peak de l’équation de couple qui régit tout ce que fait un moteur pas à pas. Réglez-la bas et le moteur traîne davantage derrière pour la même charge, et perd des pas plus tôt. Réglez-la haut et le moteur chauffe pour un couple dont il n’a peut-être pas besoin. C’est le seul nombre à fixer délibérément.
Les broches de micropas
MS1, MS2 et MS3 ont des rappels internes vers le bas, donc tout ce que vous laissez flottant est lu bas :
| MS1 | MS2 | MS3 | Résolution | Pas par tour |
|---|---|---|---|---|
| low | low | low | Pas complet | 200 |
| high | low | low | Demi-pas | 400 |
| low | high | low | Quart de pas | 800 |
| high | high | low | Huitième de pas | 1600 |
| high | high | high | Seizième de pas | 3200 |
La plupart des montages pontent les trois au niveau haut et les y laissent. La raison n’est pas la précision — les micropas n’achètent pas la précision en charge — c’est que le seizième de pas empêche le moteur de sonner à chaque pas, ce qui rend la machine silencieuse et évite que l’ondulation apparaisse dans la pièce. Le coût est que votre microcontrôleur doit désormais émettre seize fois plus d’impulsions par millimètre, ce qui est une vraie contrainte sur un Arduino Uno au-delà d’environ 10 000 pas par seconde.
Le piloter
Le programme minimal utile. Notez qu’il n’y a aucune bibliothèque ici : un pas est une impulsion, et c’est vraiment tout.
const int STEP_PIN = 3;
const int DIR_PIN = 4;
const int EN_PIN = 5; // active LOW
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW); // energise the coils
digitalWrite(DIR_PIN, HIGH);
}
void loop() {
// One revolution at 1/16 stepping = 3200 pulses.
for (int i = 0; i < 3200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(2); // datasheet minimum is 1 us
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(300); // this delay IS the speed
}
delay(1000);
}
Ce code fonctionne et c’est aussi exactement ce qu’il ne faut pas livrer, pour deux raisons.
La première est que la fréquence de pas passe de zéro au maximum instantanément. Demandez une vitesse au-dessus de la limite d’accrochage du moteur et il vibrera sans aller nulle part — avec les réglages par défaut du simulateur de moteur pas à pas, commander la pleine vitesse depuis l’arrêt perd 280 pas complets sur un déplacement de 60 mm et laisse l’axe à 4 mm. Le même déplacement avec une rampe arrive exactement sur la cible. Voilà la différence que fait un profil d’accélération, et ce n’est pas un raffinement.
La seconde est que delayMicroseconds bloque. Pendant que la boucle émet des pas, rien d’autre ne tourne sur le microcontrôleur — pas de contrôle de fin de course, pas de liaison série, pas de second axe. Pour quoi que ce soit de réel, utilisez le motif de temporisation non bloquante ou confiez cela à AccelStepper, qui implémente la rampe et l’ordonnancement pour vous :
#include <AccelStepper.h>
AccelStepper axis(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW);
axis.setMaxSpeed(8000); // steps/s -> 100 mm/s at 80 steps/mm
axis.setAcceleration(16000); // steps/s2 -> 200 mm/s2
axis.moveTo(80 * 50); // 50 mm
}
void loop() {
axis.run(); // returns immediately; call it constantly
}
setMaxSpeed et setAcceleration vous donnent un profil trapézoïdal et rien d’autre — il n’y a pas d’option en courbe en S. Si vous voulez un profil limité en à-coups, vous générez la consigne vous-même.
A4988 ou une des alternatives ?
| Driver | Courant | Micropas | Bruit | Quand le choisir |
|---|---|---|---|---|
| A4988 | 1 A nu, ~1,5 A refroidi | jusqu’à 1/16 | Audible | Bon marché, partout, bien documenté |
| DRV8825 | 1,5 A nu, ~2,2 A refroidi | jusqu’à 1/32 | Audible | Quand il faut plus de courant ou des pas plus fins |
| TMC2208 | ~1,2 A | jusqu’à 1/256 | Presque silencieux | Le bruit compte ; c’est la raison du basculement des imprimantes |
| TMC2209 | ~1,7 A | jusqu’à 1/256 | Presque silencieux | Idem, avec en plus la prise d’origine sans capteur |
| ULN2003 + 28BYJ-48 | ~0,3 A | Demi-pas | Bourdonnant | Une démo à l’échelle du jouet, pas une machine |
Le DRV8825 est compatible broche à broche mais sa formule de Vref est différente — Vref = I × 0.5 — et son potentiomètre tourne dans l’autre sens. Le substituer sans relire la formule est une façon classique de cuire un moteur.
Les drivers TMC valent leur prix dès qu’une machine vit quelque part où on peut l’entendre. Ils font le même travail avec une forme de courant plus douce, et c’est pourquoi une imprimante équipée fait du bruit de ventilateur au lieu du bruit de moteur.
Quand ça tourne mal
| Symptôme | Cause | Correctif |
|---|---|---|
| Le moteur vibre mais ne tourne pas | Paires de bobines mal câblées | Retrouvez les paires par continuité et recâblez |
| Rien ne se passe du tout | ENABLE flottant ou haut, ou RESET/SLEEP bas | Mettez ENABLE à la masse ; pontez RESET vers SLEEP |
| Le driver devient trop chaud pour le toucher, puis coupe | Limite de courant trop haute | Remesurez Vref ; ajoutez dissipateur et ventilation |
| Le moteur est chaud mais le driver va bien | Normal | 60–80 °C sur le carter, c’est attendu |
| Pas perdus sur les déplacements rapides seulement | Tension d’alimentation trop basse pour cette vitesse | Montez VMOT — plus de courant n’aidera pas |
| Pas perdus sur les fortes accélérations | Rampe trop agressive, ou courant trop bas | Adoucissez l’accélération, ou montez Vref vers le nominal |
| Carte morte dès la mise sous tension | Condensateur de découplage manquant sur VMOT | Électrolytique 100 µF, près des broches |
| Le moteur tient la position mais tourne de façon rugueuse | Pas complet | Pontez MS1–MS3 au niveau haut pour 1/16 |
| Résistance ouverte aux bornes d’une « paire » | Ces deux fils viennent de bobines différentes | Réappariez-les |
Suite
Avec le driver réglé, la question restante est combien d’impulsions vaut un millimètre de déplacement — ce qui dépend entièrement de ce que l’arbre entraîne. C’est le nombre de pas par millimètre, et c’est le nombre auquel toutes les autres parties de la machine sont étalonnées.
Explorer le graphe
Fait partie de ces réalisations
Les projets et parcours d'apprentissage qui incluent ce tutoriel.
Pour aller plus loin