viernes, 4 de noviembre de 2016

Driver TB6612fNG y ARDUINO (Control de Motores DC + programa)

  Driver TB6612fNG y  ARDUINO

 (Pololu, Sparkfun Breakout)



El Modulo driver Tb6612fng cuenta con las siguientes características:

  • Puente H doble de tecnología LD MOS (2 canales para manejar 2 motores DC)
  • Voltaje máximo de entrada de hasta 15V.
  • Corriente de trabajo tipico de 1.2 A por canal y 3A pico por un lapso de 10 milisegundos
  • 2 entradas para PWM con una frecuencia máxima de hasta 100KHz
Estas características ademas de ser muy pequeño (2.0x2.0 cm como máximo ) y de ser altamente eficiente a comparación  al modulo L298N que esta basado en tecnologia bjt (no muy eficiente por lo que las baterías se agotan demasiado rapido), lo hacen un modulo driver muy versatil para distintos proyectos en donde se tenga hacer uso de motores DC, y en especial en robotica donde se le puede sacar bastante provecho usandolos con micromotores Pololu.

En este apartado explicare a como usarlos correctamente y conectarlos a la placa Arduino en donde describire  un codigo  que es altamente eficiente en el control de los motores (velocidad y dirección): Pero antes de ello tenemos que saber que en el mercado existen varios fabricantes de estos módulos usando el chip TB6612FNG y que sus patillajes no son necesariamente los mismos, por el contrario tienen diferente dispocicion de pines, pero el funcionamiento sigue siendo el mismo. Debemos verificar cual es el que vamos a usar, a continuación explico algunas características de estos:

TB6612FNG Pololu


Este modulo es fabricado por Pololu, cuenta con un transistor mosfet que evita que al conectar de manera inversa no se queme o que cuando reciba una corriente inversa  que puede ser muy perjudicial no lo dañe permanentemente. También cuenta con algunos condensadores filtros que atenúan el ruido producido por los motores DC. Tienen un tamaño de 1.5 x2.0 cm. 
Estos Módulos son generalmente un poco mas costosos que los que fabrica Sparkfun o compatibles. se conecta de esta Forma:


TB6612FNG Sparkfun Breakout y compatibles chinos

Estos módulos son fabricados por sparkfun y también por varios fabricantes chinos, No cuenta con un circuito proteccion de corriente inversa, por lo que se debe tener cuidado al conectar las polaridades de la batería de forma correcta (es recomendado poner un diodo en la alimentacion). Cuenta con  capacitores filtros que atenúan el ruido eléctrico producido por los motores.
Son mucho mas baratos  a comparación de los módulos de Pololu, varios fabricantes chinos lo comercializan a muy bajo costo por lo que si se te quema no te perjudicara económicamente. Tienen una medida de 2 . 0 x 2.0 cm. La forma de conectarlo correctamente es la Siguiente:


Código en Arduino Para manejar motores DC:

Este código Funciona de la siguiente manera: 
  • Podemos controlar velocidad y dirección de cada motor independiente del otro para esto creamos una función que recibe 2 parámetros numéricos el primero es para el motor izquierdo el segundo para el motor derecho : " void   motores(int izq , int der) "
  • Para controlar la velocidad solo basta variar el valor de los parámetros desde 0 a 255, que justamente es el pwm del arduino. Ejemplo motores(150,150);
  • Si queremos que gire en sentido inverso  los motores, pues simplemente colocamos un valor negativo desde -1 hasta -255,  la función se encargara de dar la dirección y velocidad. Ejemplo: motores(-150,-150);
  • Si queremos parar pues damos motores(0,0); 

//Se definen los pines a usar del arduino

#define pwm_i 9 //~
#define izq_1 4
#define izq_2 5

#define pwm_d 10 //~
#define der_1 6
#define der_2 7

void setup() {
  delay(1000);
pinMode(izq_1,OUTPUT);
pinMode(izq_2,OUTPUT);
pinMode(der_1,OUTPUT);
pinMode(der_2,OUTPUT);
}

void loop() {
  motores(150,150);
}

void motores(int izq, int der)
{
  if(izq>=0)
  {
    digitalWrite(izq_1,HIGH);
    digitalWrite(izq_2,LOW);
    analogWrite(pwm_i,izq);
  }
  if(izq<0)
  {
    digitalWrite(izq_1,LOW);
    digitalWrite(izq_2,HIGH);
    izq=izq*-1;
    analogWrite(pwm_i,izq);
  }

  if(der>=0)
  {
    digitalWrite(der_1,HIGH);
    digitalWrite(der_2,LOW);
    analogWrite(pwm_d,der);
  }
  if(der<0)
  {
    digitalWrite(der_1,LOW);
    digitalWrite(der_2,HIGH);
    der=der*-1;
    analogWrite(pwm_d,der);
  }
}


4 comentarios:

BUENAS TARDE ME GUSTARIA SABER SI ME PUEDEN AYUDAR A SABER COMO CONTROLAR UN MOTOR CON UN SENSOR DE MOVIMIENTO PIR? SALUDOS

estos se utilizan en los minizumos mas?

ciao cosa mi dici sui motori stepp e possibile utilizzarli

Publicar un comentario