Bauteil · Treiber
TB6612FNG-Motortreiber
Der TB6612FNG ist eine MOSFET-Doppel-H-Brücke, die zwei DC-Motoren treibt und dabei fast keine Spannung verschwendet – das effiziente Upgrade vom L298N.
Was es ist
Der TB6612FNG ist ein Doppel-H-Brücken-Motortreiber, der denselben Job tut wie ein L298N – zwischen den Logikpins eines Mikrocontrollers und Motoren stehen, die weit mehr Strom wollen –, aber seine Ausgangsstufe aus MOSFETs statt Bipolartransistoren baut. Diese eine Änderung ist die ganze Geschichte: Ein MOSFET-Schalter verliert wenige Zehntelvolt, wo die L298N-Stufe rund zwei verliert.
An 6-V-Batterie mit 6-V-Motoren ist diese Differenz der Großteil deiner Drehzahl. Sie ist auch der Großteil deiner Wärme: Der L298N will bei Dauerstrom einen Kühlkörper, während ein TB6612FNG-Träger in Briefmarkengröße bloß handwarm läuft.
Wie man ihn steuert
Jeder Motor nimmt drei Signale, plus einen gemeinsamen Pin für den Chip:
- Zwei Richtungspins (AIN1/AIN2 für Motor A, BIN1/BIN2 für Motor B) wählen vorwärts, rückwärts, Bremse oder Ausrollen.
- Ein PWM-Pin (PWMA oder PWMB) setzt die Drehzahl. Anders als beim L298N, wo PWM auf einem Enable-Pin reitet, hat der TB6612FNG einen eigenen PWM-Eingang pro Kanal bis 100 kHz – hoch genug, um oberhalb des Hörbereichs zu schalten, damit dein Roboter aufhört zu jaulen.
- Ein STBY-Pin, gemeinsam. LOW gehalten und beide Brücken sind tot, egal was sonst gilt.
Dieser STBY-Pin verdient Wiederholung, weil er Anfänger einen Abend kostet: Ein korrekt verdrahteter TB6612FNG mit offenem oder LOW STBY tut absolut nichts, lautlos, ohne lesbaren Fehler.
Wann man ihn verwendet
Zum TB6612FNG greifen, wenn die Motoren klein und die Batterie kostbar sind – was fast jeden Linienfolger und Linienlabyrinth-Roboter beschreibt. Kleine Roboter fahren mit 6–7,4 V, genau dem Bereich, wo die 2-V-Steuer des L298N am meisten wehtut – und sie fahren auf einer Batterie, die man lieber nicht als Wärme vergeudet.
Beim L298N bleiben, wenn die Motorversorgung 13,5 V übersteigt, was der TB6612FNG nicht verträgt, oder wenn dauerhaft mehr als etwa 1,2 A pro Kanal nötig sind.
Verdrahtung und Fallstricke
- STBY HIGH treiben. Das Erste, was
setup()nachpinModetun sollte. - Zwei Versorgungen, eine Masse. Motorbatterie an VM, Arduino-5-V an VCC, und alle Massen verbunden – Arduino, Treiber, Sensorarray und Batterieminus. Eine fehlende gemeinsame Masse gibt Steuersignalen keine Referenz, und der Fehler ist lautlos.
- 13,5 V respektieren. Kein Bordregler und kein Spielraum über der maximalen Motorversorgung. Ein 3S-Lithiumpack mit 12,6 V Nennwert überschreitet sie frisch geladen.
- Ein falschherum drehender Motor ist zwei Sekunden Arbeit. Die zwei Ausgangsdrähte dieses Motors tauschen oder seine Richtungslogik in Firmware invertieren. Tun, bevor man sonst etwas abstimmt – sonst jagt man einen Regelfehler, der wirklich ein Verdrahtungsfehler ist.
Pinbelegung
Zwei Reihen auf dem gängigen SparkFun-Träger: Logik auf einer Seite, Leistung und Motoren auf der anderen.
| Seite | Pin | Was er tut |
|---|---|---|
| Logik | VCC |
Logikversorgung, 2,7–5,5 V vom Mikrocontroller |
| Logik | GND |
Masse. Jede Masse des Roboters bindet hier |
| Logik | STBY |
Standby, active low. LOW = beide Brücken tot, lautlos |
| Logik | AIN1, AIN2 |
Motor-A-Richtung |
| Logik | PWMA |
Motor-A-Drehzahl. Verträgt bis 100 kHz |
| Logik | BIN1, BIN2 |
Motor-B-Richtung |
| Logik | PWMB |
Motor-B-Drehzahl |
| Leistung | VM |
Motorversorgung, 2,5–13,5 V. Kein Regler, kein Spielraum |
| Leistung | GND |
Motormasse |
| Motoren | AO1, AO2 |
Motor-A-Klemmen |
| Motoren | AO1, AO2 |
Motor-B-Klemmen (BO1, BO2) |
Die Wahrheitstabelle
STBY |
IN1 |
IN2 |
PWM |
Ergebnis |
|---|---|---|---|---|
| LOW | × | × | × | Nichts. Beide Brücken aus, kein Fehler, kein Hinweis |
| HIGH | HIGH | LOW | PWM | Vorwärts mit Tastverhältnis |
| HIGH | LOW | HIGH | PWM | Rückwärts mit Tastverhältnis |
| HIGH | HIGH | HIGH | × | Kurzschlussbremse |
| HIGH | LOW | LOW | HIGH | Stopp (Ausrollen) |
Die oberste Zeile kostet Leute einen Abend. Eine perfekt verdrahtete Platine mit offenem STBY tut absolut nichts – und offen ist, was ein ungetriebener Pin tut. STBY in setup() HIGH treiben, in der ersten Zeile nach pinMode.
An einen Arduino verdrahten
| TB6612FNG | Arduino Uno | Hinweis |
|---|---|---|
VCC |
5 V | Nur Logik, wenige Milliampere |
GND |
GND | Und an Batterieminus, und an jede Sensormasse |
STBY |
Pin 12 | Oder per 10-kΩ-Widerstand an 5 V legen, wenn man ihn nie abschalten will |
PWMA |
Pin 9 | Muss PWM-fähig sein |
AIN1 |
Pin 8 | |
AIN2 |
Pin 7 | |
PWMB |
Pin 3 | Muss PWM-fähig sein |
BIN1 |
Pin 5 | |
BIN2 |
Pin 4 | |
VM |
Motorbatterie + | 2,5–13,5 V – echte Spannung eines frischen Packs prüfen |
Minimal funktionierender Code
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);
}
Das Jaulen loswerden
Das ist die leise Superkraft des TB6612FNG und fast niemand nutzt sie. Der Treiber verträgt PWM bis 100 kHz, aber analogWrite eines Arduino Uno läuft mit 490 Hz auf den meisten Pins und 980 Hz auf Pins 5 und 6 – mitten im Hörbereich, weshalb ein Roboter beim Fahren singt.
Menschliches Hören endet um 20 kHz. Das PWM darüber schieben und das Geräusch verschwindet vollständig. Am Uno hängen Pins 9 und 10 an Timer 1, den man umprogrammieren kann:
void setup() {
// Timer1 (pins 9, 10): phase-correct PWM, no prescaler -> ~31.4 kHz
TCCR1B = (TCCR1B & 0b11111000) | 0x01;
}
Diese eine Zeile verlegt die Schaltfrequenz auf etwa 31 kHz – unhörbar und weiter gut innerhalb der Treiberangabe. Der Preis: Timer 1 nutzt auch die Servo-Bibliothek – beides geht also nicht am selben Timer.
Ein L298N folgt nicht dorthin; seine Bipolarstufe schaltet zu langsam und die Verluste steigen steil mit der Frequenz. Das ist ein echter, praktischer Vorteil der MOSFET-Stufe jenseits der Wirkungsgradzahlen.
Was 0,5 V statt 2 V wirklich bringen
| Versorgung | L298N liefert | TB6612FNG liefert | Extra verfügbar |
|---|---|---|---|
| 6 V (4×AA) | ~4,0 V | ~5,5 V | +38 % |
| 7,4 V (2S-Li-Ion) | ~5,4 V | ~6,9 V | +28 % |
| 12 V | ~10,0 V | ~11,5 V | +15 % |
Je niedriger die Versorgung, desto mehr zählt die Differenz – genau verkehrt zu dort, wo Leute es erwarten, und genau warum kleine Roboter sich durch den Tausch verwandelt anfühlen.
Dazu eine thermische Folge: Bei 1 A pro Kanal verheizt der L298N grob 2 W pro Kanal; der TB6612FNG verheizt über beide grob 0,5 W. Das ist der Unterschied zwischen einem Teil, das Kühlkörper und Luftstrom braucht, und einem, das man unter einer Chassisplatte vergraben kann.
Fehlersuche
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Absolut nichts geschieht | STBY offen oder LOW |
HIGH treiben – das Erste, was man prüft, jedes Mal |
Nichts geschieht, STBY ist high |
Keine gemeinsame Masse | Treiber, Board, Sensoren und Batterieminus verbinden |
| Ein Motor läuft rückwärts | Leitungen oder Logik invertiert | Die zwei Ausgangsdrähte dieses Motors tauschen oder seine Logik invertieren |
| Drehzahl nur an/aus | PWM-Pin nicht PWM-fähig | 3, 5, 6, 9, 10 oder 11 am Uno verwenden |
| Lautes Jaulen beim Fahren | PWM im Hörbereich | Timerfrequenz über ~20 kHz heben |
| Treiber wurde heiß und starb | VM über 13,5 V |
Ein frischer 3S-Pack hat 12,6 V und steigend; unter Ladung prüfen |
| Motoren stottern unter Last | Versorgung bricht ein oder über 1,2 A Dauer | Größerer Pack oder beide Kanäle für einen Motor parallel |
| Auf der Werkbank in Ordnung, auf Teppich Ausfall | Dauerstrom über Angabe | Teppich erhöht Last; Strom mit Messgerät unter echten Bedingungen prüfen |
Zwei Kanäle lassen sich für einen Motor parallel schalten – AIN1 an BIN1, AIN2 an BIN2, PWMA an PWMB und die Ausgänge zusammen – für grob 2,4 A Dauer. Das Datenblatt stützt es, und es ist die Standardantwort, wenn ein Motor knapp über der Grenze liegt.
Wann der TB6612FNG die falsche Wahl ist
Er ist die richtige Voreinstellung für kleine Roboter – und es gibt drei klare Fälle, in denen er es nicht ist.
Über 13,5 V. Kein Spielraum und kein Regler. Ein 4S-Pack scheidet aus, und ein 3S-Pack braucht frisch geladen Prüfung.
Über ~1,2 A Dauer pro Kanal, und Parallelschalten reicht nicht weit genug. Ein L298N schafft 2 A pro Kanal mit Kühlung, und ein BTS7960 geht bis 43 A für wirklich große Motoren.
Wenn man Strommessung oder -begrenzung braucht. Der DRV8833 liegt in jeder anderen Hinsicht nah am TB6612FNG und bringt Strombegrenzung dazu – womit sich der Treiber gegen Blockieren selbst schützt statt darauf zu bauen, dass der Code es bemerkt.
Den Graphen erkunden
Verwendet in diesen Bauprojekten
Projekte, Lernpfade und Simulatoren, die TB6612FNG-Motortreiber verwenden.
- ProjektEinen Mecanum-Roboter bauen, der seitwärts fährt
- ProjektEinen Raumabdeckungsroboter bauen, der Böden kehrt
- ProjektEinen ROS-2-Roboter bauen, der sieht und zu einem Marker fährt
- ProjektGPS-Wegpunkt-Rover bauen: Fährt seine Route selbst
- ProjektLinien-Labyrinthlöser bauen: Mit LSRB-Routenspeicher
- ProjektMicromouse bauen: Labyrinth-Roboter mit Flood-Fill
- ProjektMini-Sumo-Roboter bauen: Grip, Keil, Kantensensorik
- ProjektSelbstbalancierender Roboter: MPU6050 und PID
- LernpfadMotorsteuerung für Roboter: Ein Lernpfad
Vergleich
Alternativen
Fragen
FAQ zu TB6612FNG-Motortreiber
Was ist der TB6612FNG-Motortreiber?
Der TB6612FNG ist ein Doppel-H-Brücken-Motortreiber aus MOSFETs statt älteren Bipolartransistoren. Er nimmt leistungsschwache Richtungs- und PWM-Signale vom Mikrocontroller und schaltet eine separate Motorversorgung, um zwei DC-Motoren unabhängig zu treiben – 1,2 A Dauer pro Kanal mit 3,2-A-Spitzen.
Ist der TB6612FNG besser als der L298N?
Für kleine Robotermotoren ja. Die Transistorausgangsstufe des L298N verliert grob 2 V, bevor der Motor etwas sieht – ein 6-V-Motor am 6-V-Pack läuft also schwach und der Chip braucht einen Kühlkörper. Die MOSFET-Stufe des TB6612FNG verliert wenige Zehntelvolt, läuft kühl ohne Kühlkörper und ist weit kleiner. Der L298N gewinnt weiter, wenn man mehr als 13,5 V Motorversorgung braucht, die der TB6612FNG nicht verträgt.
Wie verdrahtet man einen TB6612FNG an Arduino?
Motorbatterie-Plus an VM, Arduino-5-V an VCC, und jede Masse verbunden – Arduino, Treiber, Sensoren und Batterieminus. Dann STBY an einen Digitalpin, und pro Motor zwei Richtungspins (AIN1/AIN2 oder BIN1/BIN2) plus einen PWM-Pin (PWMA oder PWMB). Motoren an die Klemmen AO1/AO2 und BO1/BO2.
Was tut der STBY-Pin am TB6612FNG?
STBY ist eine Standby-Freigabe für den ganzen Chip. LOW gehalten sind beide Brücken abgeschaltet und die Motoren rollen aus – egal was die anderen Pins sagen. Man muss ihn HIGH treiben, bevor sich etwas bewegt – ihn zu vergessen ist der häufigste einzelne Grund, warum ein frisch verdrahteter TB6612FNG gar nichts tut.
Wie viel Strom verträgt ein TB6612FNG?
1,2 A Dauer pro Kanal, mit kurzen Spitzen bis 3,2 A. Das deckt die kleinen gelben Getriebemotoren und N20-Motoren in Linienfolgern und Labyrinthrobotern bequem ab. Größere Motoren, die über 1,2 A blockieren, treiben seine thermische Abschaltung an – dann zu einem Treiber wie DRV8871 oder einem echten Bürsten-ESC aufrüsten.
Weiterführende Literatur