Commande d’un moteur pas à pas 28BYJ-48

Le moteur pas à pas est un des actionneurs les plus utilisés. Il permet un positionnement assez précis pour être utilisés dans les machines-outils de moyenne gamme.

ULN2003
Le programme suivant permet de piloter le moteur en lui appliquant un mouvement oscillant. On remarque que pour limiter les appels de courant, une phase d’accélération est utilisée.

La bibliothèque AccelStepper utilisée ici peut être téléchargée et décompressée dans le répertoire « librairies ».

/***
 *  Auteur: Jean Demartini
 *  date:    13/07/2015
 *
 *  Moteur pas à pas 5V : 28BYJ-48
 *
 *  Ce moteur a 4 phases à activer successivement :
 *
 *  Les sorties digitales d'un Arduino peuvent les piloter
 *  dans la mesure ou elles sont utilisées pour piloter
 *  un transistor MosFET suffisamment puissant.
 *
 *        Moteur
 *    P1 P2 P3 P4 Com
 *  +-|--|--|--|--|-+
 *  |               +--(-)-- GND
 *  |               +--(+)-- Vcc(5V)
 *  +-|-|-|-|-------+
 *    1 2 3 4
 *
 *  1: cP1
 *  2: cP2
 *  3: cP3
 *  4: cP4
 *
 *  Nota: l'alimentation fournie par le port USB n'est pas suffisante,
 *  il faut utiliser une alimentation annexe (5V-1A par exemple).
 ***/
#include "AccelStepper.h"

#define HALFSTEP 8 // Motor pin definitions
#define phi_1 3 // IN1 sur ULN2003 driver 1
#define phi_2 4 // IN2 sur ULN2003 driver 1
#define phi_3 5 // IN3 sur ULN2003 driver 1
#define phi_4 6 // IN4 sur ULN2003 driver 1

// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48

AccelStepper stepper1(HALFSTEP, phi_1, phi_3, phi_2, phi_4);

void setup() {
    stepper1.setMaxSpeed(1000.0);
    stepper1.setAcceleration(100.0);
    stepper1.setSpeed(300);
    stepper1.moveTo(1000);
}

void loop() {
//Change direction when the stepper reaches the target position
    if (stepper1.distanceToGo() == 0) {
        stepper1.moveTo(-stepper1.currentPosition());
    }
    stepper1.run();
}