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.