Menu courant

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