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.

Diagrama de bloques: una matriz de reflectancia QTR-MD-08A alimenta un Arduino Nano por los pines A0 a A7; el Nano maneja un TB6612FNG usando STBY, PWMA, PWMB y los cuatro pines de dirección; las salidas del controlador van a los motores izquierdo y derecho, y una batería de motores independiente alimenta el pin VM del controlador.
Toda la cadena de tracción de un robot de laberinto de líneas. Fíjate en que la batería de motores solo llega a VM: los 5 V del Arduino alimentan la lógica, nunca corriente de motor. Descargar SVG

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 de pinMode.
  • 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.

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

Referencias