Accueil > ARDUINO > Drivers moteurs > Arduino & Driver TB6612FNG pour moteur à courant continu
samedi 19 décembre 2015, par
Le driver TB6612FNG proposé par POLOLU permet de commander 2 moteurs à courant continu dans les 2 sens de rotation avec variation de vitesse (PWM)
page du produit chez POLOLU https://www.pololu.com/product/713/,
documentation du composant TB6612FNG fabriqué par TOSHIBA https://www.pololu.com/file/download/TB6612FNG.pdf?file_id=0J86
le circuit comporte 2 ponts en H (1 pour chaque moteur). Remarque : Les diodes de roues libres sont intégrées au driver :
courant de sortie maxi : 1 A
alimentation et tensions d’utilisation de la partie commande : 2,7 V à 5 V
alimentation de la partie puissance : 4,5 V à 13,5 V
commande des moteurs. Le driver ne fonctionne que si /STBY est au niveau logique 1.
Pour commander l’un des moteurs, on utilise 3 entrées :
IN1 et IN2 qui permettent de choisir le sens de rotation
PWM qui permet de commander la variation de vitesse (commande PWM = MLI en français)
Commande en tout ou rien
xIN1 | xIN2 | xPWM | OUT1 | OUT2 | Mode | |
---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | arrêt | |
0 | 1 | 1 | 0 | 1 | sens 1 | |
1 | 0 | 1 | 1 | 0 | sens 2 | |
1 | 1 | X | 0 | 0 | arrêt |
En commande avec variation de vitesse :
xIN1 | xIN2 | OUT1 | OUT2 | Mode | |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | arrêt | |
0 | 1 | 0 | xPWM | variation de vitesse sens 1 | |
1 | 0 | xPWM | 0 | variation de vitesse sens 2 | |
1 | 1 | 0 | 0 | arrêt |
Dans les exemples suivants, j’utilise les broches 1, 2, 3 (sortie PWM) pour commander le moteur :
broche 1 -> AIN1,
broche 2 -> AIN2,
broche 3 -> PWMA
Pour l’alimentation et la commande /STBY :
5V arduino -> Vcc,
GND arduino -> GND
5V arduino -> /STBY
ATTENTION au sens de mise en place du driver sur la plaquette d’essai !
Exemple 1 : le programme permet de commander en tout ou rien le moteur A :
dans le sens 1 pendant 5s,
à l’arrêt pendant 2s,
dans le sens 2 pendant 5s,
à l’arrêt pendant 2s,
et ainsi de suite ...
int PWMA=3; int AIN1=1; int AIN2=2; void setup() { // broches 3 (PWMA), 1 (AIN1), 2 (AIN2) en sorties pinMode(PWMA,OUTPUT); pinMode(AIN1,OUTPUT); pinMode(AIN2,OUTPUT); } void loop() { // commande PWMA à pleine vitesse (1 logique) digitalWrite(PWMA,1); // sens 1 : AIN1=1, AIN2=0 pendant 5 s digitalWrite(AIN1,1); digitalWrite(AIN2,0); delay(5000); // stop : AIN1=0, AIN2=0 pendant 2 s digitalWrite(AIN1,0); digitalWrite(AIN2,0); delay(2000); // sens 2 : AIN1=0, AIN2=1 pendant 5 s digitalWrite(AIN1,0); digitalWrite(AIN2,1); delay(5000); // stop : AIN1=0, AIN2=0 pendant 2 s digitalWrite(AIN1,0); digitalWrite(AIN2,0); delay(2000); }
Exemple 2 : le programme suivant permet d’accélérer (en faisant varier le rapport cyclique de 0 à 1 (codé sur 8 bits de 0 à 255)) puis de décélérer (en faisant varier le rapport cyclique de 1 à 0 (codé sur 8 bits de 255 à 0)).
Pour faire varier le rapport cyclique, j’utilise la commande (PWMA = numéro de broche, a=rapport cyclique codé sur 8 bits) :
analogWrite(PWMA,a)
Le programme
int PWMA=3; int AIN1=1; int AIN2=2; int a; // rapport cyclique entre 0 et 255 void setup() { // broches 3 (PWMA), 1 (AIN1), 2 (AIN2) en sorties pinMode(PWMA,OUTPUT); pinMode(AIN1,OUTPUT); pinMode(AIN2,OUTPUT); } void loop() { // on ne travaille que dans le sens 1 : AIN1=1, AIN2=0 digitalWrite(AIN1,1); digitalWrite(AIN2,0); // phase d'accélération : le rapport cyclique va varier de 0 à 255 a=0; while (a <= 255) { analogWrite(PWMA, a); a = a + 1; delay(20); } // phase de décelération : le rapport cyclique va varier de 255 à 0 while (a >=0) { // phase de décélération analogWrite(PWMA, a); a = a - 1; delay(20); } }