Composant · Pilote

TB6612FNG Motor Driver

Le TB6612FNG est un double pont en H MOSFET qui pilote deux moteurs CC en gaspillant presque aucune tension — la mise à niveau efficace du L298N.

Présentation

Le TB6612FNG est un contrôleur de moteurs à double pont en H qui fait le même travail qu’un L298N — se tenir entre les broches logiques d’un microcontrôleur et des moteurs voulant bien plus de courant — mais construit son étage de sortie en MOSFET au lieu de transistors bipolaires. Ce seul changement est toute l’histoire : un interrupteur MOSFET chute de quelques dixièmes de volt là où l’étage du L298N en chute environ deux.

Sur une batterie 6 V pilotant des moteurs 6 V, cette différence fait l’essentiel de votre vitesse. C’est aussi l’essentiel de votre chaleur : le L298N veut un dissipateur à courant soutenu, tandis qu’une carte TB6612FNG de la taille d’un timbre-poste reste à peine tiède.

Schéma fonctionnel : une barrette par réflectance QTR-MD-08A alimente un Arduino Nano sur les broches A0 à A7 ; le Nano pilote un TB6612FNG via STBY, PWMA, PWMB et les quatre broches de sens ; les sorties du contrôleur vont aux moteurs gauche et droit, et une batterie moteur séparée alimente la broche VM du contrôleur.
Toute la chaîne d'entraînement d'un robot labyrinthe de lignes. Notez que la batterie des moteurs n'atteint que VM — le 5 V de l'Arduino fournit la logique, jamais le courant moteur. Télécharger le SVG

Comment on le commande

Chaque moteur prend trois signaux, plus une broche commune pour la puce :

  • Deux broches de sens (AIN1/AIN2 pour le moteur A, BIN1/BIN2 pour le moteur B) choisissent avant, arrière, frein ou roue libre.
  • Une broche PWM (PWMA ou PWMB) fixe la vitesse. Contrairement au L298N, où le PWM passe par une broche de validation, le TB6612FNG a une entrée PWM dédiée par canal acceptant jusqu’à 100 kHz — assez haut pour commuter au-delà de l’audible et que votre robot cesse de siffler.
  • Une broche STBY, commune. Tenez-la au BAS et les deux ponts sont morts quoi que dise tout le reste.

Cette broche STBY vaut d’être répétée, car elle coûte une soirée aux débutants : un TB6612FNG correctement câblé avec STBY laissée flottante ou au BAS ne fait absolument rien, en silence, sans erreur à lire.

Quand l’utiliser

Prenez le TB6612FNG quand vos moteurs sont petits et votre batterie précieuse — ce qui décrit presque tout suiveur de ligne et robot labyrinthe de lignes. Les petits robots tournent en 6–7,4 V, exactement la plage où la taxe de 2 V du L298N fait le plus mal, et ils tournent sur une batterie à ne pas gaspiller en chaleur.

Restez avec le L298N quand votre alimentation moteur dépasse 13,5 V, que le TB6612FNG ne peut pas accepter, ou quand il faut plus d’environ 1,2 A continus par canal.

Câblage et pièges

  • Pilotez STBY au HAUT. La première chose que votre setup() doit faire après pinMode.
  • Deux alimentations, une masse. Batterie des moteurs au VM, 5 V de l’Arduino au VCC, et toutes les masses ensemble — Arduino, contrôleur, barrette de capteurs et moins batterie. Une masse commune manquante ne donne aucune référence aux signaux de commande, et la panne est silencieuse.
  • Respectez 13,5 V. Pas de régulateur embarqué ni de marge au-delà du maximum d’alimentation moteur. Un pack lithium 3S à 12,6 V nominaux le dépassera fraîchement chargé.
  • Un moteur tournant à l’envers se corrige en deux secondes. Inversez les deux fils de sortie de ce moteur, ou inversez sa logique de sens dans le micrologiciel. Faites cela avant tout autre réglage, ou vous chasserez un bogue de commande qui est en réalité un bogue de câblage.

Brochage

Deux rangées sur la carte courante style SparkFun : logique d’un côté, puissance et moteurs de l’autre.

Côté Broche Rôle
Logique VCC Alimentation logique, 2,7–5,5 V depuis le microcontrôleur
Logique GND Masse. Toute masse du robot s’y relie
Logique STBY Veille, active au bas. BAS = les deux ponts morts, en silence
Logique AIN1, AIN2 Sens du moteur A
Logique PWMA Vitesse du moteur A. Accepte jusqu’à 100 kHz
Logique BIN1, BIN2 Sens du moteur B
Logique PWMB Vitesse du moteur B
Puissance VM Alimentation moteur, 2,5–13,5 V. Ni régulateur, ni marge
Puissance GND Masse moteur
Moteurs AO1, AO2 Bornes du moteur A
Moteurs AO1, AO2 Bornes du moteur B (BO1, BO2)

La table de vérité

STBY IN1 IN2 PWM Résultat
BAS × × × Rien. Les deux ponts coupés, pas d’erreur, pas d’indice
HAUT HAUT BAS PWM Avant au rapport
HAUT BAS HAUT PWM Arrière au rapport
HAUT HAUT HAUT × Frein franc
HAUT BAS BAS HAUT Arrêt (roue libre)

La première ligne est celle qui coûte une soirée. Une carte parfaitement câblée avec STBY flottante ne fait absolument rien, et flottante est ce que fait une broche non pilotée. Pilotez-la au HAUT dans setup(), sur la première ligne après pinMode.

Le câbler à un Arduino

TB6612FNG Arduino Uno Note
VCC 5 V Logique seulement, quelques milliampères
GND GND Et au moins batterie, et à toute masse de capteur
STBY Broche 12 Ou au 5 V via une résistance 10 kΩ si on ne veut jamais le couper
PWMA Broche 9 Doit accepter le PWM
AIN1 Broche 8
AIN2 Broche 7
PWMB Broche 3 Doit accepter le PWM
BIN1 Broche 5
BIN2 Broche 4
VM Batterie moteurs + 2,5–13,5 V — vérifiez la tension réelle d’un pack frais

Code minimal fonctionnel

const int STBY = 12;
const int PWMA = 9, AIN1 = 8, AIN2 = 7;
const int PWMB = 3, BIN1 = 5, BIN2 = 4;

void setup() {
  for (int p : {STBY, PWMA, AIN1, AIN2, PWMB, BIN1, BIN2}) pinMode(p, OUTPUT);
  digitalWrite(STBY, HIGH);          // without this, nothing happens at all
}

// speed: -255..255
void driveA(int speed) {
  speed = constrain(speed, -255, 255);
  digitalWrite(AIN1, speed > 0);
  digitalWrite(AIN2, speed < 0);
  analogWrite(PWMA, abs(speed));
}

void brakeA() {                       // short brake: both direction pins high
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, HIGH);
}

void loop() {
  driveA(200); delay(1000);
  brakeA();    delay(300);
  driveA(-200); delay(1000);
  brakeA();    delay(300);
}

Supprimer le sifflement

C’est le superpouvoir discret du TB6612FNG et presque personne ne l’utilise. Le contrôleur accepte du PWM jusqu’à 100 kHz, mais l’analogWrite d’un Arduino Uno tourne à 490 Hz sur la plupart des broches et 980 Hz sur les broches 5 et 6 — carrément dans la bande audible, c’est pourquoi un robot chante en roulant.

L’oreille humaine plafonne vers 20 kHz. Poussez le PWM au-delà et le bruit disparaît entièrement. Sur un Uno, les broches 9 et 10 sont pilotées par le minuteur 1, reprogrammable :

void setup() {
  // Timer1 (pins 9, 10): phase-correct PWM, no prescaler -> ~31.4 kHz
  TCCR1B = (TCCR1B & 0b11111000) | 0x01;
}

Cette seule ligne monte la fréquence de commutation vers 31 kHz — inaudible, et bien dans le calibre du contrôleur. Le prix est que le minuteur 1 sert aussi à la bibliothèque Servo, donc pas les deux sur le même minuteur.

Un L298N ne peut pas vous suivre là-haut ; son étage bipolaire commute trop lentement et les pertes grimpent fortement avec la fréquence. C’est un vrai avantage pratique de l’étage MOSFET au-delà des chiffres de rendement.

Ce que 0,5 V au lieu de 2 V apporte vraiment

Alimentation Le L298N délivre Le TB6612FNG délivre Disponible en plus
6 V (4×AA) ~4,0 V ~5,5 V +38 %
7,4 V (Li-ion 2S) ~5,4 V ~6,9 V +28 %
12 V ~10,0 V ~11,5 V +15 %

Plus l’alimentation est basse, plus la différence compte — exactement l’inverse d’où on s’attend à ce qu’elle compte, et exactement pourquoi les petits robots sont transformés par l’échange.

Il y a aussi une conséquence thermique. À 1 A par canal, le L298N dissipe environ 2 W par canal ; le TB6612FNG dissipe environ 0,5 W sur les deux. C’est la différence entre une pièce voulant dissipateur et air, et une pièce à enterrer sous une plaque de châssis.

Dépannage

Symptôme Cause probable Solution
Absolument rien ne se passe STBY flottante ou au BAS Pilotez-la au HAUT — c’est la première chose à vérifier, à chaque fois
Rien ne se passe, STBY au haut Pas de masse commune Reliez contrôleur, carte, capteurs et moins batterie ensemble
Un moteur tourne à l’envers Fils ou logique inversés Inversez les deux fils de sortie de ce moteur, ou inversez sa logique
La vitesse est tout ou rien La broche PWM n’accepte pas le PWM Utilisez 3, 5, 6, 9, 10 ou 11 sur un Uno
Fort sifflement en roulant PWM dans la bande audible Montez la fréquence du minuteur au-delà de ~20 kHz
Contrôleur chaud et mort VM au-delà de 13,5 V Un pack 3S frais fait 12,6 V et plus ; vérifiez en charge
Les moteurs broutent en charge Alimentation qui s’affaisse, ou plus de 1,2 A continus Pack plus gros, ou mettez les deux canaux en parallèle pour un moteur
Marche sur l’établi, échoue sur moquette Courant continu au-delà du calibre La moquette augmente la charge ; mesurez le courant en conditions réelles

Deux canaux peuvent être mis en parallèle pour un seul moteur — reliez AIN1 à BIN1, AIN2 à BIN2, PWMA à PWMB, et les sorties ensemble — pour environ 2,4 A continus. La fiche technique le permet, et c’est la réponse standard quand un moteur dépasse à peine la limite.

Quand le TB6612FNG est le mauvais choix

C’est la valeur par défaut correcte pour les petits robots, et il y a trois cas nets où il ne l’est pas.

Au-delà de 13,5 V. Pas de marge ni régulateur. Un pack 4S est hors de question, et un pack 3S veut une vérification fraîchement chargé.

Au-delà de ~1,2 A continus par canal, et mettre les canaux en parallèle ne suffit pas. Un L298N gère 2 A par canal avec dissipateur, et un BTS7960 monte à 43 A pour les moteurs vraiment gros.

Quand il faut mesure ou limitation de courant. Le DRV8833 est proche du TB6612FNG à tout autre égard et ajoute une limitation de courant, qui permet au contrôleur de se protéger contre un blocage plutôt que compter sur votre code pour le remarquer.

Explorer le graphe

Utilisé dans ces réalisations

Projets, parcours d'apprentissage et simulateurs qui intègrent le composant TB6612FNG Motor Driver.

Comparer

Alternatives

Questions

FAQ : TB6612FNG Motor Driver

Qu'est-ce que le contrôleur de moteurs TB6612FNG ?

Le TB6612FNG est un contrôleur à double pont en H construit en MOSFET plutôt qu'en transistors bipolaires anciens. Il prend des signaux de sens et PWM faible puissance d'un microcontrôleur et commute une alimentation moteur séparée pour piloter deux moteurs à courant continu indépendamment, délivrant 1,2 A continus par canal avec des crêtes à 3,2 A.

Le TB6612FNG vaut-il mieux que le L298N ?

Pour les petits moteurs de robots, oui. L'étage de sortie à transistors du L298N chute d'environ 2 V avant que le moteur ne voie quoi que ce soit, donc un moteur 6 V sur un pack 6 V tourne faible et la puce veut un dissipateur. L'étage MOSFET du TB6612FNG chute de quelques dixièmes de volt, reste froid sans dissipateur, et est bien plus petit. Le L298N gagne encore quand il faut plus de 13,5 V d'alimentation moteur, que le TB6612FNG ne peut pas accepter.

Comment câbler un TB6612FNG à un Arduino ?

Batterie des moteurs au VM, 5 V de l'Arduino au VCC, et toutes les masses ensemble — Arduino, contrôleur, capteurs et moins batterie. Puis STBY à une broche numérique, et par moteur deux broches de sens (AIN1/AIN2 ou BIN1/BIN2) plus une broche PWM (PWMA ou PWMB). Les moteurs se connectent aux bornes AO1/AO2 et BO1/BO2.

Que fait la broche STBY sur un TB6612FNG ?

STBY est une validation de veille pour toute la puce. Maintenue au BAS, les deux ponts sont coupés et les moteurs sont en roue libre quoi que disent les autres broches. Il faut la piloter au HAUT avant que quoi que ce soit bouge — l'oublier est la raison la plus fréquente pour laquelle un TB6612FNG fraîchement câblé ne fait rien du tout.

Combien de courant un TB6612FNG supporte-t-il ?

1,2 A continus par canal, avec de courtes crêtes jusqu'à 3,2 A. Cela couvre confortablement les petits motoréducteurs jaunes et moteurs N20 des suiveurs de ligne et robots labyrinthe. Les moteurs plus gros bloquant au-delà de 1,2 A déclencheront son arrêt thermique ; passez plutôt à un contrôleur comme le DRV8871 ou un vrai variateur à balais.

Pour aller plus loin

Références