Arduino - Contrôle d'un moteur pas à pas avec le pilote L298N
Dans ce tutoriel, nous allons apprendre :
- Comment utiliser le pilote L298N pour contrôler un moteur pas à pas bipolaire
- Comment contrôler la position d'un moteur pas à pas
- Comment contrôler la vitesse d'un moteur pas à pas
- Comment contrôler la direction d'un moteur pas à pas
Le tutoriel peut être appliqué à tout type de moteur pas à pas bipolaire (4 fils). Le tutoriel prendra comme exemple un moteur pas à pas NEMA 17.
Préparation du matériel
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
À propos du moteur pas à pas
Il existe deux types populaires de moteurs pas à pas :
- bipolaire : ce type de moteur comporte 4 fils
- unipolaire : ce type de moteur comporte 5 fils ou 6 fils.
Pour un moteur pas à pas unipolaire à 6 fils, nous pouvons utiliser quatre des six fils et le contrôler comme un moteur pas à pas bipolaire.
Pour le moteur pas à pas unipolaire à 5 fils, consultez Arduino - contrôler le moteur pas à pas 28BYJ-48 avec le pilote ULN2003
Ce tutoriel se concentre uniquement sur le moteur pas à pas bipolaire.
Brochage du moteur pas à pas bipolaire
Le brochage du moteur pas à pas bipolaire comporte 4 broches. Selon les fabricants, les broches du moteur ont plusieurs dénominations. Le tableau ci-dessous montre certaines dénominations de broches largement utilisées :
PIN NO | Naming 1 | Naming 2 | Naming 3 |
---|---|---|---|
1 | A+ | A | A |
2 | A- | A | C |
3 | B+ | B | B |
4 | B- | B | D |
L'ordre des broches, la dénomination des fils et la couleur des fils peuvent varier selon les fabricants. Vous devez lire la fiche technique ou le manuel pour voir la correspondance entre la couleur des fils et le nom des broches. L'image ci-dessus montre également les spécifications de deux moteurs différents avec des dénominations et des couleurs de fils différentes.
Étapes par Révolution
La spécification du moteur indique le degré par pas (appelons cela DEG_PER_STEP). Selon la méthode de contrôle, le nombre de pas par révolution (appelons cela STEP_PER_REVOLUTION) est calculé comme suit dans le tableau suivant :
Control method | Steps per Revolution | Real degree per step |
---|---|---|
Full-step | STEP_PER_REVOLUTION = 360 / DEG_PER_STEP | DEG_PER_STEP |
Half-step | STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 | DEG_PER_STEP / 2 |
Micro-step (1/n) | STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n | DEG_PER_STEP / n |
Par exemple, si la fiche technique du moteur indique 1,8 degré/étape :
Control method | Steps per Revolution | Real degree per step |
---|---|---|
Full-step | 200 steps/revolution | 1.8° |
Half-step | 400 steps/revolution | 0.9° |
Micro-step (1/n) | (200 * n) steps/revolution | (1.8 / n)° |
Comment contrôler un moteur pas à pas en utilisant Arduino
Arduino peut générer des signaux pour contrôler le moteur pas à pas. Cependant, les signaux provenant de l'Arduino n'ont pas assez de tension et/ou de courant requis par le moteur pas à pas. Par conséquent, nous avons besoin d'un pilote matériel entre l'Arduino et le moteur pas à pas. Le pilote effectue deux tâches :
- Amplifier les signaux de contrôle de l'Arduino (courant et tension)
- Protéger l'Arduino des hautes tensions et courants utilisés pour alimenter le moteur pas à pas.
Il existe de nombreux types de pilotes matériels qui peuvent être utilisés pour contrôler les moteurs pas à pas. Le pilote L298N est l'un des pilotes matériels les plus utilisés pour contrôler les moteurs pas à pas.
À propos du pilote L298N
Un seul pilote L298N peut être utilisé pour contrôler deux moteurs à courant continu ou un moteur pas à pas. Dans ce tutoriel, nous apprenons à l'utiliser pour contrôler le moteur pas à pas.
Brochage du pilote L298N
Le pilote L298N possède 11 broches et trois cavaliers :
- Broche VCC : alimente le moteur. Cela peut être entre 5 et 35V.
- Broche GND : est une broche de masse commune, doit être connectée à GND (0V).
- Broche 5V : alimente le module L298N. Elle peut être alimentée par 5V depuis un Arduino.
- Broches IN1, IN2, IN3, IN4 : sont connectées aux broches de l'Arduino pour recevoir le signal de commande pour contrôler le moteur pas à pas.
- Broches OUT1, OUT2, OUT3, OUT4 : sont connectées au moteur pas à pas.
- Cavaliers ENA, ENB : sont utilisés pour activer le moteur pas à pas. Vous devez laisser les cavaliers ENA & ENB en place.
- Cavalier 5V-EN : si nous laissons le cavalier 5V-EN en place, l'alimentation pour le module L298N provient de VCC, nous n'avons pas besoin de connecter quoi que ce soit à la broche 5V. Si nous retirons le cavalier 5V-EN, nous devons alimenter le module L298N via une broche 5V.
Comme décrit ci-dessus, le pilote L298N dispose de deux alimentations d'entrée:
- Une pour le moteur pas à pas (broches VCC et GND) : de 5 à 35V.
- Une pour le fonctionnement interne du module L298N (broches 5V et GND) : de 5 à 7V. Si le cavalier 5V-EN est laissé en place, nous n'avons pas besoin de connecter cette broche à quoi que ce soit.
Diagramme de câblage
This image is created using Fritzing. Click to enlarge image
※ NOTE THAT:
- Veuillez laisser les trois cavaliers en place sur le module L298N (dans le cas où l'alimentation du moteur est ≤ 12V)
- L'ordre des broches sur les moteurs pas à pas peut varier selon les fabricants. Veuillez vérifier le tableau ci-dessous pour un câblage correct.
Tableau de câblage entre Arduino et le pilote L298N
Arduino pins | L298N pins |
---|---|
7 | IN1 |
6 | IN2 |
5 | IN3 |
4 | IN4 |
Tableau de câblage entre le pilote L298N et le moteur pas à pas
Important !: Veuillez ne pas tenir compte de l'ordre des fils du moteur pas à pas sur l'image du schéma de câblage ci-dessus. C'est juste un exemple. L'ordre des broches sur les moteurs pas à pas peut varier selon les fabricants. Assurez-vous que votre câblage suit le tableau ci-dessous.
L298N pins | Stepper motor pins | Or | Or |
---|---|---|---|
OUT1 | A+ | A | A |
OUT2 | A- | A | C |
OUT3 | B+ | B | B |
OUT4 | B- | B | D |
Avant d'acheter un moteur pas à pas, nous vous recommandons de consulter la fiche technique, les spécifications ou le manuel du moteur pas à pas. Assurez-vous qu'ils fournissent la correspondance entre la couleur et le nom des broches. Par exemple, ce moteur pas à pas fournit la correspondance comme l'image ci-dessous :
Sur la base de cette correspondance, le tableau de câblage devient :
L298N pins | stepper motor pins | wire color |
---|---|---|
OUT1 | A | black wire |
OUT2 | C | green wire |
OUT3 | B | red wire |
OUT4 | D | blue wire |
※ NOTE THAT:
Dans tous les tableaux de câblage ci-dessus entre le moteur pas à pas et le pilote L298N, nous pouvons échanger OUT1 avec OUT2, OUT3 avec OUT4. Par conséquent, il y a d'autres façons de réaliser le câblage. Cependant, si nous les échangeons, le sens de rotation des moteurs peut être modifié (dans le sens des aiguilles d'une montre en sens antihoraire, et vice versa).
Comment contrôler un moteur pas à pas avec un pilote L298N.
Contrôler un moteur pas à pas n'est pas une tâche simple, surtout lorsque nous voulons le contrôler de manière non bloquante. Heureusement, grâce à la bibliothèque AccelStepper, contrôler le moteur pas à pas devient un jeu d'enfant.
L'IDE Arduino comprend également une bibliothèque Stepper intégrée. Cependant, nous ne vous recommandons pas d'utiliser cette bibliothèque car :
- La bibliothèque fournit une fonction bloquante. Cela signifie qu'elle empêche l'Arduino de réaliser d'autres tâches pendant qu'elle contrôle le moteur pas à pas.
- Elle ne dispose pas de fonctions suffisantes.
Au lieu de cela, nous vous recommandons d'utiliser la bibliothèque AccelStepper. Cette bibliothèque prend en charge :
- Accélération
- Décélération.
- Pilotage en pas entiers et demi-pas.
- Commande simultanée de plusieurs moteurs pas à pas, avec avancement indépendant et simultané pour chaque moteur.
- Inconvénient : Ne supporte pas le pilotage en micro-pas.
Comment contrôler la position d'un moteur pas à pas via le pilote L298N
Nous pouvons déplacer le moteur pas à pas à la position souhaitée en utilisant :
※ NOTE THAT:
La fonction stepper.moveTo() est non bloquante. C'est un excellent point de la bibliothèque. Cependant, nous devons faire attention lorsque nous utilisons cette fonction :
- Appelez 'stepper.run()' aussi fréquemment que possible. Il doit être appelé dans la fonction void loop().
- N'utilisez PAS la fonction delay() lorsque le moteur est en mouvement.
- Il ne faut PAS utiliser les fonctions Serial.print() et Serial.println() lorsque le moteur est en mouvement. Ces fonctions ralentissent le mouvement du moteur pas à pas.
Comment contrôler la vitesse d'un moteur pas à pas via le pilote L298N
Nous pouvons contrôler non seulement la vitesse mais aussi l'accélération et la décélération en utilisant quelques fonctions simples.
Comment contrôler la direction d'un moteur pas à pas via le pilote L298N
Si vous réalisez le câblage comme ci-dessus, le moteur tournera dans :
- Sens horaire : si nous commandons le moteur d'une position à une position plus élevée (Incrémentation de position)
- Sens antihoraire : si nous commandons le moteur d'une position à une position plus basse (Décrémentation de position)
Par exemple :
- Si la position actuelle est 100 et que nous réglons le moteur à 200, le moteur tourne dans le sens des aiguilles d'une montre.
- Si la position actuelle est -200 et que nous réglons le moteur à -100, le moteur tourne dans le sens des aiguilles d'une montre.
- Si la position actuelle est 200 et que nous réglons le moteur à 100, le moteur tourne dans le sens inverse des aiguilles d'une montre.
- Si la position actuelle est -100 et que nous réglons le moteur à -200, le moteur tourne dans le sens inverse des aiguilles d'une montre.
※ NOTE THAT:
Comme mentionné précédemment, si vous échangez OUT1 avec OUT2, ou OUT3 avec OUT4, l'augmentation de la position peut être dans le sens antihoraire et la diminution de la position peut être dans le sens horaire.
Comment arrêter un moteur pas à pas
- Le moteur pas à pas s'arrêtera automatiquement après avoir atteint la position souhaitée.
- Le moteur pas à pas peut être forcé de s'arrêter immédiatement à tout moment en utilisant la fonction stepper.stop().
Code Arduino - Code pour moteur pas à pas
Le code ci-dessous fait:
- Faites tourner le moteur d'une révolution dans le sens des aiguilles d'une montre
- Arrêtez le moteur 5 secondes
- Faites tourner le moteur d'une révolution dans le sens contraire des aiguilles d'une montre
- Arrêtez le moteur 5 secondes
- Ce processus est répété encore et encore
Étapes rapides
- Naviguez jusqu'à l'icône Libraries dans la barre de gauche de l'IDE Arduino.
- Recherchez "AccelStepper", puis trouvez la bibliothèque AccelStepper de Mike McCauley
- Cliquez sur le bouton Install pour installer la bibliothèque AccelStepper.
- Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
- Cliquez sur le bouton Upload dans l'IDE Arduino pour charger le code sur Arduino
- Vous verrez :
- Le moteur pas à pas effectue une révolution dans le sens horaire
- Le moteur pas à pas s'arrête 5 secondes
- Le moteur pas à pas effectue une révolution dans le sens antihoraire
- Le moteur pas à pas s'arrête 5 secondes
- Le processus ci-dessus est répété en boucle.
- Vérifiez le résultat sur le Moniteur Série
Explication du code
Lisez l'explication ligne par ligne dans les lignes de commentaire du code source !