Arduino - Contrôle du moteur pas à pas 28BYJ-48 à l'aide du pilote ULN2003

Dans ce tutoriel, nous allons apprendre :

Moteur pas à pas 28BYJ-48 ULN2003 Arduino

Les moteurs pas à pas sont d'excellents moteurs pour le contrôle de position. Ils divisent une révolution complète en un nombre égal de « pas ». Ils sont utilisés dans de nombreux dispositifs tels que les imprimantes, les imprimantes 3D, les machines CNC et l'automatisation industrielle.

Un moyen peu coûteux de se renseigner sur les moteurs pas à pas est d'utiliser des moteurs pas à pas 28BYJ-48. Ils sont généralement fournis avec une carte de commande basée sur un ULN2003, ce qui les rend très faciles à utiliser.

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
1×28BYJ-48 stepper motor + ULN2003 Driver Module
1×5V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

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 28BYJ-48

Selon la fiche technique, lorsque le moteur 28BYJ-48 fonctionne en mode pas complet, chaque pas correspond à une rotation de 11,25°. Cela signifie qu'il y a 32 pas par révolution (360°/11,25° = 32).

En outre, le moteur possède un réducteur de 1/64. Cela signifie qu'il a en réalité 32 x 64 = 2048 pas. Chaque pas est équivalent à 360°/2048 = 0,1758°.

Conclusion : si le moteur effectue 2048 pas (en mode pas entier), le moteur effectue une révolution.

Brochage

Le moteur pas à pas 28BYJ-48 comprend 5 broches. Nous n'avons pas besoin de nous préoccuper des détails de ces broches. Il suffit de le brancher au connecteur du pilote de moteur ULN2003.

Moteur pas à pas 28BYJ-48

À propos du module de pilotage de moteur pas à pas ULN2003

Le ULN2003 est l'un des modules de commande de moteur pas à pas les plus courants.

  • Le module dispose de quatre LED qui montrent l'activité des quatre lignes d'entrée de commande (pour indiquer l'état de pas). Elles produisent un effet splendide lors du pas à pas.
  • Le module comprend également un cavalier marche/arrêt pour isoler l'alimentation du moteur pas à pas.

Brochage du ULN2003

Pilotage de moteur pas à pas ULN2003

Le module ULN2003 comprend 6 broches et un connecteur femelle :

  • Broche IN1 : est utilisée pour piloter le moteur. Connectez-la à une broche de sortie sur Arduino.
  • Broche IN2 : est utilisée pour piloter le moteur. Connectez-la à une broche de sortie sur Arduino.
  • Broche IN3 : est utilisée pour piloter le moteur. Connectez-la à une broche de sortie sur Arduino.
  • Broche IN4 : est utilisée pour piloter le moteur. Connectez-la à une broche de sortie sur Arduino.
  • Broche GND : est une broche de masse commune. Elle DOIT être connectée aux deux GND de l'Arduino et à l'alimentation externe.
  • Broche VDD : fournit l'énergie pour le moteur. Connectez-la à l'alimentation externe.
  • Connecteur du moteur : c’est ici que le moteur se branche.

※ NOTE THAT:

  • La tension de l'alimentation externe doit être égale à celle du moteur pas à pas. Par exemple, si un moteur pas à pas fonctionne avec du 12V DC, nous devons utiliser une alimentation de 12V. Dans le cas du moteur pas à pas 28BYJ-48, il fonctionne avec 5V DC, nous utiliserons donc une alimentation de 5V.
  • Même si un moteur pas à pas nécessite une alimentation de 5V, veuillez NE PAS connecter la broche VDD à la broche 5V sur Arduino. Connectez-la plutôt à une alimentation externe de 5V. Cela est dû au fait que le moteur pas à pas consomme trop de puissance.

Diagramme de câblage

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

This image is created using Fritzing. Click to enlarge image

Veuillez noter que nous n'avons pas besoin de nous préoccuper de la couleur des fils du moteur pas à pas. Nous devons simplement brancher le connecteur mâle (sur le moteur pas à pas 28BYJ-48) au connecteur femelle (sur le pilote ULN2003).

Comment programmer pour contrôler un moteur pas à pas

Il existe trois méthodes pour contrôler un moteur pas à pas :

  • Pas complet
  • Demi-pas
  • Micro-pas

Pour une application simple, nous pouvons utiliser la méthode pas entier. Le détail de ces trois méthodes sera présenté dans la dernière partie de ce tutoriel. La programmation pour ces méthodes est compliquée. Heureusement, il existe de nombreuses bibliothèques qui l'ont fait pour nous. Nous avons juste besoin d'utiliser la bibliothèque.

L'IDE Arduino dispose d'une bibliothèque Stepper intégrée. Cependant, nous ne vous recommandons pas d'utiliser cette bibliothèque car :

  • La bibliothèque est bloquante. Cela signifie qu'elle empêche Arduino d'effectuer d'autres tâches pendant qu'elle contrôle le moteur pas à pas.
  • Elle ne possède pas suffisamment de fonctions.

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.
  • Conduite en pas complet et demi-pas.
  • Plusieurs moteurs pas à pas simultanés, avec des pas indépendants et simultanés sur chaque moteur.
  • Inconvénient : Ne prend pas en charge la conduite en micro-pas.

Code Arduino

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino 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/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 11, 9, 10, 8); void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // MUST be called in loop() function Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

Étapes rapides

  • Accédez à l'icône Libraries sur la barre latérale 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.
Bibliothèque AccelStepper pour Arduino
  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload sur l'IDE Arduino pour téléverser le code vers Arduino
  • Observez la rotation du moteur. Il doit :
    • Effectuer une révolution dans le sens horaire, puis
    • Effectuer deux révolutions dans le sens antihoraire, puis
    • Effectuer deux révolutions dans le sens horaire.

    Ce processus est répété à l'infini.

    • Consultez le résultat dans le moniteur série.
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Comment contrôler plusieurs moteurs pas à pas 28BYJ-48

Apprenons à contrôler deux moteurs pas à pas indépendamment en même temps.

Schéma de câblage pour deux moteurs pas à pas 28BYJ-48

Schéma de câblage du driver ULN2003 pour deux moteurs pas à pas Arduino

This image is created using Fritzing. Click to enlarge image

Code Arduino pour deux moteurs pas à pas 28BYJ-48

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino 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/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 11, 9, 10, 8); AccelStepper stepper_2(FULLSTEP, 7, 5, 6, 4); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // set the maximum speed stepper_1.setAcceleration(50.0); // set acceleration stepper_1.setSpeed(200); // set initial speed stepper_1.setCurrentPosition(0); // set position stepper_1.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution stepper_2.setMaxSpeed(1000.0); // set the maximum speed stepper_2.setAcceleration(50.0); // set acceleration stepper_2.setSpeed(200); // set initial speed stepper_2.setCurrentPosition(0); // set position stepper_2.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // MUST be called in loop() function stepper_2.run(); // MUST be called in loop() function Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

Connaissances supplémentaires

Le moteur pas à pas vibre lors du déplacement.

Ne vous inquiétez pas si le moteur pas à pas vibre pendant son mouvement. C'est une caractéristique du moteur pas à pas. Nous pouvons réduire les vibrations en utilisant la méthode de contrôle par micro-pas.

De plus, grâce à cette caractéristique, si nous contrôlons correctement, le moteur pas à pas peut produire des sons musicaux comme s'il s'agissait d'un instrument de musique. Vous pouvez voir ce projet sur Arduino Project Hub.

2. Méthode de contrôle des moteurs pas à pas

  • Pas complet : L'unité de déplacement est un pas, ce qui équivaut à une valeur de degré spécifiée dans la fiche technique ou le manuel du moteur pas à pas.
  • Demi-pas : divise chaque pas complet en deux petits pas. L'unité de déplacement est la moitié du pas complet. Cette méthode permet au moteur de se déplacer avec une résolution doublée.
  • Micro-pas : divise chaque pas complet en de nombreux petits pas. L'unité de déplacement est une fraction du pas complet. La fraction peut être de 1/4, 1/8, 1/16, 1/32 ou même plus. Cette méthode permet au moteur de se déplacer avec une résolution plus élevée. Elle permet également au moteur de se déplacer plus doucement à basse vitesse. Plus le dividende est grand, plus la résolution est élevée et le mouvement est fluide.

Par exemple, si la fiche technique du moteur indique 1,8 degré/étape :

  • Pas complet : Le moteur peut avancer de 1,8 degré/étape <⇒ 200 pas/révolution
  • Demi-pas : Le moteur peut avancer de 0,9 degré/étape <⇒ 400 pas/révolution
  • Micro-pas : Le moteur peut avancer de 0,45, 0,225, 0,1125, 0,05625 degré/étape <⇒ 800, 1600, 3200, 6400... pas/révolution

Le code ci-dessus utilisait la méthode de contrôle par pas complet.

3. Problème de résonance

Il s'agit des utilisations avancées. Les débutants n'ont PAS besoin d'y prêter attention. Cela se produit dans une gamme de vitesses, dans laquelle la cadence de pas équivaut à la fréquence naturelle du moteur. Il peut y avoir un changement audible dans le bruit produit par le moteur, ainsi qu'une augmentation des vibrations. Dans les applications réelles, le développeur DOIT prêter attention à ce problème.

Vidéo

WARNING

Veuillez noter que ce tutoriel est incomplet. Nous publierons sur notre Page Facebook lorsque le tutoriel sera complet. Aimez-la pour rester informé.

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