Control de motores de corriente continua con TB6612FNG y Arduino
Construir un robot de dos ruedas es una experiencia emocionante y educativa. Un aspecto crucial para que tu robot funcione correctamente es la elección del controlador de motor adecuado. En este artículo, exploraremos cómo el chip controlador de motor TB6612FNG se convierte en una opción ideal para tus proyectos de robótica, especialmente si buscas eficiencia y facilidad de uso.
Si has investigado un poco, es probable que te hayas encontrado con controladores de motor clásicos como el L293D o el L298N. Estos controladores han sido ampliamente utilizados durante más de dos décadas debido a su simplicidad y bajo costo. Sin embargo, presentan desventajas significativas en términos de eficiencia energética, especialmente en proyectos que requieren un uso intensivo de baterías.
El TB6612FNG, por otro lado, es un controlador de motor moderno basado en tecnología MOSFET, lo que lo hace mucho más eficiente en comparación con sus predecesores. A continuación, examinaremos sus características y cómo conectarlo a un Arduino para controlar dos motores de corriente continua (DC).
Conceptos básicos sobre el control de motores
Antes de sumergirnos en el funcionamiento del TB6612FNG, es esencial comprender dos conceptos clave para el control de motores:
- Circuito H-Bridge: Permite controlar la dirección de rotación del motor.
- PWM (Modulación por Ancho de Pulso): Ayuda a controlar la velocidad de un motor de corriente continua.
Controlando la dirección con un H-Bridge
Los motores DC son los más sencillos de utilizar. Cuando conectas una batería a un motor DC, este gira en una dirección. Si cambias los cables, girará en la dirección opuesta. Sin embargo, no siempre es práctico invertir los cables físicamente. Aquí es donde entra en juego el H-Bridge.
Un H-Bridge es un circuito especial que utiliza cuatro interruptores electrónicos dispuestos en forma de "H", con el motor en el centro. Al activar estos interruptores en un orden específico, puedes dirigir la corriente a través del motor en una o ambas direcciones, sin necesidad de invertir los cables.
Controlando la velocidad con PWM
Cuando a un motor DC se le aplica un voltaje fijo, gira a una velocidad constante. Para cambiar la velocidad, se debe ajustar el voltaje. Sin embargo, hacerlo físicamente no es práctico. Aquí es donde la Modulación por Ancho de Pulso (PWM) se vuelve útil.
PWM se basa en encender y apagar rápidamente el voltaje enviado al motor. El "ancho" de cada pulso, conocido como ciclo de trabajo, determina cuánto tiempo está encendido el voltaje en cada ciclo. Por ejemplo:
- Si el voltaje está encendido la mayor parte del tiempo (pulso más ancho), el motor recibe un voltaje promedio más alto y gira más rápido.
- Si el voltaje está apagado la mayor parte del tiempo (pulso más estrecho), el motor recibe un voltaje promedio más bajo y gira más lento.
Chip controlador de motor TB6612FNG
El TB6612FNG está diseñado principalmente para manejar cargas inductivas, como motores DC, motores paso a paso, relés y solenoides. Funciona como un amplificador de corriente, tomando señales de control de bajo voltaje de un microcontrolador (como un Arduino) y aumentándolas a niveles de corriente y voltaje más altos, necesarios para operar motores.
Una de sus características más destacadas es que incorpora dos circuitos H-Bridge, lo que permite controlar simultáneamente dos motores DC. También puedes combinar estos dos H-bridges para manejar un motor paso a paso bipolar.
Alimentación y especificaciones técnicas
El TB6612FNG es bastante flexible respecto a la alimentación. Puede funcionar con un amplio rango de voltajes, desde 4.5V hasta 13.5V, y suministrar hasta 1.2A de corriente continua (y hasta 3.2A en picos) por canal. Esto significa que puede manejar desde motores pequeños de hobby hasta motores más potentes.
Además, el chip cuenta con diodos de retroceso integrados, cruciales para proteger el circuito. Cuando un motor se apaga, su campo magnético colapsa, generando un aumento de voltaje que puede dañar componentes sensibles. Los diodos proporcionan un camino seguro para esta corriente, protegiendo el controlador y el resto del circuito.
Protección térmica
Otra característica importante del TB6612FNG es su protección térmica. Si el chip se calienta demasiado debido a un consumo excesivo de corriente o a una mala disipación del calor, el TB6612FNG apagará automáticamente sus salidas para evitar daños. Una vez que se enfríe, volverá a funcionar normalmente.
A continuación se presentan las especificaciones técnicas del TB6612FNG:
- Rango de voltaje de alimentación: 4.5V a 13.5V
- Corriente continua por canal: 1.2A
- Corriente máxima en picos: 3.2A
Para detalles adicionales, puedes consultar la hoja de datos del TB6612FNG.
Pinout del módulo controlador de motor TB6612FNG
El módulo TB6612FNG consta de 16 pines en total. A continuación, analizaremos cada grupo de pines para comprender su función y cómo utilizarlos adecuadamente.
Pines de alimentación
El módulo TB6612FNG tiene dos pines de entrada de alimentación: VM y VCC.
- VM: Es la entrada principal para alimentar los motores. Se puede conectar un voltaje entre 4.5V y 13.5V, según el motor que estés utilizando.
- VCC: Este pin es la alimentación para la lógica interna del chip, funcionando correctamente con voltajes entre 2.7V y 5.5V, lo que lo hace ideal para microcontroladores de 3.3V y 5V. Asegúrate de que el voltaje que suministras a este pin coincida con el nivel lógico del microcontrolador que estás usando.
- GND: Este pin es la conexión a tierra común del módulo. Es fundamental que tanto la fuente de alimentación del motor como tu microcontrolador compartan una conexión a tierra a través de este pin.
Pines de salida del motor
Estos son los pines donde conectarás tus motores DC:
- A1 y A2: Conectan a tu primer motor (motor A).
- B1 y B2: Conectan a tu segundo motor (motor B).
Puedes conectar cualquier motor DC que funcione entre 5 y 13 voltios a estos pines.
Pines de control de dirección
Estos pines controlan la dirección de giro de los motores activando o desactivando los interruptores del H-Bridge:
- AIN1 y AIN2: Controlan la dirección del motor A.
- BIN1 y BIN2: Controlan la dirección del motor B.
Al configurar diferentes combinaciones de señales HIGH o LOW en estos pines, puedes hacer que los motores giren hacia adelante, hacia atrás o se detengan. A continuación se muestra un cuadro que ilustra cómo funciona:
| AIN1 | AIN2 | Acción |
|---|---|---|
| HIGH | LOW | Motor A gira hacia adelante |
| LOW | HIGH | Motor A gira hacia atrás |
Pines de control de velocidad
Los pines PWMA y PWMB controlan la velocidad de los motores:
Estos pines funcionan como interruptores simples. Cuando uno de ellos está en HIGH, el motor correspondiente se activa y gira a máxima velocidad. Al establecerlo en LOW, el motor se desactiva y no gira en absoluto. Sin embargo, también puedes enviar una señal PWM a estos pines para controlar la velocidad de cada motor.
Pin de espera (Standby)
El pin STBY permite desactivar rápidamente ambos motores al mismo tiempo. Por defecto, este pin está conectado a tierra mediante una resistencia de pull-down interna de 200K ohmios, lo que mantiene los motores desactivados. Para habilitar los motores, debes llevar este pin a un nivel HIGH, conectándolo directamente a VCC o utilizando un pin de salida de un microcontrolador.
Conexión del módulo TB6612FNG a un Arduino
Ahora que conocemos el funcionamiento del módulo TB6612FNG, es momento de conectarlo a nuestro Arduino. Comenzaremos por alimentar los motores. En este caso, utilizaremos motores TT, que son comunes en robots de dos ruedas. Estos motores generalmente funcionan bien con voltajes entre 3V y 6V, así que conectaremos una fuente de alimentación externa de 5V al pin VM.
Para suministrar energía lógica a la lógica interna del controlador, el pin VCC del módulo TB6612FNG espera un voltaje de 2.7V a 5.5V, que coincide con la salida de 5V del Arduino. Por lo tanto, conectaremos el pin de 5V del Arduino a VCC, y GND a GND.
Ahora conectamos los pines de control. El módulo TB6612FNG tiene cuatro pines de entrada—AIN1, AIN2, BIN1, y BIN2—que se utilizan para controlar la dirección de los motores. Los conectaremos a los pines de salida digital 5, 4, 7 y 8 del Arduino.
Para controlar la velocidad, los pines de entrada PWM, PWMA y PWMB, deben conectarse a los pines PWM del Arduino—3 para PWMA y 9 para PWMB. Además, el pin STBY debe estar a un nivel lógico HIGH para habilitar el controlador de motor. En nuestra configuración, lo conectaremos directamente a VCC. Este paso es muy importante: si lo olvidas, el controlador permanecerá en modo de espera y los motores no funcionarán.
Finalmente, conecta los motores a los pines de salida. Motor A va a A1 y A2, mientras que Motor B va a B1 y B2. No te preocupes demasiado por cuál cable de motor va a qué pin de salida; si tu motor gira en la dirección incorrecta, siempre puedes cambiar los cables más tarde.
A continuación, se presenta una tabla de referencia rápida para las conexiones de pines:
| Pin TB6612FNG | Conexión Arduino |
|---|---|
| VM | Fuente de poder 5V |
| VCC | 5V del Arduino |
| GND | GND del Arduino |
| AIN1 | Pin digital 5 |
| AIN2 | Pin digital 4 |
| BIN1 | Pin digital 7 |
| BIN2 | Pin digital 8 |
| PWMA | Pin PWM 3 |
| PWMB | Pin PWM 9 |
| STBY | Conectado a VCC |
Código de ejemplo para Arduino
A continuación se presenta un sencillo código de Arduino que muestra cómo controlar la dirección y la velocidad de dos motores de corriente continua utilizando el controlador de motor TB6612FNG. Este ejemplo no requiere bibliotecas especiales, ya que usa únicamente las funciones básicas integradas del IDE de Arduino.
// Conexiones del Motor A
int pwmA = 3;
int Ain1 = 5;
int Ain2 = 4;
// Conexiones del Motor B
int pwmB = 9;
int Bin1 = 7;
int Bin2 = 8;
void setup() {
// Configurar todos los pines de control del motor como salidas
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(Ain1, OUTPUT);
pinMode(Ain2, OUTPUT);
pinMode(Bin1, OUTPUT);
pinMode(Bin2, OUTPUT);
// Apagar motores - estado inicial
digitalWrite(Ain1, LOW);
digitalWrite(Ain2, LOW);
digitalWrite(Bin1, LOW);
digitalWrite(Bin2, LOW);
}
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
// Esta función permite controlar la dirección de giro de los motores
void directionControl() {
// Establecer los motores a velocidad máxima
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
// Encender motor A y B
digitalWrite(Ain1, HIGH);
digitalWrite(Ain2, LOW);
digitalWrite(Bin1, HIGH);
digitalWrite(Bin2, LOW);
delay(2000);
// Cambiar la dirección de los motores
digitalWrite(Ain1, LOW);
digitalWrite(Ain2, HIGH);
digitalWrite(Bin1, LOW);
digitalWrite(Bin2, HIGH);
delay(2000);
// Apagar motores
digitalWrite(Ain1, LOW);
digitalWrite(Ain2, LOW);
digitalWrite(Bin1, LOW);
digitalWrite(Bin2, LOW);
}
// Esta función permite controlar la velocidad de los motores
void speedControl() {
// Encender motores
digitalWrite(Ain1, LOW);
digitalWrite(Ain2, HIGH);
digitalWrite(Bin1, LOW);
digitalWrite(Bin2, HIGH);
// Acelerar de cero a velocidad máxima
for (int i = 0; i = 0; --i) {
analogWrite(pwmA, i);
analogWrite(pwmB, i);
delay(20);
}
// Apagar motores
digitalWrite(Ain1, LOW);
digitalWrite(Ain2, LOW);
digitalWrite(Bin1, LOW);
digitalWrite(Bin2, LOW);
}
Es posible que al aumentar o disminuir la velocidad de un motor DC, escuches un sonido de zumbido, especialmente en valores PWM bajos. No te preocupes; esto es completamente normal. Sucede porque los motores de corriente continua requieren un voltaje mínimo para comenzar a girar, y en valores PWM bajos, el voltaje puede no ser suficiente para mantener el motor funcionando sin problemas.
Explicación del código:
Al comienzo del código, definimos qué pines de Arduino se utilizarán para controlar el Motor A y el Motor B. En la función setup(), configuramos todos los pines de control del motor como salidas, asegurándonos de que ambos motores estén apagados.
En el loop(), llamamos a dos funciones personalizadas con un retraso de un segundo entre ellas. La primera función es directionControl(), que controla la dirección de los motores, y la segunda es speedControl(), que ajusta la velocidad.
La función directionControl() muestra cómo controlar la dirección de ambos motores. Primero, establecemos ambos motores a su velocidad máxima antes de hacerlos girar hacia adelante durante dos segundos. Luego, cambiamos la dirección de ambos motores y los hacemos girar hacia atrás durante otros dos segundos. Finalmente, apagamos los motores.
La función speedControl() demuestra cómo controlar la velocidad de los motores utilizando PWM. Comenzamos estableciendo los pines de dirección para que ambos motores giren en una dirección. Luego, aumentamos lentamente la velocidad del motor elevando gradualmente el valor PWM de 0 a 255, simulando un efecto de aceleración. Una vez que los motores alcanzan la velocidad máxima, revertimos el proceso, disminuyendo el valor de PWM de 255 a 0 para que los motores se desaceleren y se detengan suavemente.
Deja una respuesta

Estos temas te pueden interesar