Componente · Driver
Driver per motori TB6612FNG
TB6612FNG è un doppio ponte H a MOSFET che pilota due motori DC perdendo quasi nessuna tensione; è l'aggiornamento efficiente rispetto all'L298N.
Che cos’è
TB6612FNG è un driver per motori a doppio ponte H che svolge lo stesso compito di L298N — sta tra i pin logici di un microcontrollore e motori che richiedono molta più corrente — ma realizza lo stadio di uscita con MOSFET anziché con transistor bipolari. Questa singola modifica è tutta la storia: un interruttore MOSFET perde qualche decimo di volt, mentre lo stadio dell’L298N ne perde circa due.
Con una batteria da 6 V che pilota motori da 6 V, la differenza rappresenta gran parte della velocità. Rappresenta anche gran parte del calore: l’L298N richiede un dissipatore alle correnti prolungate, mentre una scheda portante TB6612FNG grande come un francobollo diventa soltanto tiepida.
Come controllarlo
Ogni motore richiede tre segnali, più un pin condiviso per il chip:
- Due pin di direzione (AIN1/AIN2 per il motore A, BIN1/BIN2 per il motore B) selezionano marcia avanti, marcia indietro, freno o moto libero.
- Un pin PWM (PWMA o PWMB) imposta la velocità. A differenza di L298N, in cui il PWM è applicato a un pin di abilitazione, TB6612FNG dispone di un ingresso PWM dedicato per ogni canale, che accetta fino a 100 kHz: abbastanza elevati per commutare sopra la gamma udibile, così il robot smette di ronziare.
- Un pin STBY condiviso. Tienilo a livello LOW ed entrambi i ponti sono inattivi, indipendentemente da tutto il resto.
Vale la pena ripetere il discorso sul pin STBY, perché costa una serata ai principianti: un TB6612FNG cablato correttamente con STBY lasciato libero o a livello LOW non fa assolutamente nulla, in silenzio e senza alcun errore da consultare.
Quando usarlo
Scegli TB6612FNG quando i motori sono piccoli e la batteria è preziosa: è una descrizione che vale per quasi ogni inseguitore di linee e robot per labirinto di linee. I piccoli robot funzionano a 6–7.4 V, esattamente l’intervallo in cui la perdita di 2 V dell’L298N fa più danno, e usano una batteria che si preferisce non sprecare sotto forma di calore.
Resta con L298N quando l’alimentazione dei motori supera 13.5 V, valore che TB6612FNG non accetta, oppure quando servono più di circa 1.2 A in continuo per canale.
Cablaggio e aspetti critici
- Porta STBY a livello HIGH. La prima cosa che
setup()deve fare dopopinMode. - Due alimentazioni, una terra. Batteria dei motori a VM, Arduino 5 V a VCC e tutte le terre collegate insieme — Arduino, driver, schiera di sensori e negativo della batteria. Una terra comune mancante non dà riferimento ai segnali di controllo e il guasto è silenzioso.
- Rispetta 13.5 V. Non c’è un regolatore a bordo né margine oltre l’alimentazione massima dei motori. Un pacco al litio 3S da 12.6 V nominali la supera appena caricato.
- Un motore che gira nel verso sbagliato si corregge in due secondi. Scambia i due fili di uscita di quel motore oppure inverti la logica di direzione nel firmware. Fallo prima di regolare qualsiasi altro parametro, altrimenti perderai tempo inseguendo un errore di controllo che in realtà è di cablaggio.
Piedinatura
Due file sulla comune scheda portante in stile SparkFun: logica da un lato, alimentazione e motori dall’altro.
| Lato | Pin | Funzione |
|---|---|---|
| Logica | VCC |
Alimentazione logica, 2.7–5.5 V dal microcontrollore |
| Logica | GND |
Terra. Tutte le terre del robot sono collegate qui |
| Logica | STBY |
Standby, attivo a livello basso. LOW = entrambi i ponti inattivi, in silenzio |
| Logica | AIN1, AIN2 |
Direzione del motore A |
| Logica | PWMA |
Velocità del motore A. Accetta fino a 100 kHz |
| Logica | BIN1, BIN2 |
Direzione del motore B |
| Logica | PWMB |
Velocità del motore B |
| Alimentazione | VM |
Alimentazione dei motori, 2.5–13.5 V. Nessun regolatore, nessun margine |
| Alimentazione | GND |
Terra dei motori |
| Motori | AO1, AO2 |
Morsetti del motore A |
| Motori | BO1, BO2 |
Morsetti del motore B (BO1, BO2) |
Tabella di verità
STBY |
IN1 |
IN2 |
PWM |
Risultato |
|---|---|---|---|---|
| LOW | × | × | × | Nulla. Entrambi i ponti spenti, nessun errore, nessun indizio |
| HIGH | HIGH | LOW | PWM | Marcia avanti al ciclo di lavoro indicato |
| HIGH | LOW | HIGH | PWM | Marcia indietro al ciclo di lavoro indicato |
| HIGH | HIGH | HIGH | × | Freno breve |
| HIGH | LOW | LOW | HIGH | Arresto (moto libero) |
La prima riga è quella che costa una serata. Una scheda cablata perfettamente con STBY lasciato libero
non fa assolutamente nulla, e un pin non pilotato è per definizione libero. Portalo a livello HIGH in
setup(), alla prima riga dopo pinMode.
Cablaggio ad Arduino
| TB6612FNG | Arduino Uno | Nota |
|---|---|---|
VCC |
5 V | Solo logica, pochi milliampere |
GND |
GND | Anche al negativo della batteria e alla terra di ogni sensore |
STBY |
Pin 12 | Oppure collegalo a 5 V tramite una resistenza da 10 kΩ se non vuoi mai disabilitare il driver |
PWMA |
Pin 9 | Deve supportare PWM |
AIN1 |
Pin 8 | |
AIN2 |
Pin 7 | |
PWMB |
Pin 3 | Deve supportare PWM |
BIN1 |
Pin 5 | |
BIN2 |
Pin 4 | |
VM |
Batteria dei motori + | 2.5–13.5 V: controlla la tensione reale di un pacco appena caricato |
Codice funzionale minimo
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);
}
Eliminare il ronzio
Questo è il silenzioso superpotere di TB6612FNG, che quasi nessuno sfrutta. Il driver accetta PWM fino
a 100 kHz, ma analogWrite di Arduino Uno funziona a 490 Hz sulla maggior parte dei pin e a 980 Hz
sui pin 5 e 6, nettamente nella gamma udibile: è per questo che un robot cant mentre si muove.
L’orecchio umano arriva fino a circa 20 kHz. Portando il PWM sopra questa soglia il rumore scompare completamente. Su Uno, i pin 9 e 10 sono controllati dal Timer 1, che è possibile riprogrammare:
void setup() {
// Timer1 (pins 9, 10): phase-correct PWM, no prescaler -> ~31.4 kHz
TCCR1B = (TCCR1B & 0b11111000) | 0x01;
}
Questa singola riga porta la frequenza di commutazione a circa 31 kHz: impercettibile e ancora ben
all’interno della capacità del driver. Il costo è che anche Timer 1 è usato dalla libreria Servo, quindi
non è possibile usarli entrambi sullo stesso timer.
Un L298N non può seguirti fin lassù: il suo stadio bipolare commuta troppo lentamente e le perdite aumentano fortemente con la frequenza. Questo è un vantaggio reale e pratico dello stadio MOSFET, al di là dei soli dati di efficienza.
Che cosa si guadagna davvero con 0.5 V invece di 2 V
| Alimentazione | Tensione erogata dall’L298N | Tensione erogata dal TB6612FNG | Ulteriore disponibilità |
|---|---|---|---|
| 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% |
Più bassa è l’alimentazione, più conta la differenza: è esattamente il contrario di dove ci si aspetta che conti ed è proprio il motivo per cui il passaggio trasforma i piccoli robot.
C’è anche una conseguenza termica. A 1 A per canale l’L298N dissipa circa 2 W per canale; il TB6612FNG dissipa circa 0.5 W complessivamente. È la differenza fra un componente che richiede dissipatore e flusso d’aria e uno che puoi nascondere sotto una piastra del telaio.
Risoluzione dei problemi
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| Non accade assolutamente nulla | STBY libero o a livello LOW |
Portalo a livello HIGH: è la prima cosa da controllare, ogni volta |
Non accade nulla, STBY è alto |
Nessuna terra comune | Collega insieme driver, scheda, sensori e negativo della batteria |
| Un motore gira al contrario | Fili o logica invertiti | Scambia i due fili di uscita del motore oppure inverti la sua logica |
| La velocità è soltanto on/off | Il pin PWM non supporta PWM | Su Uno usa 3, 5, 6, 9, 10 o 11 |
| Ronzio forte durante il movimento | PWM nella gamma udibile | Porta la frequenza del timer sopra circa 20 kHz |
| Il driver si è scaldato e ha smesso di funzionare | VM superiore a 13.5 V |
Un pacco 3S appena caricato è a 12.6 V e sale; verificalo durante la carica |
| I motori vanno a scatti sotto carico | L’alimentazione cala oppure la corrente supera 1.2 A in continuo | Pacco più grande oppure collega in parallelo i due canali per un solo motore |
| Funziona sul banco, ma non sul tappeto | Corrente continua superiore alla nominale | Il tappeto aumenta il carico; misura la corrente nelle condizioni reali |
I due canali possono essere collegati in parallelo per un solo motore: collega AIN1 a BIN1, AIN2 a
BIN2, PWMA a PWMB e le uscite insieme, ottenendo circa 2.4 A in continuo. Il foglio dati lo
supporta ed è la soluzione standard quando un motore supera di poco il limite.
Quando TB6612FNG è la scelta sbagliata
È la scelta predefinita corretta per i piccoli robot e ci sono tre casi chiari in cui non lo è.
Sopra 13.5 V. Non c’è margine né regolatore. Un pacco 4S è fuori discussione e un pacco 3S richiede un controllo quando è appena caricato.
Sopra circa 1.2 A in continuo per canale, quando anche il collegamento in parallelo non basta. Un L298N gestisce 2 A per canale con un dissipatore e un BTS7960 raggiunge 43 A per motori davvero grandi.
Quando servono rilevamento o limitazione della corrente. DRV8833 è simile a TB6612FNG sotto ogni altro aspetto e aggiunge la limitazione di corrente, che permette al driver di proteggersi dallo stallo anziché affidarsi al codice per accorgersene.
Esplora il grafo
Usato in queste costruzioni
Progetti, percorsi di apprendimento e simulatori che includono Driver per motori TB6612FNG.
- ProgettoCostruisci un Micromouse per labirinto con flood fill
- ProgettoCostruisci un robot autobilanciante con MPU6050 e PID
- ProgettoCostruisci un robot di copertura che percorre un'intera stanza
- ProgettoCostruisci un robot Mecanum che si muove lateralmente
- ProgettoCostruisci un robot ROS 2 che vede e raggiunge un marcatore
- ProgettoCostruisci un rover GPS autonomo tra punti di passaggio
- ProgettoMini sumo robot: presa, cuneo e rilevamento del bordo
- ProgettoRobot per labirinto di linee con memoria del percorso LSRB
- PercorsoControllo dei motori per robot: un percorso di apprendimento
Confronto
Alternative
Domande
FAQ su Driver per motori TB6612FNG
Che cos'è il driver per motori TB6612FNG?
TB6612FNG è un driver per motori a doppio ponte H realizzato con MOSFET anziché con i più vecchi transistor bipolari. Riceve dal microcontrollore segnali di direzione e PWM a bassa potenza e commuta un'alimentazione separata dei motori per pilotare indipendentemente due motori DC, fornendo 1.2 A in continuo per canale e picchi di 3.2 A.
TB6612FNG è migliore di L298N?
Per i piccoli motori dei robot, sì. Lo stadio di uscita a transistor dell'L298N perde circa 2 V prima che il segnale raggiunga il motore, perciò un motore da 6 V alimentato da un pacco da 6 V funziona in modo debole e il chip richiede un dissipatore. Lo stadio MOSFET del TB6612FNG perde soltanto qualche decimo di volt, resta freddo senza dissipatore ed è molto più piccolo. L298N resta migliore quando servono più di 13.5 V per i motori, valore che TB6612FNG non accetta.
Come si collega TB6612FNG ad Arduino?
Collega il positivo della batteria dei motori a VM, Arduino 5 V a VCC e tutte le terre insieme — Arduino, driver, sensori e negativo della batteria. Poi collega STBY a un pin digitale e, per ogni motore, a due pin di direzione (AIN1/AIN2 oppure BIN1/BIN2) più un pin PWM (PWMA oppure PWMB). I motori si collegano ai morsetti AO1/AO2 e BO1/BO2.
Che cosa fa il pin STBY di TB6612FNG?
STBY è un'abilitazione in standby per l'intero chip. Tenuto a livello LOW, entrambi i ponti sono disabilitati e i motori si muovono per inerzia qualunque cosa dicano gli altri pin. Bisogna portarlo a livello HIGH prima che qualsiasi cosa si muova. Dimenticarlo è il motivo più comune per cui un TB6612FNG appena cablato non fa assolutamente nulla.
Quanta corrente può gestire TB6612FNG?
1.2 A in continuo per canale, con picchi brevi fino a 3.2 A. Copre agevolmente i piccoli motori giallo e i motori N20 usati negli inseguitori di linee e nei robot da labirinto. I motori più grandi che vanno in stallo sopra 1.2 A attivano la protezione termica, quindi è meglio passare a un driver come DRV8871 o a un vero ESC per motori con spazzole.
Per approfondire