Contrôleur TB6612FNG

Matériel testé : double pont en H à base de TB6612FNG

Bibliothèque (facultatif) : TB6612FNG

Description

Ce circuit, très bon marché (moins de 1€), offre un bon moyen de piloter jusqu’à deux moteurs à courant continu.

  • Il peut délivrer jusqu’à 1.2A en continu et 3.2A en pointe.
  • Il permet d’utiliser l’alimentation 5V de l’Arduino (pratique lorsqu’on souhaite piloter de tout petits moteurs pour lesquels on n’a pas besoin d’alimentation externe)

 

Cette platine utilise un circuit intégré TB6612FNG

Commande

Les ports PWMA et PWMB permettent de gérer l’amplitude de la tension délivrée au moteur, grâce à un signal PWM.

Les ports AIN1, AIN2 pour le moteur A et BIN1, IBIN2 pour le moteur B, permettent de contrôler le pont en H et par conséquent le sens de rotation des moteurs.

Arrêt (moteur libre) Sens + Sens – Arrêt (moteur freiné)
Moteur A Moteur B
AIN1 BIN1 LOW HIGH LOW HIGH
AIN2 BIN2 LOW LOW HIGH HIGH

Câblage

Alimentation

L’alimentation de puissance VM peut être fournie par l’Arduino lui-même (5V) ou bien par une alimentation externe (2.2V à 13.5V).

L’alimentation du circuit logique VCC peut être fournie par l’Arduino (de 2.5V à 5.5V)

Le port d’entrée STBY permet d’activer/désactiver le pont : il doit être mis à l’état HIGH  pour que le pont fonctionne. Mis à l’état LOW , il permet d’économiser de l’énergie.

Moteurs

Les moteurs à contrôler doivent être connectés aux ports de sortie AO1, AO2, BO1 et BO2.

Exemple de câblage

Esquisse fritzing : TB6612FNG

Programmation

Il est possible de piloter « manuellement » le pont en modifiant l’état des entrées de contrôle.

Cependant, il existe une bibliothèque (TB6612FNG) qui permet de commander plus simplement deux moteurs, comme s’il s’agissait de ceux d’un robot à mouvement différentiel.

#include <SparkFun_TB6612.h>

// Configuration des sens de rotation des moteurs (1 ou -1)
const int offsetA = 1;
const int offsetB = 1;

// Ports numériques associés aux entrées de contrôle (les entrées PWM doivent être connectées à des ports PWM de l'Arduino)
#define AIN1 9
#define BIN1 7
#define AIN2 10
#define BIN2 6
#define PWMA 11
#define PWMB 5
#define STBY 8

// Initialisation des moteurs
Motor motor1 = Motor(AIN1, AIN2, PWMA, offsetA, STBY);
Motor motor2 = Motor(BIN1, BIN2, PWMB, offsetB, STBY);
 
void setup()
{
}

void loop()
{
   //Use of the drive function which takes as arguements the speed
   //and optional duration.  A negative speed will cause it to go
   //backwards.  Speed can be from -255 to 255.  Also use of the 
   //brake function which takes no arguements.
   motor1.drive(255,1000);
   motor1.drive(-255,1000);
   motor1.brake();
   delay(1000);

   //Use of the drive function which takes as arguements the speed
   //and optional duration.  A negative speed will cause it to go
   //backwards.  Speed can be from -255 to 255.  Also use of the 
   //brake function which takes no arguements.
   motor2.drive(255,1000);
   motor2.drive(-255,1000);
   motor2.brake();
   delay(1000);

   //Use of the forward function, which takes as arguements two motors
   //and optionally a speed.  If a negative number is used for speed
   //it will go backwards
   forward(motor1, motor2, 150);
   delay(1000);

   //Use of the back function, which takes as arguments two motors 
   //and optionally a speed.  Either a positive number or a negative
   //number for speed will cause it to go backwards
   back(motor1, motor2, -150);
   delay(1000);

   //Use of the brake function which takes as arguments two motors.
   //Note that functions do not stop motors on their own.
   brake(motor1, motor2);
   delay(1000);

   //Use of the left and right functions which take as arguements two
   //motors and a speed.  This function turns both motors to move in 
   //the appropriate direction.  For turning a single motor use drive.
   left(motor1, motor2, 100);
   delay(1000);
   right(motor1, motor2, 100);
   delay(1000);

   //Use of brake again.
   brake(motor1, motor2);
   delay(1000);

}

 

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *