> >

tutoriel sur le moteur pas à pas Comment utiliser un moteur pas à pas avec une Arduino ? 👨‍💻


Présentation du moteur pas à pas avec l'arduino et L293D

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.

Sommaire :

Principe du moteur pas à pas | stepper motor
Le moteur pas à pas bipolaire
Le moteur pas à pas unipolaire
Quel est le matériel utilisé dans ce tutoriel ?
Schéma de raccordement du moteur pas à pas
Programme arduino pour moteur pas à pas


Présentation du moteur pas à pas Principe du moteur pas à pas | stepper motor :

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.
Vue de différents moteurs pas à pas ou stepper motor
Vue de différents types de moteur pas à pas
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.
Vue schématisé en coupe d'un moteur pas-à-pas unipolaire
Schéma de principe d'un moteur pas à pas à aimant permanent (unipolaire)
Vue schématisé en coupe d'un moteur pas-à-pas bipolaire
Schéma de principe d'un moteur pas à pas à aimant permanent (bipolaire)


Présentation du moteur pas à pas 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 24 mouvements afin de faire un tour complet (360°). Chaque pas du moteur correspond donc à déplacement angulaire de 15°.


Présentation du moteur pas à pas 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 24 mouvements 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 à 4 pas du moteur soit 4 × 15 = 60° (moteur 24 pas.)
séquence de déplacement de 4 pas d'un moteur pas à pas unipolaire 5 fils
Séquence alimentation des bobines pour un déplacement de 4 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.
identification du type de moteur pas à pas en fonction du nombre de fils
Identification du type de moteur pas à pas
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).
identification des bornes d'un moteur pas à pas unipolaire PM35L-048-HPD4 à 5 fils
Identification des 5 fils du moteurs pas à pas unipolaire

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Ω.
Mesure à l'ohmmètre pour identifier les phases du moteur pas à pas unipolaire
Mesure 1 : Ohmmètre entre deux bobines R1=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.
Mesure à l'ohmmètre pour identifier les phases du moteur pas à pas unipolaire
Mesure 2 : Ohmmètre aux bornes d'une bobine R2=29,52Ω
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
Mesure à l'ohmmètre pour identifier les phases du moteur pas à pas unipolaire
Mesure 3 : Ohmmètre aux bornes de 2 bobines R3=59Ω
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-HPD4 moteur imprimante HP), le point commun est donc placé au centre des 4 fils.
Représentation des bobines du moteur pas à pas unipolaire à 5 fils PM35L-048-HPD4
Vue des 5 fils en sortie du moteur avec les 4 bobines du stator (Pas à pas unipolaire)
Tutoriel fabrication d'une porte de poulailler automatique

Retrouvez l'utilisation d'un moteur pas à pas dans ce guide de réalisation d'une porte de poulaille automatique.




Présentation du moteur pas à pas Quel est le matériel utilisé dans ce tutoriel ?

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'essai breadboard (optionnel).
• Un module L293D (Mini 4-Channel Motor Drive Shield L293D).
• Un moteur pas à pas unipolaire.
équipement nécessaire pour réaliser le tutoriel sur le moteur pas à pas unipolaire
Matériel utilisé dans le tutoriel

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.



Présentation du moteur pas à pas 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.
vue du raccordement d'un moteur pas à pas unipolaire
Raccordement moteur pas à pas unipolaire | L293D
Pour les essais, j'utilise des bornes de connexions Wago automatiques afin de faire les ponts simplement sans utiliser de platine d'expérimentation.
schéma électrique commande moteur pas à pas unipolaire avec circuit intégré L293D
Schéma électrique L293D | Moteur pas à pas unipolaire
• Les pins 2 | 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 broches 3 | 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).
schéma de branchement du moteur pas à pas unipolaire 5 fils
Raccordement d'un moteur pas à pas unipolaire 5 fils

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.
tutoriel motor shield L298P deek-robot

Moteur Shield L298P avec moteur à courant continu ou moteur pas à pas




Présentation du moteur pas à pas Programme arduino pour moteur pas à pas

Le moteur pas à pas unipolaire | Mode Wave :

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.

séquence pour faire tourner le moteur sur 4 pas
Séquence alimentation des bobines pour un déplacement de 4 pas dans le sens normal

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.
séquence pour faire tourner le moteur sur 4 pas en sens inverse
Séquence alimentation des bobines pour un déplacement de 4 pas dans le sens inverse

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 :
Séquence Full Step commande moteur pas à pas unipolaire
Chronogramme de la séquence full step | Moteur pas à pas unipolaire



guide de fabrication d'un portier automatique pour poulailler 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 professionnel BAC PRO MELEC.

Activité pratique de préparatio à la réalisation d'une porte automatique pour poulailler

TP MELEC U2 | Préparation de l'automatisation d'une porte de poulailler.



Si vous aimez les articles, n'hésitez pas à faire vos achats sur Amazon via ce lien, ils me permettront de recevoir une commission grâce au programme Partenaires Amazon EU.