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.

Blokdiagram: een QTR-MD-08A-reflectiesensorarray stuurt een Arduino Nano via pins A0 tot A7; de Nano bestuurt een TB6612FNG met STBY, PWMA, PWMB en de vier richtingspinnen; de uitgangen van de motordriver gaan naar de linker- en rechtermotor, en een aparte motoraccu voedt de VM-pin van de motordriver.
De volledige aandrijfketen voor een lijndoolhofrobot. Let op dat de motoraccu alleen met VM is verbonden—de 5 V van de Arduino levert logica en nooit motorstroom. SVG downloaden

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 na pinMode direct digitalWrite(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.

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

Bronnen