Introduction
Le A4988 est un driver de moteur pas-à-pas bipolaire fabriqué par Allegro MicroSystems. Simple, robuste et économique, il est l’un des drivers les plus répandus dans le monde des makers, des imprimantes 3D et des petites machines CNC.
Caractéristiques principales
- Tension d’alimentation moteur : 8V à 35V
- Courant par phase : jusqu’à 1A en continu, 2A en peak (avec refroidissement)
- Microstepping : Full, 1/2, 1/4, 1/8, 1/16 step
- Interface STEP/DIR : simple et compatible avec tous les microcontrôleurs
- Protection thermique : arrêt automatique à 150°C
- Protection sous-tension : désactivation si VM < 8V
- Détection de court-circuit : protection des sorties moteur
Pourquoi choisir le A4988 ?
Le A4988 est idéal pour les projets nécessitant :
- Une mise en œuvre rapide et simple (pas de configuration logicielle)
- Un coût minimal
- Une documentation abondante et une large communauté
- Des applications à vitesses modérées sans exigence de silence
Le A4988 est plus simple et moins cher que le TMC2209, mais il produit plus de bruit et de vibrations, et son microstepping s’arrête à 1/16. Pour des applications silencieuses ou des courants > 1.5A en continu, préférez le TMC2209 ou le DRV8825.
Comprendre le A4988
Architecture interne
Le A4988 intègre deux ponts en H complets pour contrôler les deux bobines d’un moteur bipolaire. Le hachage du courant (chopping) est géré en interne grâce à des résistances de mesure (Rsense) et un oscillateur interne.
Il utilise une table de vérité de microstepping interne : en fonction des états de MS1, MS2 et MS3, le driver génère automatiquement les séquences de courant sinusoïdales pour le microstepping.
Pinout du module

Configuration du microstepping
Le microstepping permet d’obtenir davantage de résolution lors de la rotation du moteur. Il s’agit d’un usage avancé des drivers de moteurs, permettant des déplacements plus fins et des mouvements plus silencieux.
Trois pins (MS1, MS2, MS3) permettent de sélectionner le mode de microstepping :
| MS1 |
MS2 |
MS3 |
Mode |
Steps/tour (moteur 1.8°) |
| GND |
GND |
GND |
Full step |
200 |
| VDD |
GND |
GND |
1/2 step |
400 |
| GND |
VDD |
GND |
1/4 step |
800 |
| VDD |
VDD |
GND |
1/8 step |
1600 |
| VDD |
VDD |
VDD |
1/16 step |
3200 |
Les pins MS1, MS2, MS3 ont des résistances de pull-down internes. Laissées non connectées (flottantes), elles sont lues comme LOW (GND). Le mode par défaut, si rien n’est connecté, est donc le Full Step.
Partie 1 : Prototypage sur Breadboard
Matériel nécessaire
- 1x Module A4988 (format StepStick / Pololu)
- 1x ESP32 S3 UNO
- 1x Moteur pas-à-pas bipolaire NEMA 17 (≤ 1A/phase recommandé)
- 1x Alimentation externe 12V ou 24V (2A minimum)
- 1x Breadboard
- Câbles Dupont mâle-mâle et mâle-femelle
- 1x Condensateur électrolytique 100µF 35V (indispensable)
- (Optionnel) Dissipateur thermique autocollant
Brancher un condensateur de 100µF entre VMOT et GND est INDISPENSABLE. Sans lui, les pointes de courant lors du freinage moteur (back-EMF) peuvent détruire instantanément le A4988. Ce condensateur protège le driver.
Ne jamais alimenter le moteur via l’USB de l’ESP32 ! Le A4988 et le moteur nécessitent une alimentation externe 12-24V.
Schéma de câblage
Alimentation moteur :
- VMOT : +12V ou +24V (alimentation externe)
- GND (côté VMOT) : Masse alimentation moteur
- Condensateur 100µF entre VMOT et GND (au plus près du module)
Alimentation logique :
- VDD : +3.3V depuis l’ESP32
- GND (côté VDD) : Masse commune avec l’ESP32
Signaux de contrôle :
- STEP : GPIO 12
- DIR : GPIO 13
- EN : GPIO 14 (ou relié à GND pour toujours activer)
- RESET et SLEEP : reliés ensemble (HIGH = actif)
Microstepping (exemple 1/16) (optionnel) :
- MS1 : 3.3V (GPIO 1 ou VDD)
- MS2 : 3.3V (GPIO 2 ou VDD)
- MS3 : 3.3V (GPIO 3 ou VDD)
Sorties moteur :
- 1A, 1B : Bobine A du moteur
- 2A, 2B : Bobine B du moteur
Les pins RESET et SLEEP doivent être reliés ensemble (ou à 3.3V) pour que le driver soit actif. Si SLEEP est mis à LOW, le driver entre en mode veille. Si RESET est mis à LOW, le driver est réinitialisé.
Vérifiez TOUJOURS le pinout de votre module A4988 ! Bien que la majorité des modules suivent le standard Pololu/StepStick, certains clones ont des pins dans un ordre différent. Référez-vous à la sérigraphie sur le module.
Réglage du courant (Vref)
Réglage du potentiomètre Vref
Le courant maximum délivré au moteur se règle via le potentiomètre sur le module.
Formule :
Imax = Vref / (8 × Rsense)
→ Vref = Imax × 8 × Rsense
Valeurs selon le module :
- Module Pololu original (Rsense = 0.2Ω) :
Vref = Imax × 1.6
- Clones courants (Rsense = 0.1Ω) :
Vref = Imax × 0.8
- Clones économiques (Rsense = 0.05Ω) :
Vref = Imax × 0.4
Pour identifier votre Rsense :
- Lire la valeur sur les deux petites résistances CMS situées à côté de la puce
- Valeurs communes : R200 = 0.2Ω, R100 = 0.1Ω, R050 = 0.05Ω
Procédure :
- Alimenter VDD (3.3V) sans alimenter VMOT
- Mesurer au multimètre entre la vis du potentiomètre et GND
- Ajuster avec un tournevis céramique ou plastique
- Commencer à 50% du courant nominal, tester, puis ajuster
Réglez le Vref AVANT de connecter le moteur, uniquement VDD alimenté. Tourner le potentiomètre dans le sens horaire augmente le courant. Ne dépassez jamais le courant nominal du moteur, sous peine de surchauffe rapide du driver et du moteur.
Code ESP32
Code 1 : Test simple de rotation
#include <Arduino.h>
// Pins GPIO de l'ESP32
#define STEP_PIN 12
#define DIR_PIN 13
#define ENABLE_PIN 14
// Paramètres moteur
// 200 pas/tour (moteur 1.8°) × 16 microsteps = 3200 pas/tour
const int stepsPerRevolution = 200;
const int microstepping = 16; // MS1=MS2=MS3=3.3V
const int totalSteps = stepsPerRevolution * microstepping;
void rotate(int steps, int delayMicros);
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(ENABLE_PIN, OUTPUT);
// Activer le driver (EN = LOW = actif)
digitalWrite(ENABLE_PIN, LOW);
Serial.begin(115200);
Serial.println("A4988 + ESP32 - Test de rotation");
}
void loop() {
Serial.println("Sens horaire - 1 tour");
digitalWrite(DIR_PIN, HIGH);
rotate(totalSteps, 500);
delay(1000);
Serial.println("Sens antihoraire - 1 tour");
digitalWrite(DIR_PIN, LOW);
rotate(totalSteps, 500);
delay(1000);
}
void rotate(int steps, int delayMicros) {
for (int i = 0; i < steps; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(delayMicros);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(delayMicros);
}
}
Test et vérification
- Uploadez le code sur votre ESP32
- Ouvrez le moniteur série (115200 bauds)
- Le moteur devrait effectuer 1 tour dans chaque sens en alternance
- Si le moteur ne tourne pas → vérifiez que RESET et SLEEP sont reliés ensemble
- Si le moteur chauffe sans bouger → courant trop élevé, réduire Vref
- Si le moteur vibre sans avancer → inverser les fils d’une bobine
Code 2 : Utilisation avec AccelStepper
Pour cette démonstration, la bibliothèque AccelStepper est obligatoire. Ajoutez la ligne suivante dans votre platformio.ini :
lib_deps = waspinator/AccelStepper@^1.64
Voici le code nécessaire à cette démonstration :
#include <Arduino.h>
#include <AccelStepper.h>
#define STEP_PIN 12
#define DIR_PIN 13
#define ENABLE_PIN 14
// AccelStepper::DRIVER = mode STEP/DIR (compatible A4988, DRV8825...)
AccelStepper motor(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
pinMode(ENABLE_PIN, OUTPUT);
digitalWrite(ENABLE_PIN, LOW); // Activer le driver
motor.setMaxSpeed(3000); // Pas par seconde (maximum)
motor.setAcceleration(1000); // Pas par seconde²
motor.setCurrentPosition(0);
Serial.begin(115200);
Serial.println("A4988 + ESP32 - AccelStepper");
}
void loop() {
// Aller à 3200 pas (1 tour en 1/16 step)
Serial.println("Position cible : 3200");
motor.moveTo(3200);
while (motor.distanceToGo() != 0) {
motor.run();
}
delay(500);
// Revenir à 0
Serial.println("Retour position 0");
motor.moveTo(0);
while (motor.distanceToGo() != 0) {
motor.run();
}
delay(500);
}
Partie 2 : Intégration sur PCB
Après validation du prototype sur breadboard, intégrons le module A4988 sur un PCB pour une solution robuste et compacte.
Considérations de routage
Pistes de puissance (VMOT, GND moteur) :
- Largeur minimum : 1.5mm (pour 2A)
- Idéalement : 2-3mm
Découplage :
- C1 (100µF) : au plus près de VMOT, entre VMOT et GND
Le reste du découplage est présent directement sur le module.
Signaux de contrôle :
- STEP, DIR : pistes courtes, éloignées des pistes de puissance
- MS1/MS2/MS3 : peuvent être câblées fixes (straps) ou sur connecteur avec jumpers
Tests et mise en service du PCB
Checklist avant alimentation
Vérifications pré-power
Avant de brancher quoi que ce soit :
- Inspecter toutes les soudures
- Vérifier l’absence de court-circuit (multimètre en mode continuité) :
- VMOT → GND : doit se comporter comme un condensateur, pas comme un court-circuit
- VDD → GND : résistance > 1kΩ
- Vérifier la polarité du condensateur électrolytique C1
- Vérifier les connexions moteur (résistance de 2 à 6Ω par bobine)
Premier power-up
Mise sous tension en 4 étapes
Étape 1 : Test logique seul**
- Alimenter uniquement VDD (3.3V depuis l’ESP32), sans VMOT
- Vérifier VDD = 3.3V sur le connecteur
- Le driver ne doit pas chauffer
Étape 2 : Réglage Vref**
- Toujours avec seulement VDD alimenté
- Mesurer entre la vis du potentiomètre et GND
- Ajuster à la valeur cible (voir formule Vref)
Étape 3 : Test VMOT sans moteur**
- Alimenter VMOT (12V) avec une alimentation à courant limité (< 500mA)
- Le driver ne doit pas chauffer sans moteur connecté
- Envoyer quelques impulsions STEP depuis l’ESP32 : aucune fumée ni odeur
Étape 4 : Test complet avec moteur**
- Connecter le moteur
- Faire tourner le moteur pendant 30 secondes
- Toucher le driver : tiède (< 60°C) = normal
- Trop chaud pour être tenu (> 80°C) = courant trop élevé ou dissipation insuffisante
Le A4988 coupe automatiquement à 150°C. Si cela arrive régulièrement, réduisez le courant (Vref) de 20% ou améliorez la dissipation thermique (dissipateur, ventilateur, plan de cuivre plus grand).
Dépannage
Le moteur ne tourne pas
Checklist diagnostic
- RESET et SLEEP sont-ils reliés ensemble ou à 3.3V ?
- EN est-il à LOW (actif) ? (souvent inversé par erreur)
- VMOT est-il bien alimenté (8-35V) ?
- VDD est-il bien à 3.3V ?
- Le condensateur 100µF est-il présent et correctement câblé ?
- Vref est-il > 0V ? (sinon le courant est nul et le moteur reste bloqué)
- Tester avec un code blink sur STEP_PIN pour vérifier que le signal arrive bien
Le moteur vibre sans tourner
Causes et solutions
- Bobines inversées : Inverser les deux fils d’une bobine (1A↔1B ou 2A↔2B)
- Courant trop faible : Augmenter Vref de 10% et retester
- Vitesse trop rapide : Augmenter le délai entre steps (minimum 500µs en full step)
- Alimentation insuffisante : Vérifier que la PSU peut fournir au moins 1.5A sous 12V
- Mauvaise identification des bobines : Mesurer avec un multimètre — les fils d’une même bobine ont une résistance de 2 à 6Ω entre eux
Le driver chauffe trop
Réduire la température
- Réduire Vref de 20% (courant inutilement élevé ?)
- Coller un dissipateur thermique sur la puce
- Ajouter un flux d’air (ventilateur 40mm)
- Utiliser un mode de microstepping plus élevé (moins de pertes par commutation)
- Mettre le driver en SLEEP quand le moteur ne bouge pas
Bruit et vibrations excessives
Réduire le bruit moteur
Le A4988 est naturellement plus bruyant que les drivers de la gamme TMC.
Ces techniques permettent d’atténuer le bruit :
- Passer en 1/16 step : réduction significative du bruit à basse vitesse
- Réduire le courant : moins de courant = moins de vibrations magnétiques
- Accélération douce : éviter les démarrages brutaux
- Fréquence de découpage : impossible à modifier sur le A4988 (fixée par ROSC)
Si le bruit est critique pour votre application, considérez un driver TMC2209 ou TMC2208 qui offrent un mode silencieux (StealthChop).
Ressources et documentation
Datasheets officielles
Bibliothèques
Conclusion
Le A4988 est un driver incontournable pour débuter avec les moteurs pas-à-pas. Associé à l’ESP32, il offre une base solide pour des projets connectés, avec la possibilité de contrôler le moteur à distance via WiFi ou Bluetooth.
Points clés à retenir
- Condensateur 100µF sur VMOT : absolument indispensable, protège le driver
- RESET et SLEEP doivent être reliés ensemble ou à 3.3V pour activer le driver
- Vref se règle avec un multimètre : Vref = Imax × 8 × Rsense
- Dissipation thermique : prévoir un dissipateur pour des courants > 0.8A en continu
- ESP32 : 3.3V logique, compatible avec le VDD du A4988 (3.0V - 5.5V)
Prochaines étapes
Maintenant que vous maîtrisez le A4988 avec l’ESP32, explorez :
- Le driver DRV8825 : courant plus élevé (2.2A), microstepping jusqu’à 1/32
- Le driver TMC2209 : mode silencieux (StealthChop), configuration UART, StallGuard
- La bibliothèque AccelStepper pour gérer plusieurs moteurs simultanément
Vous avez maintenant toutes les clés pour intégrer le driver A4988 dans vos projets ESP32, du prototype sur breadboard à l’intégration PCB. N’hésitez pas à expérimenter et à partager vos réalisations !