Comment utiliser un moteur pas à pas avec une Arduino ? 👨💻
Lors de vos expériences avec la carte de développement Arduino vous allez peut-être vouloir commander un moteur pas à pas. Très utilisé en robotique, dans les
imprimantes classiques ou les imprimantes 3D, disque dur, le moteur pas à pas offre une grande précision de mouvement. Pour comprendre le principe de fonctionnement du moteur
pas à pas, je vous en montrerai deux types : le moteur bipolaire et le moteur unipolaire. Découvrez comment brancher le moteur pas à pas et le commander avec une arduino à
l'aide de la séquence de commande adaptée au type de moteur. Dans cet article je vous explique comment utiliser le moteur pas à pas avec l'arduino et
un circuit intégré L293D.
Si vous voulez en savoir plus sur le module de commande L293D,
consultez cet article sur le moteur à courant continu.
Le moteur pas à pas fait parti des nombreuses technologies de moteur existantes. Il existe de nombreux types de moteurs car les applications dans lesquelles on les
utilise sont à chaque fois différente : type d'alimentation, besoin d'une vitesse élevée, variation de vitesse, nécessité de couple ou de précision, etc.
Chaque technologie de moteur présente ses avantages et ses inconvénients,
il est donc nécessaire de déterminer un moteur adapté à son application.
Parmi les avantages du moteur pas à pas, on notera la précision que l'on peut obtenir quand il tourne et la
facilité de déterminer le nombre de tours ou pas effectués grâce à sa commande par impulsion. Il est également aisé de varier la vitesse du moteur en modifiant la
fréquence d'alimentation des bobines.
Par contre, parmi ses inconvénients on peut noter le fait que sa vitesse maximale n'est pas élevée ou encore que son principe de commande
est plus compliqué qu'un moteur à courant continu.
Il existe différents types de moteur pas à pas : à aimant permanent, à réluctance variable et l'hybride. Dans chacun de ces types de moteurs pas à pas le principe de
global de fonctionnement est le même, pour faire tourner le moteur on doit créer un champ magnétique dans les bobines du stator, ainsi on peut faire tourner le rotor
en déplaçant le champ magnétique en alternant les bobines alimentées.
⚙️ Principe du moteur pas à pas à aimant permanent :
Pour vous expliquer plus en détail le fonctionnement du moteur pas à pas, je vais m'appuyer sur le plus simple des trois en l'occurrence le moteur pas à pas à aimant permanent.
Sur ce moteur, le rotor (la partie qui tourne sur laquelle est placée l'axe du moteur) est composé d'un aimant permanent.
Sur le stator (la partie fixe qui ne tourne pas), on trouve 4 bobines réparties par paires, soit deux paires de bobines réparties sur le stator du moteur.
Les deux schémas de principe ci-dessous présentent un moteur pas à pas unipolaire et un moteur pas à pas bipolaire, les deux à aimant permanent.
Le moteur pas à pas bipolaire :
L'animation ci-dessous présente une vue schématisée et simplifiée d'un moteur pas à pas bipolaire qui est équipé de 24 pas. Ce qui signifie qu'il doit réalisier 24mouvements afin de faire un tour complet (360°).
Chaque pas du moteur correspond donc à déplacement angulaire de 15°.
Le moteur pas à pas unipolaire :
Sur l'animation ci-dessous, le moteur pas à pas unipolaire est doté de 24 pas. C'est-à-dire qu'il doit effectuer 24mouvements afin de faire un seul tour (360°).
Chaque pas du moteur correspond donc à déplacement angulaire de 15°.
Pour faire tourner le moteur pas à pas unipolaire, il faut donc alterner dans un ordre bien précis les bobines afin de faire tourner le champ magnétique qui entraînera en rotation le rotor.
Voici la séquence d'un moteur pas à pas unipolaire pour qu'il tourne dans le sens horaire ️↩️ : A - B - C - D.
Le chronogramme ci-dessous présente la séquence correspondante à 4pas du moteur soit 4 × 15 = 60° (moteur 24 pas.)
Il suffit de poursuivre en boucle cette séquence pour faire tourner le moteur.
Pour changer le sens de rotation du moteur, il suffit d'inverser la séquence précédente, on obtient donc D - C - B - A, afin
d'inverser le champ magnétique générée dans les bobines, ainsi le rotor tournera en sens inverse ↪.
🔎 Identification des phases d'un moteur unipolaire à 5 fils :
Pour repérer le type de moteur, il suffit de regarder le nombre de fils (phases) en sortie du moteur, quand le moteur présente 5 fils d'alimentation c'est un
moteur unipolaire, s'il présente 4 fils d'alimentation c'est un moteur bipolaire.
Sur le moteur pas à pas unipolaire, chaque bobine est reliée au point commun qui doit être lui-même connecté à la masse de l'alimentation (GND).
Lorsqu'il n'est pas possible d'identifier à l'oeil nu le principe de raccordement d'un moteur unipolaire 5 fils, il faut utiliser un ohmmètre afin de mesurer l'impédance (résistance en Ohms) des bobines, afin de repérer le point commun à relier à la masse (GND).
Relier votre ohmmètre sur les deux premiers fils ou bornes du moteur et relever la valeur mesurée, dans mon cas 59Ω.
Déplacer une seule pointe de touche du multimètre et noter de nouveau la mesure, dans mon cas 29,6Ω (les deux valeurs mesurées sont différentes).
On peut observer que la seconde valeur correspond à la moitié de la première mesure.
Lors de la première mesure j'étais donc aux bornes de deux bobines placée en série, alors que sur cette mesure je suis entre la bobine et le commun. Il ne reste plus qu'à
réaliser une dernière mesure pour localiser où est le commun du moteur.
Grâce à cette dernière mesure, il est possible d'affirmer que le commun de ce moteur 5 fils est au centre.
Chaque bobine de ce moteur a donc une impédance d'environ 29,5Ω et lorsque l'on met deux bobines en série
Lorsque vous mesurez la valeur double de la résistance, c'est que vous êtes aux bornes de deux bobines en série. Si vous visualisez une valeur simple de l'impédance, c'est que vous êtes aux bornes
d'une seule bobine et le point commun.
Sur le moteur que j'ai utilisé (PM35L-048-HPD4moteur imprimante HP), le point commun est donc placé au centre des 4 fils.
Retrouvez également le moteur pas à pas dans le projet de porte automatique pour poulailler, dans ce cas, le moteur permet d'entraîner la porte pour l'ouverture et la fermeture d'un poulailler en fonction de la luminosité extérieure.
Si vous souhaitez reproduire les expérimentations présentées dans ce tutoriel, vous aurez besoin du matériel ci-dessous :
• Une Arduino ou compatible et son câble USB.
• Des conducteurs pour plaque d'essai ou fils de prototypage (mâle/mâle, mâle/femelle, femelle/femelle).
• Une platine d'expérimentation ou plaque d'essaibreadboard (optionnel).
• Un module L293D (Mini 4-Channel Motor Drive Shield L293D).
• Un moteur pas à pas unipolaire.
Le circuit intégré L293D peut également servir à la commande d'un moteur à courant continu (voir guide d'utilisation du L293D).
Dans cette application, le driver moteur L293D permettra grâce à ces deux ponts en H de piloter par alternance les 4 bobines du moteur pas à pas unipolaire.
Schémas de raccordement du moteur pas à pas
Le moteur pas à pas unipolaire :
Pour commander facilement le moteur pas à pas unipolaire, j'utilise un circuit intégré L293D qui permettra d'alimenter en
12V les bobines du moteur dans le bon ordre afin de le faire tourner dans n'importe quel sens.
Pour les essais, j'utilise des bornes de connexions Wago automatiques afin de faire les ponts simplement sans utiliser de platine d'expérimentation.
• Les pins2 | 7 | 10 | 15 du L293D permettent de recevoir les
ordres de commande (séquence) et ce à partir des sorties logiques de l'arduino (j'utiliserai les broches 8 | 9 | 10 | 11).
• Les broches3 | 6 | 11 | 14 du L293D sont reliées aux bobines du moteur pas à pas afin de générer le déplacement
champ magnétique nécessaire à la rotation du moteur pas à pas (j'utiliserai le repérage de bobines A | B | C | D).
Une autre alternative au raccordement d'un moteur pas à pas est d'utiliser un Motor Shield
de type L298P, plus pratique que le contrôleur L293D ci-dessus, il suffit de l'imbriquer sur l'Arduino afin
de réaliser les liaisons Arduino -> Shield Moteur.
Pour piloter le moteur pas à pas unipolaire voici une base de programme utilisant le mode Wave permettant de :
• Faire tourner le moteur dans les deux sens de rotation.
• Choisir la vitesse de rotation du moteur.
• Choisir le nombre de tours que doit faire le moteur.
C'est la commande la plus simple du moteur pas à pas unipolaire, elle permet de consommer moins car une seule bobine est alimentée à la fois (mode Wave), mais le couple moteur est moins important.
int MotorPin1= 8; // Déclaration commande bobine 1 moteur
int MotorPin2= 9; // Déclaration commande bobine B moteur
int MotorPin3= 10; // Déclaration commande bobine C moteur
int MotorPin4= 11; // Déclaration commande bobine D moteur
int Tour=0; // Déclaration variable nombre de tour
int delayTime=8; // Déclaration variable vitesse du moteur
void setup() {
Serial.begin(9600); // Ouverture du port série et debit de communication fixé à 9600 bauds
pinMode(MotorPin1, OUTPUT); // Affectation de la sortie digitale n°8
pinMode(MotorPin2, OUTPUT); // Affectation de la sortie digitale n°9
pinMode(MotorPin3, OUTPUT); // Affectation de la sortie digitale n°10
pinMode(MotorPin4, OUTPUT); // Affectation de la sortie digitale n°11
Faire_1_tour_sens_normal(); // Lancer la fonction sens normal
}
void Faire_1_tour_sens_normal(){
for (Tour = 0; Tour < 12; Tour++){ // Boucle pour faire 1 tour complet (Moteur 48pas/4 = 12)
digitalWrite(MotorPin1,HIGH); // Alimentation bobine A du moteur unipolaire
digitalWrite(MotorPin2,LOW); // Bobine B du moteur hors tension
digitalWrite(MotorPin3,LOW); // Bobine C du moteur hors tension
digitalWrite(MotorPin4,LOW); // Bobine D du moteur hors tension
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,LOW); // Bobine A du moteur hors tension
digitalWrite(MotorPin2,HIGH); // Alimentation bobine B du moteur unipolaire
digitalWrite(MotorPin3,LOW); // Bobine C du moteur hors tension
digitalWrite(MotorPin4,LOW); // Bobine D du moteur hors tension
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,LOW); // Bobine A du moteur hors tension
digitalWrite(MotorPin2,LOW); // Bobine B du moteur hors tension
digitalWrite(MotorPin3,HIGH); // Alimentation bobine C du moteur unipolaire
digitalWrite(MotorPin4,LOW); // Bobine D du moteur hors tension
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,LOW); // Bobine A du moteur hors tension
digitalWrite(MotorPin2,LOW); // Bobine B du moteur hors tension
digitalWrite(MotorPin3,LOW); // Bobine C du moteur hors tension
digitalWrite(MotorPin4,HIGH); // Alimentation bobine D du moteur unipolaire
delay(delayTime); // Temporisation choix de la vitesse
}
}
Pour inverser le sens de rotation du moteur, il suffit d'inverser l'ordre d'alimentation des bobines du moteur.
Voici le pogramme Arduino permettant de réaliser 10 tours complets dans l'autre sens.
int MotorPin1= 8; // Déclaration commande bobine A moteur
int MotorPin2= 9; // Déclaration commande bobine B moteur
int MotorPin3= 10; // Déclaration commande bobine C moteur
int MotorPin4= 11; // Déclaration commande bobine D moteur
int Tour=0; // Déclaration variable nombre de tour
int delayTime=8; // Déclaration variable vitesse du moteur
void setup() {
Serial.begin(9600); // Ouverture du port série et debit de communication fixé à 9600 bauds
pinMode(MotorPin1, OUTPUT); // Affectation de la sortie digitale n°8
pinMode(MotorPin2, OUTPUT); // Affectation de la sortie digitale n°9
pinMode(MotorPin3, OUTPUT); // Affectation de la sortie digitale n°10
pinMode(MotorPin4, OUTPUT); // Affectation de la sortie digitale n°11
Faire_10_tours_sens_inverse(); // Lancer la fonction sens inverse
}
void Faire_10_tours_sens_inverse(){
for (Tour = 0; Tour < 120; Tour++){ // Boucle pour faire 10 tours complets (Moteur 48pas/4 = 12)
digitalWrite(MotorPin1,LOW); // Bobine A du moteur hors tension
digitalWrite(MotorPin2,LOW); // Bobine B du moteur hors tension
digitalWrite(MotorPin3,LOW); // Bobine C du moteur hors tension
digitalWrite(MotorPin4,HIGH); // Alimentation bobine D du moteur unipolaire
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,LOW); // Bobine A du moteur hors tension
digitalWrite(MotorPin2,LOW); // Bobine B du moteur hors tension
digitalWrite(MotorPin3,HIGH); // Alimentation bobine C du moteur unipolaire
digitalWrite(MotorPin4,LOW); // Bobine D du moteur hors tension
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,LOW); // Bobine A du moteur hors tension
digitalWrite(MotorPin2,HIGH); // Alimentation bobine B du moteur unipolaire
digitalWrite(MotorPin3,LOW); // Bobine C du moteur hors tension
digitalWrite(MotorPin4,LOW); // Bobine D du moteur hors tension
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,HIGH); // Alimentation bobine A du moteur unipolaire
digitalWrite(MotorPin2,LOW); // Bobine B du moteur hors tension
digitalWrite(MotorPin3,LOW); // Bobine C du moteur hors tension
digitalWrite(MotorPin4,LOW); // Bobine D du moteur hors tension
delay(delayTime); // Temporisation choix de la vitesse
}
}
Voici le chronogramme correspondant à la séquence d'alimentation des bobines du moteur dans le sens inverse pour changer le sens de rotation du moteur pas à pas.
Le moteur pas à pas unipolaire | Full Step :
Voici une base de programme utilisant le mode Full Step offrant un couple moteur plus important car deux bobines sont alimentées à la fois. Ce mode de fonctionnement entraîne un courant deux fois plus important
du fait que deux bobines sont alimentées en même temps.
int MotorPin1= 8; // Déclaration commande bobine A moteur
int MotorPin2= 9; // Déclaration commande bobine B moteur
int MotorPin3= 10; // Déclaration commande bobine C moteur
int MotorPin4= 11; // Déclaration commande bobine D moteur
int Tour=0; // Déclaration variable nombre de tour
int delayTime=8; // Déclaration variable vitesse du moteur
void setup() {
Serial.begin(9600); // Ouverture du port série et debit de communication fixé à 9600 bauds
pinMode(MotorPin1, OUTPUT); // Affectation de la sortie digitale n°8
pinMode(MotorPin2, OUTPUT); // Affectation de la sortie digitale n°9
pinMode(MotorPin3, OUTPUT); // Affectation de la sortie digitale n°10
pinMode(MotorPin4, OUTPUT); // Affectation de la sortie digitale n°11
Faire_1_tour_sens_normal(); // Lancer la fonction sens normal
}
void Faire_1_tour_sens_normal(){
for (Tour = 0; Tour < 12; Tour++){ // Boucle pour faire 1 tour complet (Moteur 48pas/4 = 12)
digitalWrite(MotorPin1,HIGH); // Alimentation bobine A du moteur unipolaire
digitalWrite(MotorPin2,HIGH); // Alimentation bobine B du moteur unipolaire
digitalWrite(MotorPin3,LOW); // Bobine C du moteur hors tension
digitalWrite(MotorPin4,LOW); // Bobine D du moteur hors tension
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,LOW); // Bobine A du moteur hors tension
digitalWrite(MotorPin2,HIGH); // Alimentation bobine B du moteur unipolaire
digitalWrite(MotorPin3,HIGH); // Alimentation bobine C du moteur unipolaire
digitalWrite(MotorPin4,LOW); // Bobine D du moteur hors tension
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,LOW); // Bobine A du moteur hors tension
digitalWrite(MotorPin2,LOW); // Bobine B du moteur hors tension
digitalWrite(MotorPin3,HIGH); // Alimentation bobine C du moteur unipolaire
digitalWrite(MotorPin4,HIGH); // Alimentation bobine D du moteur unipolaire
delay(delayTime); // Temporisation choix de la vitesse
digitalWrite(MotorPin1,HIGH); // Alimentation bobine A du moteur unipolaire
digitalWrite(MotorPin2,LOW); // Bobine B du moteur hors tension
digitalWrite(MotorPin3,LOW); // Bobine C du moteur hors tension
digitalWrite(MotorPin4,HIGH); // Alimentation bobine D du moteur unipolaire
delay(delayTime); // Temporisation choix de la vitesse
}
}
Le programme de la séquence ci-dessus correspond aux chronogrammes présentés en dessous :
Activités pratiques (BAC PRO MELEC)
Retrouvez ci-dessous les activités pratiques (travaux pratiques ou projet) en rapport avec le moteur pas à pas pour la formation en lycée professionnelBAC PRO MELEC.
📌 Politique de Confidentialité |
Cet article peut inclure du contenu sponsorisé et rémunérédes, des liens d'affiliation, notamment des liens Amazon (programme Partenaire Amazon EU) me permettant de toucher une commission au pourcentage sur la vente des produits affiliés (sans augmentation de prix pour l'acheteur).
❤️💟 Si vous aimez les articles et pour soutenir le développement du site n'hésitez pas à partager sur les réseaux sociaux