Avancer un pas après l'autre : le moteur pas à pas
Sommaire
Matériel
- Arduino Uno
- Plaque d'essai (breadboard)
- Straps ou fils de liaison
- 1 moteur à courant continu 5v
- 1 Arduino Motorshield (http://arduino.cc/en/Main/ArduinoMotorShieldR3)
Principe
Ce moteur possède quatre fils d’alimentation pour piloter des bobines par paire. Etant donné un schéma vaut mieux qu’un long discours, voici comment il est constitué :
Vous l’aurez compris, les bobines sont reliées deux à deux en série et sont donc pilotées ensemble. Il n’y a donc finalement que deux enroulements à commander puisque deux bobines montées en série n’en font plus qu’une. Leur placement de part et d’autre de l’aimant permanent du rotor permet de piloter ce dernier.
Lorsqu’il n’y a aucun courant traversant les bobines, le rotor (où l’axe de sortie est lié) est libre de tourner, rien ne cherche à le retenir dans sa course. Maintenant, si nous décidons de faire passer du courant entre les points C et D pour alimenter la bobine de gauche et celle de droite, un courant va s’établir et deux champs électromagnétiques vont apparaître de part et d’autres du rotor. Que va-t-il alors se passer ? L’aimant du rotor va tourner sur lui même pour se placer de façon à ce que son pôle Nord soit en face du pôle Sud du champ magnétique créé dans la première bobine et que son pôle Sud soit en face du pôle Nord créé dans la deuxième bobine. Si on alimente non plus les bobines entre C et D mais plutôt entre A et B, le rotor va alors tourner pour s’aligner à nouveau vers les pôles qui l’intéressent (Nord/Sud, Sud/Nord). Ensuite on recommence, on va alors alimenter de nouveau les bobines entre D et C, donc avec un courant de signe opposé à la fois où elles ont été alimentées entre C et D (par exemple C était relié au “+” de l’alimentation tout à l’heure et là on le fait passer au “-”, idem pour D que l’on fait passer du “-” au “+”) et le moteur va encore faire un quart de tour. On peut continuer ainsi de suite pour faire tourner le moteur en faisant attention de ne pas se tromper dans les phases d’alimentation. A chaque phase, on va donc faire tourner le moteur d’un quart de tour :
Ce quart de rotation s’appelle un pas. Et comme il faut plusieurs pas pour faire tourner le moteur sur 360°, on l’a donc appelé ainsi, le moteur pas-à-pas.
Dans le cas illustré ci-dessus, on dit que le moteur fait 4 pas par tour. Il existe bien des moteurs qui font ce nombre de pas mais ce ne sont pas les plus fréquents. Généralement le nombre de pas par tour est bien plus conséquent (24, 48, 180,...). La constitution mécanique de leur rotor est plus complexe (le rotor comporte autant d'aimants que de pas par tour), mais le principe de fonctionnement reste identique. On cherche toujours à attirer un aimant grâce à des champs magnétiques crées par des bobines parcourues par un courant.
Montage
Le montage consiste simplement à emboîter le shield dans l'arduino et à câbler les deux moteurs dans les borniers à vis étiquetés A et B.
Programme
Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino.
/*
Stepper Motor Control with Arduino Motor Control Shield V3.0.
*/
const int dirA = 12;
const int dirB = 13;
const int motA = 3;
const int motB = 11;
const int brakeA = 9;
const int brakeB = 8;
const int delayLength = 30;
void setup() {
pinMode(dirA, OUTPUT);
pinMode(dirB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
pinMode(motA, OUTPUT);
pinMode(motB, OUTPUT);
}
void loop() {
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, HIGH);
digitalWrite(dirA, HIGH);
digitalWrite(motA, HIGH);
delay(delayLength);
digitalWrite(brakeA, HIGH);
digitalWrite(brakeB, LOW);
digitalWrite(dirB, HIGH);
digitalWrite(motB, HIGH);
delay(delayLength);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, HIGH);
digitalWrite(dirA, LOW);
digitalWrite(motA, HIGH);
delay(delayLength);
digitalWrite(brakeA, HIGH);
digitalWrite(brakeB, LOW);
digitalWrite(dirB, LOW);
digitalWrite(motB, HIGH);
delay(delayLength);
}
/*
Stepper Motor Control with Arduino Motor Control Shield V3.0.
This program drives a bipolar stepper motor. The motor is controlled
by Arduino pins 10, 11, 12, 13.
The motor should do five revolutions into one and five into another direction.
Using this sketch for longer is not recommended because it will keep the motor under current
and can cause it to become quite hot.
*/
#include <Stepper.h>
int enA = 3; // Enable pin 1 on Motor Control Shield
int enB = 11; // Enable pin 2 on Motor Control Shield
int dirA = 12; // Direction pin dirA on Motor Control Shield
int dirB = 13; // Direction pin dirB on Motor Control Shield
const int stepsPerRevolution = 180; // Change this to fit the number of steps per revolution
// for your motor
// Initialize the stepper library on pins 12 and 13:
Stepper myStepper(stepsPerRevolution, dirA, dirB);
void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// Enable power to the motor
pinMode(enA, OUTPUT);
digitalWrite (enA, HIGH);
pinMode(enB, OUTPUT);
digitalWrite (enB, HIGH);
}
void loop() {
// Step five revolutions into one direction:
myStepper.step(stepsPerRevolution*5);
delay(2000);
// Step five revolutions in the other direction:
myStepper.step(-stepsPerRevolution*5);
delay(2000);
}