Nous allons voir dans ce tutoriel comment piloter un moteur pas-à-pas bipolaire à l’aide d’un driver A4988. Ce tutoriel est compatible avec les drivers de moteur pas-à-pas couramment utiliser dans les projets de fraiseuse numérique ou imprimante 3D (DRV8825, SilentStepStick, etc.).
Matériel
- Arduino UNO
- Stepper driver A4988
- Câble USB A mâle vers USB B mâle
Principe de fonctionnement
Les drivers de moteur pas-à-pas permettent de piloter efficacement les moteurs en n’utilisant que deux signaux de contrôle STEP et DIR. Le nombre de pulsations envoyés au driver correspond au nombre de pas effectué, la fréquence des pulsation à la vitesse du moteur et le signal dir correspond au sens de rotation du moteur. Le module A4988 s’occupe d’envoyer la séquence aux deux bobines du moteur en fonction des commandes reçues en entrée.
Spécifications techniques A4988
Minimum operating voltage | 8 V |
Maximum operating voltage | 35 V |
Continuous current per phase | 1.2 A |
Maximum current per phase | 2 A |
Minimum logic voltage | 3 V |
Maximum logic voltage | 5.5 V |
Microstep resolution | full, 1/2, 1/4, 1/8 and 1/16 |
Reverse voltage protection? | No |
Dimensions | 15.5 × 20.5 mm (0.6″ × 0.8″) |
Schéma
Avant de connecter votre moteur au driver, veuillez régler correctement le limiteur de courant. Pour cela, il faut:
- alimenter l’Arduino et le Shield avec la tension Moteur.
- Puis, placer un voltmètre entre le potentiomètre et la masse GND
- Tourner le potentiomètre à l’aide d’un tournevis jusqu’à obtenir la valeur qui suit la règle suivante.
MaxCurrent=Vref x 2.5
Exemple:
Si la valeur de courant est 1A la valeur affichée sur le multimètre doit être égale à 0.4V
MaxCurrent=1.0A –> Vref = 0.4V
Il est possible de modifier la résolution des pas du driver pour plus de précision. Cette configuration est définie en passant les broches M0,M1 et M2 à HAUT ou BAS en suivant le tableau logique qui suit.
MS1 | MS2 | MS3 | Résolution Microstepping |
Low | Low | Low | Pas complet (full step) |
High | Low | Low | 1/2 pas |
Low | High | Low | 1/4 de pas |
High | High | Low | 1/8 ième de pas |
High | High | High | 1/16 ième de pas |
Code
Pour piloter le driver de moteur pas-à-pas, il nous suffit d’envoyer un état HAUT ou BAS sur la broche DIR et une pulsation sur la broche STEP.
const int stepPin = 2; const int dirPin = 3; const int stepsPerRev=200; int pulseWidthMicros = 100; // microseconds int millisBtwnSteps = 1000; void setup() { Serial.begin(9600); pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); Serial.println(F("A4988 Initialized")); } void loop() { Serial.println(F("Running clockwise")); digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction // Makes 200 pulses for making one full cycle rotation for (int i = 0; i < stepsPerRev; i++) { digitalWrite(stepPin, HIGH); delayMicroseconds(pulseWidthMicros); digitalWrite(stepPin, LOW); delayMicroseconds(millisBtwnSteps); } delay(1000); // One second delay Serial.println(F("Running counter-clockwise")); digitalWrite(dirPin, LOW); //Changes the rotations direction // Makes 400 pulses for making two full cycle rotation for (int i = 0; i < 2*stepsPerRev; i++) { digitalWrite(stepPin, HIGH); delayMicroseconds(pulseWidthMicros); digitalWrite(stepPin, LOW); delayMicroseconds(millisBtwnSteps); } delay(1000); }
Pour plus de fonctionnalités, vous pouvez utiliser la librairie AccelStepper.h
Applications
- Piloter un moteur pas-à-pas
- Piloter plusieurs moteurs grâce à un CNC Shield