Principe de fonctionnement
Le circuit possède une broche STBY qui permet de désactiver les deux moteurs.
Attention, le circuit est désactivé si STBBY=LOW.
Chaque moteur est commandé par trois signaux. Ainsi, pour le moteur A :
– PWMA
– AIN1
– AIN2
PWMA va fixer la vitesse de rotation (de 0 à 255). AIN et AIN2 vont fixer le sens de rotation :en commandant les signaux A01 etA02
AIN1 | AIN 2 | A01 | A02 | Résultat |
L | L | L | L | Moteur A à l’arrêt |
L | H | L | H | Moteur A tournant dans un sens |
H | L | H | L | Moteur A tournant dans l’autre sens |
H | H | L | L | Moteur A à l’arrêt |
Tableaux des broches
Côté des commandes
Nom de la broche | Signification |
PWMA | Vitesse du moteur A |
AIN2 | Deuxième commande du sens de rotation du moteur A |
AIN1 | Première commande du sens de rotation du moteur A |
STBY | Mise en Standby des deux moteurs (en niveau bas) |
BIN1 | Première commande du sens de rotation du moteur B |
BIN2 | Deuxième commande du sens de rotation du moteur B |
PWMB | Vitesse du moteur B |
GND | Masse |
Côté des sorties et alimentations
Nom de la broche | Signification |
VM | Tension d’alimentation des moteurs |
VCC | Tension d’alimentation du circuit |
GND | Masse |
A01 | Première commande du moteur A |
A02 | Deuxième commande du moteur A |
B02 | Deuxième commande du moteur B |
B01 | Première commande du moteur B |
GND | Masse |
Instructions de montage
– Les différentes masses doivent impérativement être reliées entre elles.
– La broche STBY, si on ne l’utilise pas dans le programme, doit être mise au niveau logique HIGH.
Un exemple de code Arduino
////////////////////////////////////////// // Branchements ////////////////////////////////////////// int STBY = 10; //standby //Moteur A int PWMA = 3; // Vitesse int AIN1 = 9; // Direction int AIN2 = 8; // Direction //Motor B int PWMB = 5; // Vitesse int BIN1 = 11; // Direction int BIN2 = 12; // Direction ////////////////////////////////////////// // Constantes ////////////////////////////////////////// const int MOTEUR_A=0; const int MOTEUR_B=1; const int AVANT=0; const int ARRIERE=1; ////////////////////////////////////////// // Setup ////////////////////////////////////////// void setup() { pinMode(STBY, OUTPUT); pinMode(PWMA, OUTPUT); pinMode(AIN1, OUTPUT); pinMode(AIN2, OUTPUT); pinMode(PWMB, OUTPUT); pinMode(BIN1, OUTPUT); pinMode(BIN2, OUTPUT); } ////////////////////////////////////////// // Loop ////////////////////////////////////////// void loop(){ activer(MOTEUR_A, AVANT, 128); activer(MOTEUR_B, AVANT, 128); delay(3000); arreter_tout(); delay(1000); activer(MOTEUR_A, ARRIERE, 128); activer(MOTEUR_B, ARRIERE, 128); delay(3000); arreter_tout(); delay(1000); activer(MOTEUR_A, AVANT, 128); arreter(MOTEUR_B); delay(3000); arreter_tout(); delay(1000); arreter(MOTEUR_A); activer(MOTEUR_B, AVANT, 128); delay(3000); arreter_tout(); delay(1000); } ////////////////////////////////////////// // Fonction activer ////////////////////////////////////////// void activer(int moteur, int sens, int vitesse) // moteur : MOTEUR_A ou MOTEUR_B // sens : AVANT ou ARRIERE // vitesse : entre 0 et 255 { digitalWrite(STBY, HIGH); // desactive le standby switch (moteur) { case MOTEUR_A : if (sens==AVANT) { digitalWrite(AIN1,LOW); digitalWrite(AIN2,HIGH); } else { digitalWrite(AIN1,HIGH); digitalWrite(AIN2,LOW); } analogWrite(PWMA, vitesse); break; case MOTEUR_B : if (sens==AVANT) { digitalWrite(BIN1,LOW); digitalWrite(BIN2,HIGH); } else { digitalWrite(BIN1,HIGH); digitalWrite(BIN2,LOW); } analogWrite(PWMB, vitesse ); break; } } ////////////////////////////////////////// // Fonction arreter_tout ////////////////////////////////////////// void arreter_tout() { digitalWrite(STBY, LOW); // active le standby } ////////////////////////////////////////// // Fonction arreter ////////////////////////////////////////// void arreter(int moteur) { switch (moteur) { case MOTEUR_A : analogWrite(PWMA, 0); case MOTEUR_B : analogWrite(PWMB, 0); } }
Difficultés rencontrées
Les moteurs ont parfois bloqué à la vitesse maximale.