Arduino Nano - Moteur pas à pas

Ce tutoriel vous explique comment utiliser un Arduino Nano pour contrôler un moteur pas à pas à l'aide d'un driver L298N. En détail, nous apprendrons :

Le tutoriel est applicable à tous les types de moteurs pas à pas bipolaires à quatre fils. Il utilisera un moteur pas à pas NEMA 17 comme exemple.

Moteur pas à pas Arduino Nano avec driver L298N.

Si vous souhaitez contrôler un autre type de moteur pas à pas, veuillez consulter ce tutoriel Arduino Nano - Moteur Pas à Pas 28BYJ-48.

Préparation du matériel

1×Arduino Nano
1×USB A to Mini-B USB cable
1×Stepper Motor Nema 17
1×L298N Motor Driver Module
1×12V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino Nano
1×(Recommended) Screw Terminal Adapter for Arduino Nano

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du moteur pas à pas

Deux types courants de moteurs pas à pas existent :

  • bipolaire : ce moteur a 4 fils
  • unipolaire : ce moteur a soit 5 soit 6 fils.

Pour un moteur pas à pas unipolaire à 6 fils, nous pouvons utiliser quatre des six fils et le contrôler comme s'il s'agissait d'un moteur pas à pas bipolaire.

Pour un moteur pas à pas unipolaire à 5 fils, consultez le tutoriel Arduino Nano - contrôler le moteur pas à pas 28BYJ-48 avec le pilote ULN2003 pour plus d'informations.

L'accent de ce tutoriel est uniquement mis sur le moteur pas à pas bipolaire.

Brochage du moteur pas à pas bipolaire

Le moteur pas à pas bipolaire possède quatre broches, et les noms de ces broches varient selon le fabricant. Le tableau suivant fournit certains des noms les plus couramment utilisés :

PIN NO Naming 1 Naming 2 Naming 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Brochage du moteur pas à pas bipolaire

L'agencement des broches, les étiquettes attribuées aux fils et les couleurs des fils peuvent varier d'un fabricant à l'autre. Vous devez vérifier la fiche technique ou le manuel pour savoir comment la couleur du fil correspond au nom de la broche. L'image ci-dessus montre également les spécifications de deux moteurs distincts avec un étiquetage et une coloration des fils différents.

Pas par révolution

La spécification du moteur indique la valeur DEG_PER_STEP. En fonction de la technique de contrôle, STEP_PER_REVOLUTION peut être déterminé à partir du 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 une mesure de 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 avec un Arduino Nano

L'Arduino Nano peut générer des signaux pour contrôler le moteur pas à pas, cependant ces signaux n'ont pas la tension et/ou le courant suffisants requis par le moteur pas à pas. Par conséquent, un pilote matériel est nécessaire entre l'Arduino Nano et le moteur pas à pas. Ce pilote a deux fonctions :

  • Pour amplifier les signaux de commande de l'Arduino Nano en termes de courant et de tension.
  • Pour protéger l'Arduino Nano contre le courant élevé et la tension utilisés pour alimenter le moteur pas à pas.

Il existe de nombreux types de pilotes matériels qui peuvent être utilisés pour gérer les moteurs pas à pas. L'un des pilotes matériels les plus populaires pour contrôler les moteurs pas à pas est le pilote L298N.

À propos du pilote L298N

Un pilote L298N peut être utilisé pour contrôler deux moteurs à courant continu ou un moteur pas à pas. Ce tutoriel vous explique comment l'utiliser pour contrôler le moteur pas à pas.

Brochage du pilote L298N

Brochage du pilote L298N

Le pilote L298N possède 11 broches et trois cavaliers :

  • Broche VCC : Elle alimente le moteur et peut varier entre 5 et 35V.
  • Broche GND : C'est une broche de masse commune et doit être connectée à GND (0V).
  • Broche 5V : Elle alimente le module L298N et peut être alimentée par les 5V provenant de l'Arduino Nano.
  • Broches IN1, IN2, IN3, IN4 : Elles sont connectées aux broches de l'Arduino pour recevoir le signal de contrôle afin de commander le moteur pas à pas.
  • Broches OUT1, OUT2, OUT3, OUT4 : Elles sont connectées au moteur pas à pas.
  • Cavaliers ENA, ENB : Ils servent à activer le moteur pas à pas et les deux cavaliers ENA & ENB doivent être en place.
  • Cavalier 5V-EN : S'il est laissé en place, l'alimentation pour le module L298N est tirée de VCC et rien ne doit être connecté à la broche 5V. S'il est retiré, l'alimentation doit être fournie au module L298N via une broche 5V.

Le pilote L298N a deux alimentations d'entrée :

  • Un pour le moteur pas à pas (broches VCC et GND) : de 5 à 35V.
  • Un pour le fonctionnement interne du module L298N (broches 5V et GND) : de 5 à 7V. Si le cavalier 5V-EN est laissé en place, aucune connexion à cette broche n'est nécessaire.

Diagramme de câblage

Schéma de câblage du pilote L298N pour moteur pas à pas Arduino Nano

This image is created using Fritzing. Click to enlarge image

※ NOTE THAT:

  • Conservez les trois cavaliers sur le module L298N dans leurs positions actuelles si l'alimentation du moteur est de 12V ou moins.
  • La disposition des broches sur les moteurs pas à pas peut varier selon les fabricants. Veuillez vous référer au tableau ci-dessous pour le câblage correct.

Tableau de câblage entre Arduino Nano et le driver L298N

Arduino Nano 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 ! Ne prêtez pas attention à l'ordre des fils dans le moteur pas à pas sur le schéma ci-dessus. Il s'agit simplement d'une illustration. L'agencement des broches sur les moteurs pas à pas peut varier selon les fabricants. Assurez-vous que votre câblage suive 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, il est recommandé de consulter la fiche technique, les spécifications ou le manuel du moteur pas à pas. Assurez-vous que l'information contient la correspondance entre la couleur des broches et leur nom. Par exemple, ce moteur pas à pas fournit la correspondance comme on peut le voir dans l'image suivante :

Mappage des couleurs des bobines de moteur pas à pas

En utilisant le mappage, le tableau de câblage est :

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 présentés ci-dessus entre le moteur pas à pas et le pilote L298N, il est possible d'intervertir OUT1 avec OUT2, et OUT3 avec OUT4. Par conséquent, il existe plusieurs manières de réaliser le câblage. Néanmoins, si l'échange est effectué, le sens de rotation des moteurs peut être modifié (de sens horaire à antihoraire, et vice versa).

Comment contrôler un moteur pas à pas avec un pilote L298N.

Contrôler un moteur pas à pas peut être un défi, surtout lorsque nous devons le faire sans blocage. Heureusement, la bibliothèque AccelStepper rend cela très facile.

L'IDE Arduino contient une bibliothèque Stepper intégrée. Néanmoins, nous vous déconseillons d'utiliser cette bibliothèque pour les raisons suivantes :

  • La bibliothèque offre une fonction de blocage. Cela implique que l'Arduino Nano est empêché d'exécuter d'autres tâches pendant qu'il contrôle le moteur pas à pas.
  • Elle ne possède pas de fonctions adéquates.

Au lieu de cela, nous suggérons d'utiliser la bibliothèque AccelStepper. Cette bibliothèque offre:

  • Accélération
  • Décélération
  • Conduite en pas entier et demi-pas
  • Capacité à contrôler plusieurs moteurs pas à pas simultanément, avec des pas concourants individuels pour chaque moteur
  • Inconvénient : Ne permet pas la conduite en micro-pas.

Comment contrôler la position d'un moteur pas à pas via un pilote L298N

Nous pouvons atteindre notre objectif de déplacer le moteur pas à pas à la position souhaitée en utilisant :

stepper.moveTo(desiredPosition); // déplacez le moteur d'une révolution

※ NOTE THAT:

La fonction stepper.moveTo() est non bloquante, ce qui est un grand avantage de la bibliothèque. Cependant, lors de l'utilisation de cette fonction, il y a quelques points à surveiller :

  • Assurez-vous d'appeler 'stepper.run()' aussi souvent que possible, de préférence dans la fonction void loop().
  • Évitez d'utiliser la fonction delay() pendant que le moteur est en mouvement.
  • Ne pas utiliser les fonctions Serial.print() et Serial.println() pendant que le moteur fonctionne, car celles-ci ralentiront le moteur pas à pas.

Comment contrôler la vitesse d'un moteur pas à pas via un pilote L298N

Nous pouvons réguler non seulement la vitesse, mais aussi l'accélération et la décélération, grâce à l'utilisation de quelques fonctions de base.

stepper.setAcceleration(50.0); // définir l'accélération/la décélération stepper.setSpeed(200); // définir la vitesse désirée

Comment contrôler la direction d'un moteur pas à pas via un pilote L298N

Si vous câblez le moteur comme indiqué, il tournera dans le sens :

  • Sens horaire : lors du contrôle du moteur d'une position inférieure à une position supérieure (incrémentation de la position)
  • Sens antihoraire : lors du contrôle du moteur d'une position supérieure à une position inférieure (décrémentation de la position)

Par exemple :

  • Lorsque la position actuelle est de 100 et que le moteur est dirigé vers 200, il tourne dans le sens des aiguilles d'une montre.
  • Si la position actuelle est de -200 et que le moteur est contrôlé à -100, il tourne dans le sens des aiguilles d'une montre.
  • Si la position actuelle est de 200 et que le moteur est régulé à 100, il tourne dans le sens inverse des aiguilles d'une montre.
  • Si la position actuelle est de -100 et que le moteur est géré à -200, il 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 pourrait être antihoraire et la diminution de la position pourrait être horaire.

Comment arrêter un moteur pas à pas

  • Le moteur pas à pas s'arrêtera lorsqu'il atteindra la position souhaitée.
  • Il est également possible de le faire arrêter immédiatement en utilisant la fonction stepper.stop().

Code Arduino Nano - Code moteur pas à pas

Le code suivant :

  • Fait tourner le moteur d'une révolution dans le sens des aiguilles d'une montre
  • Met le moteur en pause pendant 5 secondes
  • Fait tourner le moteur d'une révolution dans le sens inverse des aiguilles d'une montre
  • Arrête le moteur pendant 5 secondes
  • Répète le processus encore et encore
/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, A3, A2, A1, A0); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position to 0 stepper.moveTo(STEP_PER_REVOLUTION); // move motor one revolution, in clockwise direction Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // stop 5 seconds stepper.setCurrentPosition(0); // reset position to 0 moveToPosition = -1 * moveToPosition; // reverse direction stepper.moveTo(moveToPosition); // move motor one revolution if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // MUST be called as frequently as possible }

Étapes rapides

  • Cliquez sur l'icône Libraries dans la barre gauche de l'IDE Arduino.
  • Recherchez “AccelStepper” et trouvez la bibliothèque AccelStepper créée par Mike McCauley.
  • Appuyez sur le bouton Install pour compléter l'installation de la bibliothèque AccelStepper.
Bibliothèque AccelStepper pour Arduino Nano
  • Copiez le code et ouvrez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Upload pour charger le code sur l'Arduino Nano.
  • Le moteur pas à pas effectuera une révolution dans le sens horaire, marquera une pause de 5 secondes, tournera d'une révolution dans le sens antihoraire, marquera une pause de 5 secondes, et répétera ce processus.
  • Vérifiez le résultat dans le moniteur série.
COM6
Send
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explication du code

Découvrez l'explication ligne par ligne contenue dans les commentaires du code source !

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!