1A 双路电机驱动小板 TB6612FNG

来自Duinopeak_COM
跳转至: 导航搜索

产品简介

TB6612FNG是一个非常优秀的双电机驱动小板,它有两个完美的接口去驱动两个小型直流电机,如我们常用的微型金属减速马达控制器,当然也可用于控制一个双极步进电机。基于MOSFET场效应管的H桥比老版本使用的基于BJT-H桥驱动更有效率,例如L298N和三洋的LB1836M,这样就使得更多的电流被送到电机。我们在电路板上的小接口可直接访问TB6612FNG的所有功能,并添加电源电容器和电池反接保护供应电机(注:没有反向保护Vcc连接)。在一个典型的应用中,我们将电力连接布置在电路板的侧边,而控制的连接在电路板的另外一边。所有的控制输入在内部就已经拉低。两台电机的每个通道有两个方向控制引脚和一个接受PWM输入频率达100Khz的速度控制引脚。
2014-11-27 08h51 33.jpg


规格参数

  • 最大输入电压:VM = 15V
  • 最大输出电流:Iout = 1.2A(平均)/3.2A(峰值)
  • 正反转/短路刹车/停机功能模式
  • 内置过热保护和低压检测电路
  • SSOP24封装
  • 无铅封装

应用示例

如果你使用一个功率放大三极管和一块带主控芯片的开发板,你只能用PWM来驱动电机往一个方向旋转,现在我们来学习一下TB6612FNG,它不只是一个双电机驱动,它里面有一个双H桥。一个h桥基本上是允许你切换电流方向的晶体管的特定设置。
所以当连接到电机的时候,这意味着你可以在两个方向控制电机的自旋,并配合PWM的输入来控制转速,您可以使用Arduino,来让他们在任何速度旋转。因为TB6612FNG有2个H桥,你不仅可以使一个机器人实现前进和后退的功能,而且还能够让每个车轮在不同的方向旋转。

接线

如果你手头上已经有一块驱动板了,请按照以下方式接线。从图上,你大概能看到这块主控板需要占用Arduino的几个引脚,这个看起来很复杂,但是他却非常有条理,另外你需要给你的TB6612FNG接上外部供电。(TB6612FNG可以使用2.5到13v的电压),因为arduino上5V的电压并不能
够很好的驱动电机,如果你做,你会损害你的Arduino。
在TB6612FNG上面有那么多的控制针脚,下面就一个一个的详细的说明,Standby是备用引脚,如果拉低,将会让电机和电源断开连接,MotorA下面的INT1 INT2是控制A电机的方向,MotorB下面的INT1,INT2是控制B电机的方向的。另外相应的PWM引脚是控制电机转速用的。
Tb6612fng wire.jpg

编程

下面的控制代码是非常的基础,我们创建了一个TB6612FNG的控制函数。 使控制你的Arduino能够更加简单的控制TB6612FNG,以达到你想要的效果,但你也可以改变它,按照你自己的方式去控制。正如我上面提到的,每个电机有3控制管脚,2为方向(INT1,INT2),
一个是速度(PWM)。 这里我们以一个电机的控制引脚加以说明:

MOTOR A      INT1       INT2              PWM              direction
             LOW        HIGH        0(停止)-255(最高)       前

MOTOR A      INT1       INT2              PWM              direction 
             HIGH       LOW         0(停止)-255(最高)       后

MOTOR A      INT1       INT2               PWM             direction
          HIGH(LOW)(HIGH)LOW    0(停止)-255(最高)      停止

当INT1,INT2同时为HIGH或者LOW时,电机停止。

int STBY = 10; //standby

//Motor A
int PWMA = 3; //Speed control 
int AIN1 = 9; //Direction
int AIN2 = 8; //Direction

//Motor B
int PWMB = 5; //Speed control
int BIN1 = 11; //Direction
int BIN2 = 12; //Direction

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, full speed, left
  move(2, 255, 1); //motor 2, full speed, left

  delay(1000); //go for 1 second
  stop(); //stop
  delay(250); //hold for 250ms until move again

  move(1, 128, 0); //motor 1, half speed, right
  move(2, 128, 0); //motor 2, half speed, right

  delay(1000);
  stop();
  delay(250);
}


void move(int motor, int speed, int direction){
//以一个确定的速度和方向移动电机
//电机: 0 代表 B 1 代表 A
//速度: 0 关闭电机, 255 开启最快速度
//方向: 0 正转, 1 反转

  digitalWrite(STBY, HIGH); //关闭 standby

  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(){
//开启standby  
  digitalWrite(STBY, LOW); 
}

资源