Component · Driver
TB6612FNG-motordriver
De TB6612FNG is een motordriver met een dubbele MOSFET-H-brug die twee gelijkstroommotoren aanstuurt en bijna geen spanning verliest: efficiënter dan een L298N.
Wat het is
De TB6612FNG is een motordriver met een dubbele MOSFET-H-brug die dezelfde taak doet als een L298N — tussen de logica-pins van een microcontroller en motoren die veel meer stroom willen — maar zijn uitgangstrap opbouwt uit MOSFET’s in plaats van bipolaire transistoren. Die ene verandering is het hele verhaal: een MOSFET-schakelaar laat enkele honderdsten volt vallen waar de trap van de L298N een spanningsval van ongeveer 2 V heeft.
Op een 6 V-accu die 6 V-motoren aanstuurt, is dat verschil het grootste deel van je snelheid. Het is ook het grootste deel van je warmte: de L298N heeft bij langdurige stroom een koellichaam nodig, terwijl een TB6612FNG-drager ter grootte van een postzegel slechts lauw wordt.
Hoe je hem bestuurt
Elke motor heeft drie signalen nodig, plus één gedeelde pin voor de chip:
- Twee richtingspinnen (AIN1/AIN2 voor motor A, BIN1/BIN2 voor motor B) selecteren vooruit, achteruit, remmen of vrijlopen.
- Eén PWM-pin (PWMA of PWMB) bepaalt de snelheid. Anders dan bij de L298N, waar PWM op een inschakelpin zit, heeft de TB6612FNG een eigen PWM-ingang per kanaal die tot 100 kHz accepteert—hoog genoeg om boven het hoorbare frequentiebereik te schakelen zodat je robot niet meer piept.
- Eén STBY-pin, gedeeld. Houd hem op LOW en beide bruggen zijn dood, ongeacht al het andere.
Die STBY-pin is het herhalen waard: een correct bedraadde TB6612FNG met een zwevende of op LOW staande STBY doet absoluut niets; de storing blijft onopgemerkt.
Wanneer je hem gebruikt
Kies de TB6612FNG wanneer je motoren klein zijn en je accu waardevol is—dat beschrijft vrijwel elke lijnvolger en lijndoolhofrobot. Kleine robots werken op 6–7,4 V, precies het bereik waarin het spanningsverlies van de L298N het meest pijn doet, en ze draaien op een accu waarvan je liever geen energie als warmte verliest.
Blijf bij de L298N wanneer je motorvoeding hoger is dan 13,5 V, wat de TB6612FNG niet accepteert, of wanneer je meer dan ongeveer 1,2 A aanhoudende stroom per kanaal nodig hebt.
Aansluiting en aandachtspunten
- Stuur STBY HIGH in
setup(). Voer napinModedirectdigitalWrite(STBY, HIGH)uit. - Twee voedingen, één ground. Motoraccu naar VM, 5 V van de Arduino naar VCC en alle grounds aan elkaar koppelen—Arduino, motordriver, reflectiesensorarray en de minpool van de accu. Zonder gezamenlijke ground hebben de besturingssignalen geen referentie, en de storing blijft onopgemerkt.
- Respecteer 13,5 V. Er is geen ingebouwde regulator en geen marge boven de maximale motorvoeding. Een 3S-lithiumaccu met een nominale spanning van 12,6 V overschrijdt die waarde wanneer hij vers is opgeladen.
- Een motor die de verkeerde kant op draait, repareer je in twee seconden. Verwissel de twee uitgangsdraden van die motor, of keer zijn richtingslogica om in firmware. Doe dat voordat je iets anders afstelt, anders jaag je een regelfout na die eigenlijk een bedradingsfout is.
Pinindeling
Twee rijen op het gangbare SparkFun-achtige dragerbord: logica aan de ene kant, voeding en motoren aan de andere.
| Zijde | Pin | Functie |
|---|---|---|
| Logica | VCC |
Logische voeding, 2,7–5,5 V vanaf de microcontroller |
| Logica | GND |
Ground. Alle grounds van de robot worden hier gekoppeld |
| Logica | STBY |
Standby, actief laag. LOW = beide bruggen dood, stil |
| Logica | AIN1, AIN2 |
Richting motor A |
| Logica | PWMA |
Snelheid motor A. Accepteert tot 100 kHz |
| Logica | BIN1, BIN2 |
Richting motor B |
| Logica | PWMB |
Snelheid motor B |
| Voeding | VM |
Motorvoeding, 2,5–13,5 V. Geen regulator, geen marge |
| Voeding | GND |
Motor-ground |
| Motoren | AO1, AO2 |
Aansluitingen motor A |
| Motoren | AO1, AO2 |
Aansluitingen motor B (BO1, BO2) |
De functietabel
STBY |
IN1 |
IN2 |
PWM |
Resultaat |
|---|---|---|---|---|
| LOW | × | × | × | Niets. Beide bruggen uit, geen fout, geen aanwijzing |
| HIGH | HIGH | LOW | PWM | Vooruit met de opgegeven werkverhouding |
| HIGH | LOW | HIGH | PWM | Achteruit met de opgegeven werkverhouding |
| HIGH | HIGH | HIGH | × | Kort remmen |
| HIGH | LOW | LOW | HIGH | Stop (vrijlopen) |
De bovenste rij kost mensen al snel een avond: een perfect bedraad bord met een zwevende of op LOW staande STBY doet niets, en een niet-aangestuurde pin zweeft. Stuur STBY in setup() HIGH, direct na pinMode.
Aansluiten op een Arduino
| TB6612FNG | Arduino Uno | Opmerking |
|---|---|---|
VCC |
5 V | Alleen logica, een paar milliampères |
GND |
GND | En aan de minpool van de accu en aan elke sensor-ground |
STBY |
Pin 12 | Sluit hem via een 10 kΩ-weerstand aan op 5 V als je hem nooit wilt uitschakelen |
PWMA |
Pin 9 | Moet PWM kunnen ondersteunen |
AIN1 |
Pin 8 | |
AIN2 |
Pin 7 | |
PWMB |
Pin 3 | Moet PWM kunnen ondersteunen |
BIN1 |
Pin 5 | |
BIN2 |
Pin 4 | |
VM |
Pluspool motoraccu | 2,5–13,5 V — controleer de werkelijke spanning van een verse accu |
Minimaal werkende 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);
}
Het gepiep verwijderen
Dit is een handige eigenschap van de TB6612FNG waar vrijwel niemand gebruik van maakt. De motordriver accepteert PWM tot 100 kHz, maar analogWrite op een Arduino Uno werkt op de meeste pins met 490 Hz en op pins 5 en 6 met 980 Hz—recht in het hoorbare frequentiebereik, waardoor een robot zingt terwijl hij rijdt.
Het menselijk gehoor is rond 20 kHz op. Duw de PWM daar boven en het geluid verdwijnt volledig. Op een Uno worden pins 9 en 10 door Timer 1 bestuurd, die je opnieuw kunt programmeren:
void setup() {
// Timer1 (pins 9, 10): phase-correct PWM, no prescaler -> ~31.4 kHz
TCCR1B = (TCCR1B & 0b11111000) | 0x01;
}
Die ene regel verplaatst de schakelfrequentie naar ongeveer 31 kHz—onhoorbaar en nog steeds ruim binnen de specificatie van de motordriver. Het nadeel is dat Timer 1 ook wordt gebruikt door de Servo-bibliotheek, dus je kunt niet beide op dezelfde timer gebruiken.
Een L298N haalt die schakelfrequentie niet; zijn bipolaire trap schakelt te langzaam en de verliezen nemen sterk toe met de frequentie. Dit is een praktisch voordeel van de MOSFET-uitgangstrap dat verder gaat dan de efficiëntiecijfers.
Wat 0,5 V in plaats van 2 V je oplevert
| Voeding | L298N levert | TB6612FNG levert | Extra beschikbare spanning |
|---|---|---|---|
| 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% |
Hoe lager je voeding, hoe belangrijker het verschil—precies omgekeerd aan waar mensen het verwachten, en precies waarom kleine robots door de vervanging veel verschil maken.
Er is ook een thermisch gevolg. Bij 1 A per kanaal zet de L298N ongeveer 2 W per kanaal om in warmte; de TB6612FNG zet ongeveer 0,5 W over beide kanalen samen om in warmte. Dat is het verschil tussen een onderdeel dat een koellichaam en luchtstroom nodig heeft en een onderdeel dat je onder een chassisplaat kunt begraven.
Problemen oplossen
| Klacht | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
| Er gebeurt absoluut niets | STBY zweeft of staat op LOW |
Stuur STBY HIGH — controleer dit altijd als eerste |
Er gebeurt niets, STBY is hoog |
Geen gezamenlijke ground | Verbind motordriver, bord, sensoren en minpool van de accu met elkaar |
| Eén motor draait achteruit | Draden of logica omgekeerd | Verwissel de twee uitgangsdraden van die motor of keer zijn logica om |
| Snelheid werkt alleen aan/uit | PWM-pin ondersteunt geen PWM | Gebruik op een Uno 3, 5, 6, 9, 10 of 11 |
| Luid gepiep tijdens het rijden | PWM zit in het hoorbare frequentiebereik | Verhoog de timerfrequentie tot boven ongeveer 20 kHz |
| Motordriver werd heet en stierf | VM boven 13,5 V |
Een verse 3S-accu heeft een nominale spanning van 12,6 V en stijgt; controleer tijdens het opladen |
| Motoren stotteren onder belasting | Voeding zakt in, of meer dan 1,2 A aanhoudende stroom | Grotere accu, of kies de twee kanalen parallel voor één motor |
| Werkt op de werkbank, maar faalt op tapijt | De stroom blijft boven de nominale waarde | Tapijt verhoogt de belasting; meet de stroom met een meter onder realistische omstandigheden |
Twee kanalen kunnen voor één motor parallel worden geschakeld — verbind AIN1 met BIN1, AIN2 met BIN2, PWMA met PWMB en de uitgangen aan elkaar — voor ongeveer 2,4 A aanhoudende stroom. Het datasheet ondersteunt dat, en het is het standaardantwoord wanneer één motor net boven de grens zit.
Wanneer de TB6612FNG de verkeerde keuze is
Hij is de juiste standaardkeuze voor kleine robots, en er zijn drie duidelijke gevallen waarin dat niet zo is.
Boven 13,5 V. Er is geen marge en geen regulator. Een 4S-accu valt af, en een 3S-accu moet je controleren wanneer hij vers opgeladen is.
Boven ongeveer 1,2 A aanhoudende stroom per kanaal, waarbij het parallel schakelen van de kanalen niet ver genoeg helpt. Een L298N haalt 2 A per kanaal met koeling, en een BTS7960 gaat tot 43 A voor werkelijk grote motoren.
Wanneer je stroom moet meten of begrenzen. De DRV8833 is in alle andere opzichten vergelijkbaar met de TB6612FNG en voegt stroombegrenzing toe, zodat de motordriver zichzelf bij een vastloper kan beschermen in plaats van te vertrouwen op je code om het op te merken.
Verken de graaf
Gebruikt in deze bouwprojecten
Projecten, leerroutes en simulators waarin de TB6612FNG-motordriver voorkomt.
- ProjectBouw een GPS-waypointrover die zelfstandig rijdt
- ProjectBouw een lijndoolhofoplosser-robot met LSRB-routegeheugen
- ProjectBouw een Mecanum-robot die zijwaarts rijdt
- ProjectBouw een micromouse: robot die doolhoven oplost met flood fill
- ProjectBouw een mini-sumo robot: grip, wig en randherkenning
- ProjectBouw een robot die een gebied afdekt en de vloer veegt
- ProjectBouw een ROS 2-robot die een marker ziet en er naartoe rijdt
- ProjectBouw een zelfbalancerende robot met MPU6050 en PID
- LeerrouteMotorregeling voor robots: een leertraject
Vergelijken
Alternatieven
Vragen
FAQ over de TB6612FNG-motordriver
Wat is de TB6612FNG-motordriver?
De TB6612FNG is een motordriver met een dubbele H-brug, opgebouwd uit MOSFET's in plaats van de oudere bipolaire transistoren. Hij neemt richtings- en PWM-signalen met laag vermogen van een microcontroller over en schakelt een aparte motorvoeding om twee gelijkstroommotoren onafhankelijk aan te sturen, met maximaal 1,2 A aanhoudende stroom per kanaal en pieken tot 3,2 A.
Is de TB6612FNG beter dan de L298N?
Voor kleine robotmotoren wel. De transistoruitgangstrap van de L298N heeft een spanningsval van ongeveer 2 V voordat de motor iets ziet, waardoor een 6 V-motor op een 6 V-accu zwak rijdt en de chip een koellichaam nodig heeft. De MOSFET-uitgangstrap van de TB6612FNG laat slechts enkele honderdsten volt vallen, blijft zonder koellichaam koel en is veel kleiner. De L298N is nog steeds de betere keuze wanneer je meer dan 13,5 V motorvoeding nodig hebt, wat de TB6612FNG niet accepteert.
Hoe sluit je een TB6612FNG aan op een Arduino?
Sluit de pluspool van de motoraccu aan op VM, de 5 V van de Arduino op VCC en verbind alle grounds met elkaar—Arduino, motordriver, sensoren en de minpool van de accu. Sluit STBY aan op een digitale pin en gebruik per motor twee richtingspinnen (AIN1/AIN2 of BIN1/BIN2) plus één PWM-pin (PWMA of PWMB). De motoren sluit je aan op de aansluitingen AO1/AO2 en BO1/BO2.
Wat doet de STBY-pin op een TB6612FNG?
STBY is de stand-by-inschakeling van de hele chip. Op LOW staan beide bruggen uit en lopen de motoren ongeacht de andere pinnen vrij. Je moet hem op HIGH zetten voordat er iets beweegt—vergeten om STBY HIGH te maken is de meest voorkomende reden dat een net bedraadde TB6612FNG helemaal niets doet.
Hoeveel stroom kan een TB6612FNG verwerken?
De maximale aanhoudende stroom is 1,2 A per kanaal, met korte pieken tot 3,2 A. Dat is ruim voldoende voor de kleine gele tandwielmotoren en N20-motoren die in lijnvolgers en doolhofrobots worden gebruikt. Bij grotere motoren die boven 1,2 A vastlopen, schakelt de motordriver zijn thermische beveiliging in, dus stap over op een motordriver zoals de DRV8871 of een goede ESC voor motoren met borstels.
Verder lezen