Site icon AranaCorp

Utilisation d’un contrôleur de moteur pas-à-pas DRV8825

Nous allons voir dans ce tutoriel comment piloter un moteur pas-à-pas bipolaire à l’aide d’un driver DRV8825. 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

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 DRV8825 s’occupe d’envoyer la séquence aux deux bobines du moteur en fonction des commandes reçues en entrée.

Spécifications techniques DRV8825

Minimum operating voltage8.2 V
Maximum operating voltage45 V
Continuous current per phase1.5 A
Maximum current per phase2.2 A
Minimum logic voltage2.5 V
Maximum logic voltage5.25 V
Microstep resolutionfull, 1/2, 1/4, 1/8, 1/16 and 1/32
Reverse voltage protection?No
Dimensions15.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:

MaxCurrent=Vref x 2 

Exemple:

Si la valeur de courant est 1A la valeur affichée sur le multimètre doit être égale à 0.5V

MaxCurrent=1.0A –> Vref = 0.5V

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.

M0M1M2Microstep resolution
LowLowLowFull step
HighLowLow1/2 step
LowHighLow1/4 step
HighHighLow1/8 step
LowLowHigh1/16 step
HighLowHigh1/32 step
LowHighHigh1/32 step
HighHighHigh1/32 step

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

Sources

Quitter la version mobile