L’entreprise ADAFRUIT implantée à New York s’est spécialisée notamment dans la conception et la fourniture de petits modules pour les cartes Arduino et propose divers produits dont un shield spécifique pour piloter des petits moteurs. Comme montré sur la Fig.150, cette carte est très polyvalente, et l’on peut aussi-bien y brancher des moteurs à courant continu, des moteurs pas à pas ou des servomoteurs. Le nombre de moteurs pilotables simultanément dépend des types de motorisations utilisées. Voir de la Fiche n°55 à la Fiche n°58.
Caractéristiques de la carte d’interface :
• Deux connexions pour des servomoteurs 5V. (Liaisons directes sur les E/S d’Arduino.)
• Quatre ponts en H gérés par des circuits intégrés L293D capables de fournir 0,6 A par pont (1.2A crête) pourvus d’une protection d’arrêt thermique et de diodes internes « de roue libre ». Ces ponts peuvent fonctionner avec des tensions allant de 4.5Vcc à 25Vcc.
• Gère dans les deux sens de rotation possibles jusqu’à quatre moteurs à courant continu avec sélection individuelle de la vitesse sur 8 bits.
• Pilote jusqu’à deux moteurs pas à pas (Unipolaires ou bipolaires) avec une seule bobine, double
bobinage ou enroulements entrelacés.
• Les résistances de charge des moteurs sont désactivées pendant la mise sous tension.
• Un bornier sérieux permet d’établir aisément les liaisons électriques avec les moteurs. (18-26AWG)
• Le bouton de réinitialisation d’Arduino est déporté sur le circuit imprimé.
• Deux broches et un cavalier permettent d’isoler l’alimentation externe des moteurs de la logique.
• Possibilité de brancher simultanément deux servomoteurs sous 5Vcc et :
4 moteurs à courant continu ou,
2 moteurs pas à pas ou,
2 moteurs à courant continu et un moteur pas à pas.
Entrées/Sorties d’Arduino utilisées :
• Les six broches des entrées analogiques sont totalement disponibles.
• Les deux broches des E/S numériques 2 et 13 sont totalement disponibles.
Les broches suivantes ne sont utilisées que si un moteur s’y trouve en cours d’utilisation :
Broche numérique 11: Moteur DC n ° 1 / Pas à pas n ° 1 (Activation / contrôle de vitesse)
Broche numérique 3: Moteur DC n ° 2 / Pas à pas n ° 1 (Activation / contrôle de vitesse)
Broche numérique 5: Moteur DC n ° 3 / Pas à pas n ° 2 (Activation / contrôle de vitesse)
Broche numérique 6: Moteur DC n ° 4 / Pas à pas n ° 2 (Activation / contrôle de vitesse)
Les broche numérique 4, 7, 8 et 12 sont utilisés pour commander les moteurs DC ou pas à pas via la logique de pilotage du circuit intégré 74HC595.
Les broches suivantes ne sont utilisées que si un servomoteur y est en cours d’utilisation :
Broche PWM numérique 9 : Commande du connecteur SERVO_2.
Broche PWM numérique 10 : Commande du connecteur SER1.
NOTE : Une LED s’allume (Voir Fig.152) si l’alimentation de puissance est effective. Si elle n’est pas allumée, les moteurs DC ou les moteurs pas à pas ne fonctionneront pas. Les ports des servomoteurs sont en 5Vcc et n’utilisent pas l’alimentation extérieure. Ce module ne peut pas piloter des moteurs à faible tension prévus pour 3Vcc. Il est prévu pour une tension de 6Vcc ou plus. Les moteurs DC génèrent beaucoup de parasites tant magnétiques qu’électriques pouvant perturber Arduino. Il est donc fortement conseillé de les alimenter par la ligne extérieure et de munir chaque moteur de trois condensateurs d’antiparasitage : Un condensateur en parallèle sur le moteur, deux entre les broches d’alimentation et la masse.
Alimentation des moteurs :
Si on désire n’utiliser qu’une seule source pour fournir l’énergie électrique à Arduino et au module de gestion des moteurs, il suffit de brancher une alimentation externe sur la prise prévue à cet effet 1. Dans ce cas on n’utilise pas le connecteur 4 et le cavalier 3 doit être en place sur son connecteur. Cette méthode présente toutefois un certain nombre d’inconvénients. Le courant fourni par la broche Vin en 2 est limité par les caractéristiques de la diode D. (Vin est également désignée par UTN sur certains schémas électroniques d’Arduino.) De plus, les parasites générés par les moteurs électriques peuvent transiter vers Arduino via le régulateur intégré fournissant le +5Vcc au microcontrôleur. Cette solution n’est donc acceptable que si les moteurs utilisés sont de faible puissance et ne consomment qu’un courant modéré. Il est préférable d’alimenter Arduino soit par sa ligne USB soit par une alimentation externe, et utiliser pour l’interface de motorisation une alimentation à part branchée sur le connecteur 4. Dans ce cas il faut retirer le cavalier 3 de son support. Noter que les servomoteurs sont reliés directement au +5Vcc d’Arduino par la broche 5. On ne peut utiliser les connecteurs dédiés 6 que si les modèles utilisés restent dans des fourchettes de consommation faibles. Dès qu’ils deviennent plus exigeants en courant électriques, il faut comme pour les moteurs DC les alimenter par un « bloc » extérieur.
SHIELD_Adafruit_1 : Deux servomoteurs.
Comme montré sur les schémas Fig.151 et Fig.152, le petit circuit imprimé d’ADAFRUIT n’apporte strictement rien de plus à la carte Arduino en terme d’électronique. Il ne fait que relier les connecteurs SER1 et SERVO_2 à la masse, au +5Vcc d’Arduino et aux sorties binaires B9 et B10 en respectant l’ordre des fils sur les fiches à trois broches. Comme les servomoteurs puisent leur énergie directement sur le +5Vcc d’Arduino il importe d’en vérifier la consommation. Si elle n’est pas compatible avec les possibilités de la prise USB il faut alimenter les moteurs à part. La programmation est donc banale et utilise les informations données à ce sujet dans la page 57 et les deux Fiche n°46 et Fiche n°47. Le démonstrateur SHIELD_Adafruit_1.ino pilote deux servomoteurs en leur faisant balayer l’intégralité de leur plage angulaire en continu dans les deux sens de rotation possibles. Les moteurs sont pilotés angulairement, et le croquis fait appel à la librarie <Servo.h> qui naturellement doit être installée. Inutile de la rechercher dans <! BIBLIOTHEQUES> car elle est native dans l’IDE.
Noter que tous les démonstrateurs relatifs à ce module électronique sont regroupés dans le sous-répertoire nommé
<! SHIELD Motorisation ADAFRUIT> le point d’exclamation servant à le placer en tête de listage dans l’explorateur de Window’s. Le schéma électronique du module ainsi que sa notice de montage sont disponible dans le dossier des démonstrateurs. Voir le document Caractéristiques des petits moteurs DC.pdf.
Adafruit_2 : Utilisation des moteurs à courant continu.
Comme c’est les cas presque chaque fois qu’un composant spécifique ou qu’une carte électronique spécialisée est disponible sur le marché, une ou des bibliothèques sont développées et mises en ligne pour le public. Le shield ADAFRUIT n’échappe pas à cet adage et plusieurs librairies le concernant sont disponibles sur internet. En particulier AFMotor.h (Fournie dans le dossier <! BIBLIOTHEQUES>.) est dédiée à ce module d’interfaçage et couvre déjà pas mal les besoins de la programmation des petites motorisations. Bien que l’électronique autorise le branchement d’un moteur par opérateur de commutation, (Cas où un seul sens de rotation est suffisant.) seuls les liaisons en H sont prises en compte par la bibliothèque AFMotor.h, mais avec pour corollaire la possibilité d’imposer à convenance un sens de rotation. On peut dans ces conditions gérer simultanément jusqu’à quatre petits moteurs à courant continu. Le programme SHIELD_Adafruit_2.ino est un exemple de mise en œuvre de la carte électronique qui fait tourner quatre moteurs (Le maximum possible) dans un seul sens pour simplifier le programme, mais avec une rampe de variation de vitesse en accélération et ralentissement. Le programme SHIELD_Adafruit_3.ino est une variante du précédent qui ne fait tourner qu’un seul moteur sur le port #4, mais dans les deux sens, toujours avec une rampe de variation de vitesse en accélération et ralentissement.
Adafruit_4 : Utilisation élémentaire des moteurs PAS à PAS.
Contrairement aux caractéristiques des moteurs à courant continu qui n’influencent pas réellement la programmation, le codage pour les moteurs PAS À PAS est directement fonction de leur résolution. La procédure setSpeed(RPM) qui gère la vitesse de rotation utilise la résolution du moteur utilisé. Outre les problèmes liés au courant consommé, il faudra tenir compte du nombre de pas par tour, raison pour laquelle l’encadré donné en bas de cette page précise les caractéristiques des moteurs utilisés en local. On peut noter au passage qu’un moteur PAS À PAS tel que le 28BYJ-48 n’est pas utilisable car le point milieu des deux bobinages est commun et perturberait la commutation en H.
Par élémentaire il faut traduire : Pas de pilotage simultané de deux moteurs PAS À PAS et pas de rampes d’accélération ou de ralentissement. En effet, la bibliothèque AFMotor.h ne prévoit pas de procédure pour traiter les rampes d’accélération ou de ralentissement. Par ailleurs le pilotage simultané de deux moteurs pas à pas est laissé à l’initiative du programmeur par usage de la procédure onestep. Le programme SHIELD_Adafruit_4.ino est un exemple de pilotage avec les quatre modes possibles qui assure la gestion d’un moteur PAS À PAS avec une boucle qui enchaîne les divers modes SINGLE, DOUBLE, INTERLEAVE et MICROSTEP avec une pause release d’une seconde entre chaque sens de rotation au cours desquels le moteur effectue un tour complet. Le programme est écrit pour le modèle STP-42D144 à 200 pas par tour. On peut ainsi expérimenter les comportements qui en résultent. La vitesse programmée est de 15 tours par minute. Comme on peut l’observer dans le listage partiel du programme donné en page 64, le nombre de pas et le mode de commutation sont passés en paramètre dans une procédure gérant un cycle complet.
Adafruit_5 : Pilotage simultané de deux moteurs PAS à PAS.
Démonstrateur dédié, SHIELD_Adafruit_5.ino réalise le pilotage simultané de deux moteurs pas à pas dans une boucle qui fait appel à la méthode spécifique onestep d’AFMotor.h.
Ce programme est simplifié car les deux moteurs sont de même résolution et effectuent une rotation d’amplitude égale. Mais il reste facile de transposer ce logiciel de base à des moteurs de résolutions distinctes ou si la rotation angulaire désirée est différente sur chaque unité.
Noter que l’instruction onestep() ne permet pas d’utiliser le mode MICROSTEP et la vitesse n’est plus gérée par la procédure setSpeed(RPM). Il faut donc imposer un petit délai entre chaque pas pour gérer la vitesse. Dans ce programme la constante DELAI permet de tester la rapidité maximale permise sur les moteurs PAS À PAS connectés à l’interface de puissance d’ADAFRUIT. On peut observer que le MODE est passé en paramètre dans la procédure qui gère la rotation des moteurs, mais également le sens de rotation par le truchement d’un booléen.
Adafruit_6 : Mixage des trois types de motorisation possibles.
Comme précisé sur la fiche dédiée au SHIELD d’ADAFRUIT on peut à convenance piloter plusieurs types de moteurs simultanément, la combinatoire étant fonction des modèles connectés. La bibliothèque AFMotor.h ne permet pas de brancher des charges « à sens de rotation unique » comme montré sur la Fig.4 de la Fiche n°56. Toutefois, sans faire appel à des programmes plus élaborés, il est déjà possible d’agencer des combinaisons très étoffées. Le programme SHIELD_Adafruit_6.ino en est un exemple dans lequel tous les opérateurs en H du module électronique sont mis à contribution. Un seul SERVOMOTEUR a été intégré à ce petit projet pour alléger « la lisibilité » du programme, mais naturellement en brancher un deuxième reste élémentaire. ATTENTION : Une alimentation EXTérieure est fortement conseillée sur +VS vu le nombre de moteurs.
En exemple complémentaire sur l’utilisation des moteurs PAS à PAS aller consulter le petit projet de la Fig.154 rangé dans le dossier nommé <Raporteur à LASER>.
La suite est ici.