Contrôle de deux moteurs CC avec TB6612FNG

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.

Sources

Sparkfun
Bildr
www.mon-club-elec.fr