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);
}
}