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.
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èspinMode. - 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.
- ProjetConstruire un Micromouse : solveur de labyrinthe
- ProjetConstruire un mini robot sumo : adhérence et coin
- ProjetConstruire un robot de couverture qui balaie une pièce
- ProjetConstruire un robot équilibriste avec un MPU6050 et un PID
- ProjetConstruire un robot Mecanum qui roule de côté
- ProjetConstruire un robot ROS 2 qui voit et roule vers un marqueur
- ProjetConstruire un rover GPS à waypoints qui roule tout seul
- ProjetConstruire un solveur de labyrinthe de lignes à mémoire LSRB
- Parcours d'apprentissageCommande des moteurs pour robots : un parcours d'apprentissage
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