14 Mars 2014
Arduino leçon 17 : moteurs pas-à-pas

le principe
moteur unipolaire
C'est le type de moteur utilisé actuellement. Chaque branche du solénoïde comprend deux enroulement dont un seul est
actif à la fois, permettant de présenter à l'aimant permanent du rotor soit un pôle Nord, soit un pôle Sud.
Par exemple dans ce schéma chaque enroulement présentera au rotor un pôle différent selon la broche reliée à la masse.

Les électroaimants sont alimentés sur commande et permettent de bloquer le moteur sur une position
fixe ou de le faire tourner d'1/4 de tour à la fois.
disposition réelle :

Dans le boîtier du moteur, un engrenage démultiplie l'angle de rotation.
Un pas correspond donc à 1/4 de tour du rotor mais à une toute petite fraction de tour de l'axe de sortie.
Il semble qu'il faut 4096 pas pour faire un tour.

1er montage
D'abord, on oublie le moteur et on construit un chenillard de 4 led sur les broches 2 à 5 avec un delay(250) pour chacune.
ATTENTION : contrairement à notre habitude, on met les led entre le +5 et Arduino.
La mise au point se fait en 2 temps :
- on met dans la boucle un délai assez long pour avoir le temps de visualiser l'éclairement et l'extinction de chaque led
- on mettra ensuite un délai beaucoup plus court adapté à nos besoins.
REMARQUE : entre chaque ordre envoyé au moteur, il faut lui laisser le temps d'exécuter l'ordre. Le délai ne sera jamais de moins de 10 ms.
/* pas_a_pas.ino
essai moteur pas à pas on relie les broches 2 à 5 d'Arduino aux leds */ byte numPin; void setup() { for ( numpin=2 ; numpin<6 ; nupin++){ pinMode ( i, OUTPUT) ; digitalWrite( numpin, HIGH); } numPin = 2; } void loop() { digitalWrite( numPin, LOW); delay(250); // qu'on remplacera par 10 après mise au point digitalWrite( numPin, HIGH); numPin++; if (numPin==6) { numPin=2; } } |
2ème montage
Dans le montage précédent, on ajoute 4 fils partant des broches d'Arduino et arrivant au connecteur du moteur. Le fil rouge est relié au +5.
On commence avec un délai de 250 ms puis on passe à 10 ms.
Ça marche à vide, mais sans aucun couple. Les sorties d'Arduino n'ont pas assez de puissance.
3ème montage
On peut relier 4 sorties d'Arduino à des transistors de puissance qui commandent les entrées du moteur.
Le circuit intégré ULN2003 en contient 7 dans la même puce. On en utilise 4 et on ignore les 3 autres.

Les 4 entrées sont relièes à la carte Arduino, les 4 sorties et l'alim au moteur par le connecteur blanc.
Les led servent à visualiser la sortie alimentée à chaque instant.
L'alimentation de la carte se fait par les broches en bas de la photo. On les relie au +5 et à la GND d'Arduino.
Utilisez ce composant sans modifier votre programme sauf le délai qui revient à 250 ms.
Regardez ce qui se passe pour les led de la carte.
Que se passe-t-il quand 3 led sont éclairées et 1 éteinte ?
Réponse : 3 bobines sont alimentées en même temps. Deux agissent en senc contraire d'où gaspillage d'énergie et échauffement du moteur. |
modification du programme
Le problème qu'on vient de découvrir est dû au rôle des transistors intégrés dans le ULN2003 : ils inversent les tensions.
On va faire une modification pour en tenir compte.
On déclare une variable qu'on mettra à 0 ou à 1 selon le type de montage. Ça évite de changer toutes les lignes qui commandent une sortie d'Arduino.
/* pas_a_pas_direct.ino
utilisation du moteur pas à pas avec la variable "direct" */ #define direct 1 // directive pour le compilateur. Pas de "=" ni de ";" byte numPin; void setup() { for ( numpin=2 ; numpin<6 ; nupin++){ pinMode ( i, OUTPUT) ; digitalWrite( numpin, direct); } numPin = 2; } void loop() { digitalWrite( numPin, 1-direct ); delay(250); // qu'on remplacera par 10 après mise au point digitalWrite( numPin, direct); numPin++; if (numPin==6) { numPin=2; } } |
On constate que le moteur a plus de couple qu'avant, mais il n'est toujours pas très puissant.
4ème montage
on utilise une alimentation extérieure
Par rapport au montage précédent, la seule différence est que les 2 fils d'alimentation de la petite carte ne viennent plus
d'Arduino mais d'une alimentation extérieure réglée sur 5 volts parce que c'est la tention réclamée par le moteur. On peut lire
sur le connecteur de la carte driver qu'elle peut fonctionner avec des tensions de 5 à 12 Volts.
La différence de couple est remarquable.
5ème montage
POur éviter d'avoir 3 bobines actives en même temps, on remplace notre carte driver par un autre modélè appelé double pont en H. Il évite d'envoyer au moteur 2 flux contraires sur la même branche.
La logique interne de ce driver est différente de celle du 1er utilisé, mais il s'utilise exactement de la même manière et avec le même programme.

branchements du double pont
On utilise une alim extérieure donnant la tension réclamée par le moteur,
le + va sur VCC du connecteur et sur le(s) fil(s) d'alimentation du moteur
la masse de l'alim sur la borne GND du connecteur du bas.
dans certains cas, il peut être utile de relier cette masse à celle d'Arduino. En général c'est inutile.
les entrées (petit connecteur male) vont sur les broches 2 à 5 d'Arduino
les sorties (connecteurs latéraux) vont sur les phases du moteur.
cablage des phases du driver vers le moteur 28BYJ-48 :
out1 rose
out2 orange
out3 jaune
out4 bleu
Quelques compléments
Les ordres qu'Arduino peut envoyer à un moteur "normal" sont
- démarre et - arrête toi Le seul ordre qu'Arduino peut envoyer à un moteur pas-à-pas est - avance d'un pas mais cet ordre peut être envoyé un très grand nombre de fois. |
Double pont en H
Voici des liens pour mieux le comprendre
premier lien
deuxième lien
troisième lien
Moteur pas-à-pas
On peut augmenter le couple du moteur en activant 2 bobinages à la fois.
Dans le dessin ci-dessous, la bobine A met le moteur en position 1, la bobone B le met en position 3.
Les 2 ensemble le placent en position 2 avec plus de force puisque 2 bobines agissent en même temps. C'est le deuxième tableau
On peut aussi augmenter la précision en utilisant les tous les demi-pas donc les pas du tableau 1
et ceux du tableau 2. On a alors 8 pas par tour. C'est visible sur le tableau 3 qui est la réunion des deux premiers.
![]() |
![]() |
Séquence de commande normale pour 4 pas entiers |
![]() |
Séquence de commande pour 4 pas entiers avec couple fort | |
![]() |
Séquence de commande pour 8 demi-pas (couple irrégulier) |
Ces schémas viennent de cette page sur laquelle vous pouvez trouver plus de détails.
un peu de software
Nous savons déjà que nous écrivons des programmes source en langage C et que ceux ci sont transformés
en langage objet qui est une suite de codes binaires compris par la carte Arduino.
L'ensemble de programmes qui effectue cette transformation est le compilateur.
Le préprocesseur
C'est le premier de ces programmes. Il s'exécute avant la traduction. Il lit chaque ligne pour en vérifier la syntaxe et s'arrête quand une
ligne est incompréhensible. Il a aussi un autre rôle : gérer les lignes qui commencent par un #.
# include<machin.h> le préprocesseur va chercher machin.h
dans la bibliothèque et l'ajoute à votre programme avant
la compilation.
# include"truc.h" idem, mais il cherche truc.h dans votre répertoire au lieu d'aller dans la bibliothèque.
Rappelez vous l'utilisation de mesNotes.h .
# define chouette 88 dans tout le programme source, il remplace la variable chouette par la valeur 88.
haut de la page

