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.

Une carte porteuse A4988 vue de dessus avec huit pastilles dorées de chaque côté. La colonne de gauche indique ENABLE, MS1, MS2, MS3, RESET, SLEEP, STEP et DIR, avec STEP et DIR en surbrillance. La colonne de droite indique VMOT, GND, 2B, 2A, 1A, 1B, VDD et GND, avec VMOT en rouge. Un potentiomètre d'ajustement en haut est légendé comme le potentiomètre VREF à sonder avec un multimètre, et un dissipateur à ailettes couvre la puce du driver. Deux petites résistances de mesure en bas de la carte sont signalées comme R100 égale 0,1 ohm ou R050 égale 0,05 ohm, avec un avertissement de lire les vôtres avant tout calcul.
Seize pastilles, un potentiomètre et deux minuscules résistances qui changent l'arithmétique. STEP et DIR sont les deux seules broches que votre programme touche à l'exécution ; tout le reste est de la configuration. Télécharger le SVG

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 :

  1. 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.
  2. Cherchez le courant nominal par phase du moteur. Un NEMA 17 courant fait 1,5 A ou 1,7 A.
  3. 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.
  4. Calculez Vref avec la formule et la résistance de mesure que vous avez vraiment.
  5. 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

Références