driver motorTB529A3 TB6612FNG

El TB6612FNG es un controlador (driver) de motores que nos permite manejar dos motores de corriente continua desde Arduino, variando tanto la velocidad como el sentido de giro.

El TB6612FNG puede ser considerado una versión mejorada del L298N. Al igual que esté, internamente está formado por dos puentes-H, junto con la electrónica necesaria para simplificar su uso, y eliminar posibles cortocircuito por errores de uso.

Sin embargo, en el caso del TB6612FNG los puentes-H están formados por transistores MOSFET, en lugar de transistores BJT como en el L298N. Esto permite que el TB6612FNG tiene mejor eficiencia y menores dimensiones que el L298N.

El TB6612FNG también permite controlar intensidades de corriente superiores, siendo capaz de suministrar 1.2A por canal de forma continua, y 3.2A de pico. Recordar que el L298N tiene una intensidad máxima teórica de 2A, pero las pérdidas hace que en la práctica sólo pueda suministrar 0.8-1A.

Pin Label Function Power/Input/Output Notes
VM Motor Voltage Power This is where you provide power for the motors (2.2V to 13.5V)
VCC Logic Voltage Power This is the voltage to power the chip and talk to the microcontroller (2.7V to 5.5V)
GND Ground Power Common Ground for both motor voltage and logic voltage (all GND pins are connected)
STBY Standby Input Allows the H-bridges to work when high (has a pulldown resistor so it must actively pulled high)
AIN1/BIN1 Input 1 for channels A/B Input One of the two inputs that determines the direction.
AIN2/BIN2 Input 2 for channels A/B Input One of the two inputs that determines the direction.
PWMA/PWMB PWM input for channels A/B Input PWM input that controls the speed
A01/B01 Output 1 for channels A/B Output One of the two outputs to connect the motor
A02/B02 Output 2 for channels A/B Output One of the two outputs to connect the mo

control de motores

//motor A  en A01 y A02

//motor B  en B01 y B02

 

int STBY = 10; //activacion

 

//Motor A

int PWMA = 3; //control de vel

int AIN1 = 9; //sentido

int AIN2 = 8; //sentid

 

//Motor B

int PWMB = 5; 

int BIN1 = 11; 

int BIN2 = 12; 

 

void setup(){

pinMode(STBY, OUTPUT);

 

pinMode(PWMA, OUTPUT);

pinMode(AIN1, OUTPUT);

pinMode(AIN2, OUTPUT);

 

pinMode(PWMB, OUTPUT);

pinMode(BIN1, OUTPUT);

pinMode(BIN2, OUTPUT);

}

 

void loop(){

move(1, 255, 1); //motor 1, maxima vel, izq

move(2, 255, 1); //motor 2, full speed, izq

 

delay(1000); 

stop(); 

delay(250); 

 

move(1, 128, 0); //motor 1, maxima vel, der

move(2, 128, 0); //motor 2, maxima vel, der

 

delay(1000);

stop();

delay(250);

}

 

void move(int motor, int speed, int direction){

 

digitalWrite(STBY, HIGH); 

 

boolean inPin1 = LOW;

boolean inPin2 = HIGH;

 

if(direction == 1){

inPin1 = HIGH;

inPin2 = LOW;

}

 

if(motor == 1){

digitalWrite(AIN1, inPin1);

digitalWrite(AIN2, inPin2);

analogWrite(PWMA, speed);

}else{

digitalWrite(BIN1, inPin1);

digitalWrite(BIN2, inPin2);

analogWrite(PWMB, speed);

}

}

 

void stop(){

//enable standby

digitalWrite(STBY, LOW);

}