Bibliothèque Complète pour Moteur Pas à Pas Bipolaire Arduino
Composants et fournitures
| Arduino UNO | ×1 |
| Driver Double Pont-H L293D (Texas Instruments) | ×1 |
Applications et services en ligne
| Arduino IDE |
À propos de ce projet
J'avais précédemment publié une bibliothèque Arduino pour moteurs pas à pas unipolaires, contrôlant vitesse, direction, nombre de tours, angle, etc. Mais elle ne gérait que les moteurs unipolaires. Or, les moteurs pas à pas peuvent aussi être bipolaires. J'ai donc développé cette nouvelle bibliothèque pour contrôler tous les types de moteurs pas à pas bipolaires.
Voici la bibliothèque pour moteur pas à pas bipolaire en Arduino. Elle comporte 9 fonctions pour piloter le moteur selon les besoins, conçue selon les exigences du contrôle de mouvement industriel.
Caractéristiques principales
- Contrôle tout moteur pas à pas bipolaire
- Contrôle du sens de rotation
- Contrôle précis du nombre de tours (1, 2, 3, 4...)
- Contrôle précis de la vitesse en tr/min avec 95 % de précision
- Rotation à un angle désiré (0–360°) avec 80–100 % de précision
- Compatible avec toutes les cartes Arduino
Description des fonctions de la bibliothèque
bi_polar_Stepper(int pin1, int pin2, int pin3, int pin4)– Crée une instance avec les broches du driver.set_step_per_rev(int steps)– Définit le nombre de pas par tour (angle de pas / résolution).set_RPM(int rpm)– Définit la vitesse en tr/min (précision 95 %).rotate_CW()– Démarre la rotation horaire continue (à appeler en boucle).rotate_CCW()– Démarre la rotation anti-horaire continue (à appeler en boucle).rotate(int dir)– Tourne selon la direction (1 = horaire, 0 = anti-horaire).rotate_one_rev(int dir)– Effectue exactement 1 tour dans la direction choisie.rotate_n_rev(int dir, int num)– Effectue num tours dans la direction choisie.rotate_x_deg(int deg)– Tourne à l'angle désiré (0–360°) dans un sens ou l'autre (précision 80–100 %).
Pour utiliser la bibliothèque, copiez le dossier bi_polar_Stepper dans le répertoire des bibliothèques Arduino (ex: C:\arduino-1.6.7\libraries).
Exemples
1) Rotation continue dans un sens à 60 tr/min
#include <bi_polar_Stepper.h>
#define steps 200 // à adapter selon votre moteur
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 60;
void setup() {
Serial.begin(9600);
Serial.println("Test bibliothèque moteur bipolaire");
my_step_motor.set_step_per_rev(steps);
my_step_motor.set_RPM(rpm);
Serial.println("Moteur tourne horaire");
}
void loop() {
my_step_motor.rotate_CW();
}
2) 1 tour horaire puis 1 tour anti-horaire à 30 tr/min en continu
#include <bi_polar_Stepper.h>
#define steps 200
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 30;
void setup() {
Serial.begin(9600);
Serial.println("Test bibliothèque moteur bipolaire par Ashutosh Bhatt");
my_step_motor.set_step_per_rev(steps);
my_step_motor.set_RPM(rpm);
}
void loop() {
Serial.println("Moteur tourne horaire");
my_step_motor.rotate_one_rev(1);
delay(1000);
Serial.println("Moteur tourne anti-horaire");
my_step_motor.rotate_one_rev(0);
delay(1000);
}
3) 2 tours horaire à 100 tr/min puis 2 tours anti-horaire à 50 tr/min
#include <bi_polar_Stepper.h>
#define steps 200
bi_polar_Stepper my_step_motor(2, 3, 4, 5);
int i;
void setup() {
Serial.begin(9600);
Serial.println("Test bibliothèque moteur bipolaire par Ashutosh Bhatt");
my_step_motor.set_step_per_rev(steps);
}
void loop() {
my_step_motor.set_RPM(100);
for(i=0; i<100; i++) my_step_motor.rotate(1);
delay(2000);
my_step_motor.set_RPM(50);
for(i=0; i<100; i++) my_step_motor.rotate(0);
delay(2000);
}
4) 4 tours horaire à 20 tr/min puis 2 tours anti-horaire à 10 tr/min
#include <bi_polar_Stepper.h>
#define steps 200
bi_polar_Stepper my_step_motor(2, 3, 4, 5);
int i;
void setup() {
Serial.begin(9600);
Serial.println("Test bibliothèque moteur bipolaire par Ashutosh Bhatt");
my_step_motor.set_step_per_rev(steps);
}
void loop() {
my_step_motor.set_RPM(20);
my_step_motor.rotate_n_rev(1, 4);
delay(2000);
my_step_motor.set_RPM(10);
my_step_motor.rotate_n_rev(0, 2);
delay(2000);
}
5) Rotation 90° horaire puis 90° anti-horaire à 30 tr/min en continu
#include <bi_polar_Stepper.h>
#define motor_steps 200
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 30;
void setup() {
Serial.begin(9600);
Serial.println("Test bibliothèque moteur bipolaire");
my_step_motor.set_step_per_rev(motor_steps);
my_step_motor.set_RPM(rpm);
Serial.println("Moteur oscille 90° aller-retour");
}
void loop() {
my_step_motor.rotate_x_deg(90);
delay(2000);
my_step_motor.rotate_x_deg(270); // 270° dans l'autre sens = -90°
delay(2000);
}
Note : Pour les moteurs de courant/tension plus élevés, remplacez le L293D par un L298 ou 4 transistors Darlington séparés (TIP122, TIP142, etc.).
La bibliothèque et les exemples ont été testés avec :
- Moteur bipolaire 2 phases, 5 V, 100 tr/min max, 200 pas/tour (1,8°)
- Moteur bipolaire 2 phases, 5 V, 60 tr/min max, 200 pas/tour (1,8°)
Code
- Bibliothèque Arduino pour Moteur Pas à Pas Bipolaire
Bibliothèque Arduino pour Moteur Pas à Pas Bipolaire C/C++
La bibliothèque contrôle RPM, direction, tours, angle de rotation de tous types de moteurs pas à pas bipolaires avec 95 % de précision.
Aperçu non disponible (téléchargement uniquement).
Schémas
Ce circuit pilote et contrôle RPM, direction, angle de rotation, nombre de tours d'un moteur pas à pas bipolaire.
Processus de fabrication
- Moteurs à réluctance variable : types, fonctionnement et applications
- Moteurs pas à pas : types, caractéristiques et applications pratiques
- Drivers intégrés simplifient la conception de moteurs pas-à-pas haute puissance
- Télémétrie de capteur 2.0.1 – Surveillance avancée de température avec Azure IoT Hub
- Raspoulette : Prototype de système autonome de porte de poulailler à énergie solaire
- Tourelle Nerf Autonome DIY – Construire un Canon Nerf Intelligent avec Moteurs Pas-à-Pas, Caméra et Arduino
- Moteurs Servo vs Pas à Pas : Clarifier la zone grise moderne
- Comprendre les moteurs linéaires : de l'énergie électrique au mouvement linéaire précis
- Servomoteurs expliqués : fonctionnement et importance