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.

Blockschaltbild: ein QTR-MD-08A-Reflexionsarray speist einen Arduino Nano über Pins A0 bis A7; der Nano treibt einen TB6612FNG über STBY, PWMA, PWMB und die vier Richtungspins; die Treiberausgänge gehen zu linkem und rechtem Motor, und eine separate Motorbatterie speist den VM-Pin des Treibers.
Die gesamte Antriebskette für einen Linienlabyrinth-Roboter. Beachte: Die Motorbatterie erreicht nur VM – die 5 V des Arduino liefern Logik, nie Motorstrom. SVG herunterladen

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() nach pinMode tun 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.

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

Quellen