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