Raspberry Pi - Moteur pas à pas

Ce didacticiel vous explique comment utiliser un Raspberry Pi pour contrôler un moteur pas à pas à l'aide d'un pilote L298N. En détail, nous apprendrons :

Le tutoriel s'applique à tous les types de moteurs pas à pas bipolaires avec quatre fils. Il utilisera un moteur pas à pas NEMA 17 comme exemple.

Moteur pas à pas Raspberry Pi Driver L298N

Si vous voulez contrôler un autre type de moteur pas à pas, veuillez consulter ce tutoriel Raspberry Pi - Moteur Pas à Pas 28BYJ-48 Pilote ULN2003..

Préparation du matériel

1×Raspberry Pi 4 Model B
1×Stepper Motor Nema 17
1×L298N Motor Driver Module
1×12V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) Screw Terminal Block Shield for Raspberry Pi
1×(Optional) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B
1×(Optional) Plastic Case and Cooling Fan for Raspberry Pi 4B
1×(Optional) HDMI Touch Screen Monitor for Raspberry Pi

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 quatre fils
  • unipolaire : ce moteur a soit cinq, soit six fils

Pour un moteur pas à pas unipolaire à 6 fils, nous pouvons utiliser quatre de ses 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 Raspberry Pi - Moteur Pas à Pas 28BYJ-48 Pilote ULN2003..

Ce tutoriel se concentre uniquement sur le moteur pas à pas bipolaire.

Sortie des broches 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 affiche certains des noms les plus courants pour les broches :

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

La disposition des broches, l'étiquetage des fils et leurs couleurs peuvent varier selon les fabricants. Pour déterminer la correspondance entre la couleur du fil et son nom, vous devez consulter la fiche technique ou le manuel. L'image ci-dessus affiche également les détails de deux moteurs différents avec un étiquetage et des couleurs de fils différents.

Pas par Révolution

La spécification du moteur indique le DEG_PER_STEP. Selon la technique de contrôle, STEP_PER_REVOLUTION peut être déterminé en utilisant 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é/pas :

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 Raspberry Pi

Le Raspberry Pi peut générer des signaux pour contrôler le moteur pas à pas, cependant, ces signaux ne sont pas d'une tension et/ou d'un courant suffisants pour répondre aux exigences du moteur pas à pas. Par conséquent, un pilote matériel est nécessaire entre le Raspberry Pi et le moteur pas à pas. Ce pilote sert deux objectifs :

  • Amplifier les signaux de commande provenant du Raspberry Pi en termes de courant et de tension
  • Protéger le Raspberry Pi contre le courant et la tension élevés utilisés pour alimenter le moteur pas à pas.

Il existe de nombreux pilotes matériels qui peuvent être utilisés pour gérer les moteurs pas à pas. L'un des pilotes matériels les plus couramment utilisés 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 CC ou un moteur pas à pas. Dans ce guide, nous allons découvrir comment l'utiliser pour réguler 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 fournit l'alimentation pour le moteur et peut être comprise entre 5 et 35V.
  • Broche GND : Il s'agit d'une broche de masse commune, qui doit être connectée à la masse (0V).
  • Broche 5V : Elle fournit l'alimentation pour le module L298N et peut être alimentée par 5V depuis le Raspberry Pi.
  • Broches IN1, IN2, IN3, IN4 : Celles-ci sont connectées aux broches du Raspberry Pi pour recevoir le signal de commande pour contrôler le moteur pas à pas.
  • Broches OUT1, OUT2, OUT3, OUT4 : Celles-ci sont connectées au moteur pas à pas.
  • Cavaliers ENA, ENB : Ils sont utilisés pour activer le moteur pas à pas et les cavaliers ENA et ENB doivent être en place.
  • Cavalier 5V-EN : Si celui-ci est en place, l'alimentation du module L298N est tirée de VCC et il n'est pas nécessaire de connecter quoi que ce soit à la broche 5V. Si le cavalier 5V-EN est retiré, l'alimentation doit être fournie au module L298N via une broche 5V.

Le pilote L298N dispose de deux alimentations d'entrée :

  • Un pour le moteur pas à pas (broches VCC et GND) : allant de 5 à 35V.
  • Un pour le fonctionnement interne du module (broches 5V et GND) : de 5 à 7V. Si le cavalier 5V-EN est en place, cette broche n'a pas besoin d'être connectée.

Diagramme de câblage

Schéma de câblage du pilote L298N du moteur pas à pas Raspberry Pi

This image is created using Fritzing. Click to enlarge image

Pour simplifier et organiser votre câblage, nous vous recommandons d'utiliser un Screw Terminal Block Shield pour Raspberry Pi. Ce shield garantit des connexions plus sûres et plus faciles à gérer, comme illustré ci-dessous :

Raspberry Pi Screw Terminal Block Shield

※ Note:

  • Gardez les trois cavaliers sur le module L298N en place si l'alimentation électrique du moteur est de 12V ou moins.
  • Les broches des moteurs pas à pas peuvent différer selon les fabricants. Référez-vous au tableau ci-dessous pour le câblage correct.

Tableau de câblage entre Raspberry Pi et pilote L298N

Raspberry Pi pins L298N pins
12 IN1
16 IN2
20 IN3
21 IN4

Table de câblage entre le pilote L298N et le moteur pas à pas

Important ! : Ne faites pas attention à l'ordre des fils dans le moteur pas à pas sur le schéma de câblage illustré ci-dessus. C'est juste une illustration. L'agencement des broches sur les moteurs pas à pas peut varier en fonction du fabricant. 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 suggérons de consulter la fiche technique, les spécifications ou le manuel du moteur pas à pas. Assurez-vous qu'il inclut la corrélation entre la couleur et le nom de la broche. Par exemple, ce moteur pas à pas a le mappage suivant comme indiqué sur l'image ci-dessous :

Correspondance des couleurs des enroulements du moteur pas à pas

Compte tenu de la cartographie, le tableau de câblage est le suivant :

L298N pins stepper motor pins wire color
OUT1 A black wire
OUT2 C green wire
OUT3 B red wire
OUT4 D blue wire

※ Note:

Dans les tableaux de câblage entre le moteur pas à pas et le pilote L298N, il existe plusieurs façons de faire le câblage. Nous pouvons échanger OUT1 avec OUT2, OUT3 avec OUT4. Cependant, si nous faisons cela, la direction de rotation des moteurs peut être modifiée (de sens horaire à antihoraire et vice versa).

Code Raspberry Pi - Code pour moteur pas à pas

Le code suivant :

  • Fait tourner le moteur d'un tour dans le sens des aiguilles d'une montre
  • Met le moteur en pause pendant 5 secondes
  • Fait tourner le moteur d'un tour dans le sens inverse des aiguilles d'une montre
  • Arrête le moteur pendant 5 secondes
  • Répète le processus indéfiniment

Étapes rapides

  • Assurez-vous d'avoir Raspbian ou tout autre système d'exploitation compatible Raspberry Pi installé sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à Internet si vous avez besoin d'installer des bibliothèques.
  • Si c'est la première fois que vous utilisez Raspberry Pi, voir Installation du logiciel - Raspberry Pi..
  • Connectez votre PC au Raspberry Pi via SSH en utilisant le client SSH intégré sur Linux et macOS ou PuTTY sur Windows. Voir comment connecter votre PC au Raspberry Pi via SSH.
  • Assurez-vous que la bibliothèque RPi.GPIO est installée. Si ce n'est pas le cas, installez-la en utilisant la commande suivante :
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Créez un fichier de script Python stepper.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi 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/raspberry-pi/raspberry-pi-stepper-motor import RPi.GPIO as GPIO import time # Define GPIO pins for L298N driver IN1 = 12 IN2 = 16 IN3 = 20 IN4 = 21 # Set GPIO mode and configure pins GPIO.setmode(GPIO.BCM) GPIO.setup(IN1, GPIO.OUT) GPIO.setup(IN2, GPIO.OUT) GPIO.setup(IN3, GPIO.OUT) GPIO.setup(IN4, GPIO.OUT) # Constants for stepper motor control DEG_PER_STEP = 1.8 STEP_PER_REVOLUTION = int(360 / DEG_PER_STEP) # Function to move the stepper motor one step forward def step_forward(delay, steps): for _ in range(steps): GPIO.output(IN1, GPIO.HIGH) GPIO.output(IN2, GPIO.HIGH) GPIO.output(IN3, GPIO.LOW) GPIO.output(IN4, GPIO.LOW) time.sleep(delay) GPIO.output(IN1, GPIO.LOW) GPIO.output(IN2, GPIO.HIGH) GPIO.output(IN3, GPIO.HIGH) GPIO.output(IN4, GPIO.LOW) time.sleep(delay) # Function to move the stepper motor one step backward def step_backward(delay, steps): for _ in range(steps): GPIO.output(IN1, GPIO.LOW) GPIO.output(IN2, GPIO.LOW) GPIO.output(IN3, GPIO.HIGH) GPIO.output(IN4, GPIO.HIGH) time.sleep(delay) GPIO.output(IN1, GPIO.HIGH) GPIO.output(IN2, GPIO.LOW) GPIO.output(IN3, GPIO.LOW) GPIO.output(IN4, GPIO.HIGH) time.sleep(delay) try: # Set the delay between steps delay = 0.001 while True: # Move the stepper motor one revolution in a clockwise direction step_forward(delay, STEP_PER_REVOLUTION) # Pause for 5 seconds time.sleep(5) # Move the stepper motor one revolution in an anticlockwise direction step_backward(delay, STEP_PER_REVOLUTION) # Halt for 5 seconds time.sleep(5) except KeyboardInterrupt: print("\nExiting the script.") finally: # Clean up GPIO settings GPIO.cleanup()
  • Enregistrez le fichier et exécutez le script Python en entrant la commande suivante dans le terminal :
python3 stepper.py

Le script s'exécute en boucle infinie jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.

En changeant la valeur de la variable delay dans le code, vous pouvez modifier la vitesse du moteur pas à pas.

Vous observerez ce qui suit :

  • Le moteur pas à pas fera une révolution dans le sens horaire.
  • Le moteur pas à pas fera une pause de 5 secondes.
  • Le moteur pas à pas fera ensuite une révolution dans le sens antihoraire.
  • Le moteur pas à pas fera une autre pause de 5 secondes.
  • Ce processus sera répété.

Explication du Code

Consultez 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!