Les moteurs pas à pas

\partImg{Les moteurs pas-à-pas}{\rootImages/img.jpg}{0.4}

Présentation

\newcommand{\pap}{moteur pas-à-pas~}
\newcommand{\paps}{moteurs pas-à-pas~}
Les \pap sont utilisés lorsqu’on souhaite un asservissement en position d’un axe de rotation avec une précision inégalée par
les servomoteurs.
\index{asservissement}

Constitution

Les \pap sont constitués de :

  • Plusieurs bobines (un pôle forme une paire de bobines)
  • Un aimant qui sert d’axe de rotation

Les types de \pap

  • \pap à phase bipolaire
  • Figure – \pap bipolaire
  • \pap à phases unipolaires
  • Figure – \pap unipolaires
  • \pap à reluctance variable (non abordés ici)

Principe

En faisant varier le champ électromagnétique des différentes phases, on peut faire varier la position angulaire de l’aimant.

Exemples avec phases bipolaires

En alimentant une paire de phases avec une tension positif, l’aimant se place dans l’alignement du champ électromagnétique
formé par la paire de phase.
En alimentant la paire de phase avec une tension négative, l’aimant se place dans le sens contraire.

Figure – Pas 1
Figure – Pas 2
Figure – Pas 3

Exemples avec phases unipolaires

Figure – Pas 1
Figure – Pas 2
Figure – Pas 3

Les moteurs possèdent plus de phases car un débattement de 45° est vite limité.

Figure – Un intérieur de moteur

Les \pap unipolaires présentent l’avantage de faire circuler un courant positif dans le circuit de commande.
Ils sont donc plus simples à mettre en oeuvre mais ils nécessitent plus de bobinage.

Commande des \paps

Moteurs unipolaires

Les \pap unipolaires ont besoins d’être contrôlés via un circuit adaptés, le plus connu est le \lbl{blue}{REF}{ULN2803}

Figure – Driver ULN2803

Pour les moteurs unipolaires, il faut mettre une des phases à la masse pour faire circuler le courant dans la phase [note]
On constate sur la figure suivante un montage Darlington : deux transistors NPN forme un seul transistor dont le coefficient
\(\(\beta\)\) est le produit de chacun des coefficients \(\(\beta\)\) de chaque transistor.
Cela permet de contrôler des charges avec très peu de courant de commande. [note]}

Figure – Contrôle d’une phase
Figure – Driver de controle

Moteurs bipolaires

On a vu qu’il fallait inverser la tension de commande au borne des bobines. Pour cela on peut utiliser le montage en pont en H.

Figure – Structure du pont en H
  • En activant S1 et S4 (fermeture du circuit), la charge est parcourue par un courant allant de gauche à droite
  • En activant S2 et S3 (fermeture du circuit), la charge est parcourue par un courant allant de droite à gauche

Et qui dit inversion de courant dit inversion de tension. Notre objectif est atteint, nous pouvons mettre des tensions positives
et négatives aux bornes des phases de nos moteurs.
Ce principe est également utilisé pour contrôler les moteurs à courant continu
On peut utiliser le circuit \lbl{blue}{REF}{L298}

Figure – Un pont en H intégré

Avantages et inconvénients des \paps

  • Très grande précision en boucle ouverte [note]
  • Couple élevé en bas régime
  • Plus lent qu’un servomoteur
  • Complexité de mise en oeuvre

Domaines d’application

  • Imprimantes
  • Machines CNC

Comment distinguer les différents types de moteurs ?

  • 2 fils = moteur à courant continue
  • 3 fils = servomoteurs
  • 4 fils = \pap bipolaire
  • 5 fils = \pap unipolaire

Exemples

Mise en pratique avec Arduino

Nous utiliserons un \pap 28BYJ-48 de type unipolaire.

Figure – Le moteur 28BYJ-48

Les caractéristiques sont les suivantes :

  • Nombre de pas : 2048
  • Tension d’alimentation : 5V

Pour augmenter le nombre de pas, on ajoute un train d’engrenage.

Figure – Une augmentation du nombre de pas

Liste du matériel

  • Carte Arduino Uno
  • Driver ULN2803
  • Moteur \pap 28BYJ-48 ou équivalent
  • Câbles

Branchements

Nous utiliserons les broches 8, 9, 10 et 11 et l’alimentation 5V du moteur sera fournie par la broche +5V de l’Arduino

  • D1 sur IN1
  • D2 sur IN3
  • D5 sur IN2
  • D6 sur IN4
  • Vin sur Vcc
  • Gnd sur Gnd
Figure – Schéma Arduino

Code Arduino

Ce code fait tourner le moteur d’un tour, attend 2 secondes puis fait un tour dans l’autre sens avec un délai de 2s.


#include  //Inclusion de la bibliothèque Stepper
int nbPas = 2048; //Nombre de pas pour le moteur 28BYJ-48
#define IN1 8 //Broche IN1
#define IN2 9 //Broche IN2
#define IN3 10 //Broche IN3
#define IN4 11 //Broche IN4
Stepper moteur(nbPas, IN1, IN3, IN2, IN4); //Création de l'objet moteur

void setup() {
moteur.setSpeed(10); //On définit la vitesse à 10 tr/min
}//Fin setup

void loop() {
moteur.step(nbPas); //On avance de nbPas pas, c'est à dire un tour complet (sens horaire)
delay(2000); //pause de 2s
moteur.step(-nbPas); //On avance de -nbPas pas, c'est à dire un tour complet (sens anti-horaire)
delay(2000); //pause de 2s
}//Fin loop

Mise en pratique avec ESP8266

Nous utiliserons le même \pap 28BYJ-48

Liste du matériel

  • Carte ESP8266 NodeMCU (ESP-12)
  • Figure – ESP12 NodeMCU

    Cette carte fait partie de la famille des ESP8266 et se programme directement avec l’Éditeur Arduino.
    L’installation des bibliothèques pour l’ESP12 est détaillée en annexe du document.

  • Driver ULN2803
  • Moteur \pap 28BYJ-48 ou équivalent (\pap unipolaire)
  • Câbles

Branchements

Les numéros des broches sont différents sur les cartes ESP812 (modèle NodeMCU).
Voici les équivalences des broches entre le code et l’emplacement physique.

Figure – Broches ESP12

Nous utiliserons les broches D1, D2, D5 et D6 et l’alimentation 5V du moteur sera fournie par la broche Vin de l’ESP12

  • D1 sur IN1
  • D2 sur IN3
  • D5 sur IN2
  • D6 sur IN4
  • Vin sur Vcc
  • Gnd sur Gnd
Figure – Schéma ESP12

Code ESP12

Ce code fait tourner le moteur d’un tour, attend 2 secondes puis fait un tour dans l’autre sens avec un délai de 2s.


  #include  //Inclusion de la bibliothèque Stepper

int nbPas = 2048; //Nombre de pas pour le moteur 28BYJ-48

#define IN1 D1 //Broche IN1
#define IN2 D5 //Broche IN2
#define IN3 D2 //Broche IN3
#define IN4 D6 //Broche IN4

Stepper moteur(nbPas, IN1, IN3, IN2, IN4); //Création de l'objet moteur

void setup() {

moteur.setSpeed(10); //On définit la vitesse à 10 tr/min

}//Fin setup

void loop() {

moteur.step(nbPas); //On avance de nbPas pas, c'est à dire un tour complet (sens horaire)
delay(2000); //pause de 2s
moteur.step(-nbPas); //On avance de -nbPas pas, c'est à dire un tour complet (sens anti-horaire)
delay(2000); //pause de 2s

}//Fin loop