A4988, un breakout pour commander des moteurs pas-à-pas... même en microstepping

Nous sommes content d'offrir un excellent produit, efficace, compatible avec les breadboard et cartes de prototypage.
Le meilleur c'est qu'il est simplissime d'utilisation avec un Arduino (et même un Raspberry Pi) et dispose d'une documentation complète en Français.
Ce module n'a rien à envier à EasyDriver 

Présentation
StepStick 4988 disponible chez MCHobby
Cette carte breakout supporte une pilote Microstepping Allegro A4988 (DMOS) incluant une protection contre les sur-courants (overcurrent). C'est le contrôleur de moteur pas-à-pas que l'on retrouve sur les cartes de commande des imprimantes 3D comme OrdBot Hadron.
Ce contrôleur, aussi communément appelé "StepStick" ou "Stepper Driver", permet de contrôler des moteurs pas-à-pas bipolaires en micro-stepping avec un maximum de 2 ampères par bobine (attention aux conditions de dissipation de chaleur!!!).

Voici quelques caractéristiques clés de ce breakout:
  • Interface de contrôle de pas et de direction simplissime.
  • Un empattement de 2.54mm.
    Vraiment idéal pour une utilisation avec breadboard et plaque de prototypage.
  • 5 résolutions différentes de pas (voir notre wiki pour la configuration):
    • Pas complet (dit 'full step')
    • 1/2 pas
    • 1/4 de pas
    • 1/8 ième de pas
    • 1/16 ième de pas
  • Contrôle en courant ajustable - un potentiomètre permet de fixer le courant maximum à l'aide d'un potentiomètre. Cela permet d'utiliser une tension supérieure à celle recommandée par le moteur (puisque le courant est limité) et permet ainsi d'atteindre un débit de pas plus élevé (et donc une vitesse plus élevée)
  • Une commande de hachage intelligente qui sélectionne automatiquement le bon mode de décroissance de courant (fast decay = baisse/chute rapide du courant OU slow decay = chute lente)
  • Protection (arrêt) en cas de surchauffe, sous tension, surchage/sur-courant/court-circuit. Utile en cas de surcharge/blocage moteur (car le courant va monté en flèche, ce qui doit provoquer la mise en protection).
Brochage du breakout A4988.
Voir notre tutoriel pour plus de détails sur le brochage

Brancher le module sur un Arduino
Branchement d'un StepStick A4988 avec un moteur pas-à-pas bipolaire
Voir notre tutoriel pour d'autres codifications de couleur
Le code de commande Arduino
// --- Commande d'un StepStick/Driver A4988 ----------------------
// A4988_Test.ino
//
// Commande d'un moteur pas-à-pas à l'aide d'un pilote A4988 avec
//     Arduino.
//
// Un projet www.mchobby.be (vente de kit et composant)
// Meurisse D. - Licence CC-SA-BY
//
// Un tutoriel http://mchobby.be/wiki/index.php?title=A4988
// Ou Acheter un StepStick A4988
//    http://mchobby.be/PrestaShop/product.php?id_product=349
//

#define pinEnable 13 // Activation du driver/pilote
#define pinStep    9 // Signal de PAS (avancement)
#define pinDir     8 // Direction 


void setup(){
  Serial.begin(9600);
  Serial.println("Test A4988");
  
  pinMode( pinEnable, OUTPUT );
  pinMode( pinDir   , OUTPUT );
  pinMode( pinStep  , OUTPUT );
}

void loop(){
  int i = 0;
  
  digitalWrite( pinDir   , HIGH); // Direction avant
  digitalWrite( pinStep  , LOW);  // Initialisation de la broche step
  
  // Avance de 200 pas
  for( i=0; i < 200; i++){
    Serial.println( i );
    digitalWrite( pinStep, HIGH );
    delay( 10 );
    digitalWrite( pinStep, LOW );
    delay( 10 );
  } 
  
  // Changer de direction
  digitalWrite( pinDir   , LOW); // Direction avant
  
  // Refaire 200 pas dans l'autre sens
  for( i=0; i < 200; i++){
    Serial.println( i );
    digitalWrite( pinStep, HIGH );
    delay( 1 );
    digitalWrite( pinStep, LOW );
    delay( 1 );
  } 
  
  // Pas de step et pas d'ordre... 
  //   l'axe du moteur est donc bloqué 
  Serial.println("Axe bloqué + attendre 5 sec");
  delay( 5000 );
  
  // déblocage de l'axe moteur
  Serial.println("Deblocage axe");
  digitalWrite( pinEnable, HIGH ); // logique inversée
  
  // Fin et blocage du programme
  // Presser reset pour recommander
  Serial.println("Fin de programme");
  while( true );
}

Tutoriel
Notre tutoriel contient de très nombreuses autres informations. De quoi devenir un king avec ce type de module.
Où Acheter

7 commentaires:

  1. Bonjour,
    Peux-t-on piloter un ou deux moteurs courant continu en utilisant les sorties 1a-1b et 2a-2b, comme c'est possible sur d'autre modules?
    Merci

    RépondreSupprimer
    Réponses
    1. Bonjour, ce n'est vraiment pas fait pour contrôler des moteurs à balais. Il y a d'autre produit comme le DRV8833.
      https://shop.mchobby.be/fr/controleur-moteur/499-drv8833-controleur-deux-moteur-continu-3232100004993-pololu.html

      Supprimer
  2. Bonjour,
    J'ai réalisé le montage avec le A4988 tel qu'indiqué, et j'ai utilisé le code de commande ci-dessus. Le tout fonctionne très bien: le moteur fait d'abord un tour dans un sens, lentement, puis dans l'autre sens plus rapidement, ensuite l'axe du moteur est débloqué après 5 secondes, le tout est relancé en appuyant sur reset.
    Mais je ne parviens pas a faire une modification du programme ou à en charger un autre dans l'arduino, comment faut-il faire?
    Merci.

    RépondreSupprimer
    Réponses
    1. depuis le temps vous avez surement trouvé ..
      Le code est pourtant bien documenté ..
      pinDir est pour indiquer le sens de rotation (horaire / anti-horaire - ou droite / gauche - avant / arrière)

      digitalWrite( pinDir , LOW); // Direction avant

      digitalWrite permet de changer la "tension" sur la sortie de l'arduino (Low / HIGH) et change donc le sens de rotation
      -> cette commande ne fait de dire dans quel sens le moteur doit tourner mais de lui dit pas d'incrémenter ses pas (changer de position)

      Pour cela il faut lui donner une instruction "step" pour lui dire de faire un pas (en avant ou en arrière) afin que le moteur "bouge"
      Les instruction de "bouger" sont envoyés par la sortie "pinStep"
      pour envoyer la demande de déplacer d'un pas c'est donc un enchainement "haut bas" qu'il faut faire :

      digitalWrite( pinStep, HIGH );
      delay( 1 );
      digitalWrite( pinStep, LOW );
      delay( 1 );

      La commande delay est là pour "attendre" afin que cela n'aille pas trop vite
      Le 1 est pour la durée (attendre 1 millisecond seconde)

      Supprimer
  3. La page "Tutoriel MCHobby sur le breakout A4988"
    a changée de place pour https://wiki.mchobby.be/index.php?title=A4988 (la structure du site a un peut changée)

    RépondreSupprimer
    Réponses
    1. Bonjour Florian,
      Merci pour tes commentaires :-)
      J'ai aussi corriger les liens vers le wiki.
      Dominique

      Supprimer