Principe de fonctionnement
Le circuit et les moteurs sont alimentés par une même alimentation de maximum 10,8V.
Chaque moteur est contrôlé par deux signaux PWM (de 0 à 255) :
- AIN1 et AIN2 pour le moteur A
- BIN1 et BIN2 pour le moteur B
Le principe est le suivant.
– Pour avancer : l’une des entrées est à HIGH et l’autre contient la vitesse
– Pour reculer : on inverse le rôle des deux entrées.
– Pour s’arrêter : les deux entrées sont à LOW
Tableau des broches
Côté commande
Nom de la broche | Signification |
GND | Masse |
VMM | Broche permettant d’alimenter si besoin d’autres circuits |
BIN1 | Première commande PWM du moteur B |
BIN2 | Deuxième commande PWM du moteur B |
AIN2 | Deuxième commande PWM du moteur A |
AIN1 | Première commande PWM du moteur A |
nSLEEP | Mise en veille (si niveau LOW) |
nFAULT | Messages d’erreurs |
Côté des sorties et alimentations
Nom de la broche | Signification |
GND | Masse |
VIN | Tension d’alimentation des moteurs (de2,7V à 10.8v) |
BOUT1 | Première commande du moteur B |
BOUT2 | Deuxième commande du moteur B |
AOUT2 | Deuxième commande du moteur A |
AOUT1 | Première commande du moteur A |
AISEN | Sortie de détection du moteur A |
BISEN | Sortie de détection du moteur B |
Instructions de branchement
Il est impératif relier toutes les masses.
Pour une utilisation standard, il est inutile de brancher VMM, nSLEEP, nFAULT, AISEN et BISEN.
Exemple de code Arduino
////////////////////////////////////////// // Branchements ////////////////////////////////////////// //Moteur A int AIN1 = 5; // Vitesse (PWM) int AIN2 = 6; // Vitesse (PWM) //Motor B int BIN1 = 9; // Vitesse (PWM) int BIN2 = 10; // Vitesse (PWM) ////////////////////////////////////////// // Constantes ////////////////////////////////////////// const int MOTEUR_A=0; const int MOTEUR_B=1; const int AVANT=0; const int ARRIERE=1; ////////////////////////////////////////// // Setup ////////////////////////////////////////// void setup() { pinMode(AIN1, OUTPUT); pinMode(AIN2, 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 { switch (moteur) { case MOTEUR_A : if (sens==AVANT) { digitalWrite(AIN1,HIGH); analogWrite(AIN2,vitesse); } else { digitalWrite(AIN2,HIGH); analogWrite(AIN1,vitesse); } break; case MOTEUR_B : if (sens==AVANT) { digitalWrite(BIN1,HIGH); analogWrite(BIN2,vitesse); } else { digitalWrite(BIN2,HIGH); analogWrite(BIN1,vitesse); } breaak; } } ////////////////////////////////////////// // Fonction arreter_tout ////////////////////////////////////////// void arreter_tout() { digitalWrite(AIN1, LOW); digitalWrite(AIN2, LOW); digitalWrite(BIN1, LOW); digitalWrite(BIN2, LOW); } ////////////////////////////////////////// // Fonction arreter ////////////////////////////////////////// void arreter(int moteur) { switch (moteur) { case MOTEUR_A : digitalWrite(AIN1, LOW); digitalWrite(AIN2, LOW); case MOTEUR_B : digitalWrite(BIN1, LOW); digitalWrite(BIN2, LOW); } }