Contrôle de moteur pas-à-pas par commande demi-pas
Le programme ci-dessous permet de contrôler un moteur pas-à-pas 28BYJ-48 avec un contrôleur ULN2003 en étant plus précis (commande par demi-pas) :
1
int IN1 = 8; // pin digital 8 relié à IN1
2
int IN2 = 9; // pin digital 9 à IN2
3
int IN3 = 10; // pin digital 10 à IN3
4
int IN4 = 11; // pin digital 11 à IN4
5
int temps = 20; // temps entre les pas, minimum 10 ms.
6
// Array bidimensionnel qu'indique la séquence des pas 7
int pas [8][4] ={
8
{1, 0, 0, 0},9
{1, 1, 0, 0},10
{0, 1, 0, 0},11
{0, 1, 1, 0},12
{0, 0, 1, 0},13
{0, 0, 1, 1},14
{0, 0, 0, 1},15
{1, 0, 0, 1}16
};
17
18
void setup(){
19
// tous les pins se configurent comme sorties20
pinMode(IN1, OUTPUT);
21
pinMode(IN2, OUTPUT);
22
pinMode(IN3, OUTPUT);
23
pinMode(IN4, OUTPUT);
24
}
25
26
void loop(){
27
// 512*8 = 4096 pas28
for (int i = 0; i < 512; i++){
29
// boucle repasse le array ligne à ligne30
for (int i = 0; i < 8; i++){
31
// valeurs qu'on va appliquer 32
digitalWrite(IN1, pas[i][0]);
33
digitalWrite(IN2, pas[i][1]);
34
digitalWrite(IN3, pas[i][2]);
35
digitalWrite(IN4, pas[i][3]);
36
delay(temps);
37
}
38
}
39
// pause de 5 secondes40
digitalWrite(IN1, LOW);
41
digitalWrite(IN2, LOW);
42
digitalWrite(IN3, LOW);
43
digitalWrite(IN4, LOW);
44
delay(temps);
45
}
Dans ce cas, les bobines sont pilotées ainsi :