Componente · Driver
TB6612FNG Motor Driver
El TB6612FNG da control MOSFET eficiente para dos motores de CC: casi sin caída de tensión, sin calentamiento y muy compacto. Por qué supera al L298N.
Qué es
El TB6612FNG es un controlador de motores de puente H dual que hace el mismo trabajo que un L298N: situarse entre los pines lógicos de un microcontrolador y los motores, que quieren mucha más corriente. Pero construye su etapa de salida con MOSFET en lugar de transistores bipolares. Ese único cambio es toda la historia: un conmutador MOSFET pierde unas décimas de voltio donde la etapa del L298N pierde alrededor de dos.
Con una batería de 6 V alimentando motores de 6 V, esa diferencia es la mayor parte de tu velocidad. También es la mayor parte de tu calor: el L298N pide un disipador con corriente sostenida, mientras que una placa TB6612FNG del tamaño de un sello simplemente se queda tibia.
Cómo lo controlas
Cada motor toma tres señales, más un pin compartido para el chip:
- Dos pines de dirección (AIN1/AIN2 para el motor A, BIN1/BIN2 para el motor B) eligen avance, retroceso, frenada o rodar.
- Un pin PWM (PWMA o PWMB) fija la velocidad. A diferencia del L298N, donde el PWM va sobre un pin de habilitación, el TB6612FNG tiene una entrada PWM dedicada por canal que acepta hasta 100 kHz, lo bastante alto para conmutar por encima del rango audible y que tu robot deje de chirriar.
- Un pin STBY, compartido. Mantenlo en LOW y ambos puentes quedan muertos sin importar nada más.
Ese pin STBY merece repetición, porque le cuesta una tarde a los principiantes: un TB6612FNG cableado correctamente con STBY al aire o en LOW no hace absolutamente nada, en silencio y sin ningún error que leer.
Cuándo usarlo
Recurre al TB6612FNG cuando tus motores sean pequeños y tu batería sea valiosa, lo que describe casi cualquier seguidor de línea y robot de laberinto de líneas. Los robots pequeños funcionan a 6–7,4 V, exactamente el rango donde más duele el peaje de 2 V del L298N, y funcionan con una batería que preferirías no desperdiciar en calor.
Quédate con el L298N cuando la alimentación de motores supere los 13,5 V, que el TB6612FNG no acepta, o cuando necesites más de unos 1,2 A continuos por canal.
Cableado y errores comunes
- Manda STBY a HIGH. Lo primero que debería hacer tu
setup()después depinMode. - Dos alimentaciones, una masa. Batería de motores a VM, 5 V del Arduino a VCC, y todas las masas unidas: Arduino, controlador, matriz de sensores y negativo de la batería. Una masa común que falta deja las señales de control sin referencia, y el fallo es silencioso.
- Respeta los 13,5 V. No hay regulador de a bordo ni margen por encima de la alimentación máxima de motores. Un paquete de litio 3S a 12,6 V nominal lo excederá recién cargado.
- Un motor que gira al revés se arregla en dos segundos. Intercambia los dos hilos de salida de ese motor, o invierte su lógica de dirección en el firmware. Hazlo antes de ajustar nada más, o te perseguirá un fallo de control que en realidad es de cableado.
Patillaje
Dos filas en la placa habitual de estilo SparkFun: la lógica a un lado, la alimentación y los motores al otro.
| Lado | Pin | Qué hace |
|---|---|---|
| Lógica | VCC |
Alimentación lógica, 2.7–5.5 V desde el microcontrolador |
| Lógica | GND |
Masa. Todas las masas del robot se unen aquí |
| Lógica | STBY |
Reposo, activo a nivel bajo. LOW = ambos puentes muertos, en silencio |
| Lógica | AIN1, AIN2 |
Dirección del motor A |
| Lógica | PWMA |
Velocidad del motor A. Acepta hasta 100 kHz |
| Lógica | BIN1, BIN2 |
Dirección del motor B |
| Lógica | PWMB |
Velocidad del motor B |
| Alimentación | VM |
Alimentación de motores, 2.5–13.5 V. Sin regulador, sin margen |
| Alimentación | GND |
Masa de motores |
| Motores | AO1, AO2 |
Terminales del motor A |
| Motores | AO1, AO2 |
Terminales del motor B (BO1, BO2) |
La tabla de verdad
STBY |
IN1 |
IN2 |
PWM |
Resultado |
|---|---|---|---|---|
| LOW | × | × | × | Nada. Ambos puentes apagados, sin error, sin pista |
| HIGH | HIGH | LOW | PWM | Avance al duty indicado |
| HIGH | LOW | HIGH | PWM | Retroceso al duty indicado |
| HIGH | HIGH | HIGH | × | Frenada corta |
| HIGH | LOW | LOW | HIGH | Parada (rueda libre) |
La primera fila es la que le cuesta una tarde a la gente. Una placa cableada perfectamente con
STBY al aire no hace absolutamente nada, y al aire es exactamente lo que hace un pin sin
manejar. Mándalo a HIGH en setup(), en la primera línea después de pinMode.
Cablearlo a un Arduino
| TB6612FNG | Arduino Uno | Nota |
|---|---|---|
VCC |
5 V | Solo lógica, unos miliamperios |
GND |
GND | Y al negativo de la batería, y a la masa de cada sensor |
STBY |
Pin 12 | O conéctalo a 5 V a través de una resistencia de 10 kΩ si nunca quieres deshabilitarlo |
PWMA |
Pin 9 | Debe admitir PWM |
AIN1 |
Pin 8 | |
AIN2 |
Pin 7 | |
PWMB |
Pin 3 | Debe admitir PWM |
BIN1 |
Pin 5 | |
BIN2 |
Pin 4 | |
VM |
+ de la batería de motores | 2.5–13.5 V: comprueba la tensión real de un paquete recién cargado |
Código mínimo funcional
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);
}
Deshacerse del chirrido
Este es el superpoder silencioso del TB6612FNG y casi nadie lo usa. El controlador acepta PWM hasta
100 kHz, pero el analogWrite de un Arduino Uno corre a 490 Hz en la mayoría de los pines y a
980 Hz en los pines 5 y 6, justo en el centro de la banda audible, y por eso un robot canta mientras avanza.
El oído humano se agota alrededor de los 20 kHz. Sube el PWM por encima de eso y el ruido desaparece por completo. En un Uno, los pines 9 y 10 los maneja el Timer 1, que puedes reprogramar:
void setup() {
// Timer1 (pins 9, 10): phase-correct PWM, no prescaler -> ~31.4 kHz
TCCR1B = (TCCR1B & 0b11111000) | 0x01;
}
Esa única línea mueve la frecuencia de conmutación a unos 31 kHz: inaudible, y todavía muy
dentro de la especificación del controlador. El coste es que el Timer 1 es también lo que usa la
biblioteca Servo, así que no puedes hacer ambas cosas en el mismo temporizador.
Un L298N no puede seguirte hasta ahí: su etapa bipolar conmuta demasiado despacio y las pérdidas se disparan con la frecuencia. Esta es una ventaja real y práctica de la etapa MOSFET más allá de las cifras de eficiencia.
Qué compra realmente 0,5 V en lugar de 2 V
| Alimentación | El L298N entrega | El TB6612FNG entrega | Extra disponible |
|---|---|---|---|
| 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% |
Cuanto más baja es la alimentación, más importa la diferencia, que es exactamente al revés de donde la gente espera que importe, y exactamente la razón por la que los robots pequeños se transforman con el cambio.
También hay una consecuencia térmica. A 1 A por canal el L298N disipa unos 2 W por canal; el TB6612FNG disipa alrededor de 0,5 W entre los dos. Esa es la diferencia entre un componente que necesita disipador y flujo de aire, y uno que puedes esconder bajo una placa del chasis.
Resolución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| No ocurre absolutamente nada | STBY al aire o en LOW |
Mándalo a HIGH: es lo primero que hay que comprobar, siempre |
No ocurre nada, STBY está en alto |
Sin masa común | Une el controlador, la placa, los sensores y el negativo de la batería |
| Un motor gira al revés | Hilos o lógica invertidos | Intercambia los dos hilos de salida de ese motor, o invierte su lógica |
| La velocidad es solo on/off | El pin PWM no admite PWM | Usa el 3, 5, 6, 9, 10 u 11 en un Uno |
| Chirrido fuerte al avanzar | PWM en la banda audible | Sube la frecuencia del temporizador por encima de ~20 kHz |
| El controlador se calentó y murió | VM por encima de 13.5 V |
Un paquete 3S recién cargado es 12.6 V y subiendo; compruébalo con carga |
| Los motores dan tirones bajo carga | La alimentación se desploma, o más de 1.2 A continuos | Paquete mayor, o pon los dos canales en paralelo para un motor |
| Funciona en el banco, falla en la moqueta | Corriente continua por encima de la especificación | La moqueta aumenta la carga; mide la corriente con un multímetro en condiciones reales |
Dos canales se pueden poner en paralelo para un solo motor: une AIN1 con BIN1, AIN2 con
BIN2, PWMA con PWMB, y las salidas entre sí, para unos 2,4 A continuos. La ficha técnica lo
respalda, y es la respuesta estándar cuando un motor se queda justo por encima del límite.
Cuándo el TB6612FNG es la elección equivocada
Es la opción por defecto correcta para robots pequeños, y hay tres casos claros en los que no lo es.
Por encima de 13,5 V. No hay margen ni regulador. Un paquete 4S queda descartado, y un paquete 3S necesita revisión recién cargado.
Por encima de ~1,2 A continuos por canal, y poner los canales en paralelo no te lleva lo suficientemente lejos. Un L298N maneja 2 A por canal con refrigeración, y un BTS7960 llega a 43 A para motores realmente grandes.
Cuando necesites senses o limitación de corriente. El DRV8833 es parecido al TB6612FNG en todos los demás aspectos y añade limitación de corriente, lo que permite que el controlador se proteja a sí mismo frente a un bloqueo en lugar de depender de que tu código se dé cuenta.
Explora el grafo
Se usa en estos montajes
Proyectos, rutas de aprendizaje y simuladores que incluyen TB6612FNG Motor Driver.
- ProyectoConstrucción de un rover autónomo por waypoints GPS
- ProyectoConstruya un Micromouse: robot para laberintos con Flood Fill
- ProyectoConstruya un robot mecanum omnidireccional con ESP32
- ProyectoConstruye un robot de autoequilibrio con MPU6050 y PID
- ProyectoConstruye un robot de cobertura de área para limpiar suelos
- ProyectoConstruye un robot mini sumo: tracción, cuña y borde
- ProyectoConstruye un robot ROS 2 que localiza marcadores visuales
- ProyectoRobot resuelto de laberintos de línea con memoria LSRB
- Ruta de aprendizajeControl de motores en robótica: ruta de aprendizaje
Comparar
Alternativas
Preguntas
Preguntas frecuentes sobre TB6612FNG Motor Driver
¿Qué es el driver de motores TB6612FNG?
El TB6612FNG es un driver de motores con doble puente H construido con MOSFET en lugar de los antiguos transistores bipolares. Recibe señales de dirección y PWM de baja potencia desde un microcontrolador y conmuta una alimentación de motores aparte para mover dos motores de CC de forma independiente, con 1.2 A continuos por canal y picos de 3.2 A.
¿Es mejor el TB6612FNG que el L298N?
Para motores de robot pequeños, sí. La etapa de salida de transistores del L298N se come unos 2 V antes de que llegue nada al motor, así que un motor de 6 V con un pack de 6 V va flojo y el chip necesita disipador. La etapa MOSFET del TB6612FNG pierde unas pocas décimas de voltio, funciona fría sin disipador y es mucho más pequeña. El L298N sigue ganando cuando necesitas más de 13.5 V de alimentación de motores, algo que el TB6612FNG no admite.
¿Cómo se conecta un TB6612FNG a un Arduino?
El positivo de la batería de motores a VM, los 5 V del Arduino a VCC y todas las masas unidas: Arduino, driver, sensores y negativo de la batería. Después, STBY a un pin digital y, por cada motor, dos pines de dirección (AIN1/AIN2 o BIN1/BIN2) más un pin PWM (PWMA o PWMB). Los motores se conectan a los terminales AO1/AO2 y BO1/BO2.
¿Qué hace el pin STBY en un TB6612FNG?
STBY es una habilitación de espera (standby) para todo el chip. Si está en LOW, los dos puentes quedan desactivados y los motores giran libres por inercia, digan lo que digan los demás pines. Tienes que ponerlo en HIGH antes de que se mueva nada: olvidarlo es la razón más común por la que un TB6612FNG recién cableado no hace absolutamente nada.
¿Cuánta corriente aguanta un TB6612FNG?
1.2 A continuos por canal, con picos breves de hasta 3.2 A. Eso cubre con holgura los pequeños motorreductores amarillos y los motores N20 que se usan en seguidores de línea y robots de laberinto. Los motores más grandes que se bloquean por encima de 1.2 A harán saltar su protección térmica, así que en ese caso pasa a un driver como el DRV8871 o a un ESC para motores con escobillas en condiciones.
Lecturas adicionales