Arduino平衡小车

一,TB6612FNG电机驱动芯片

TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流MOSFET-H桥结构,双通道电路输出,可同时驱动2个电机.

参数名称参数值
电压范围2.7-5.5V
最大输入电压15V
输出电流1.2A(平均)/3.2A(峰值)
输出低通电阻0.5Ω
封装形式SSOP24
电机驱动路数2通道
功能模式顺时针/逆时针/短刹车/停止
保护功能内置热关断电路和低压检测电路
接口方式2.54mm间距排针
模块尺寸20×19.5mm

tb6612fng

 二、与Arduino的连接如下

 

ArduinoTB6612FNG
3PWMA
2AIN1
4AIN2
7STBY
8BIN1
12BIN2
9PWMB
GNDGND
12VVM
5VVCC

三、电机与TB6612FNG连线

电机ATB6612FNG电机B
+AO1
-AO2
BO2-(负极)
BO1+(正极)

 四、编码器介绍

4.1、编码器简介

电机编码器是安装在电机上的旋转编码器,它通过跟踪电机轴的速度和/或位置来提供闭环反馈信号。监视的参数由应用的类型确定,可以包括速度、距离、RPM、位置等。利用编码器或其他传感器控制的特定参数的应用称为闭环反馈或闭环控制系统。

电机编码器的工作原理可以分为几个主要步骤:光线通过编码盘(其上有透光和遮光条纹),光学传感器将时通时断的光信号转换成电信号,这些电信号经过电子信号处理器的处理变成一系列方波脉冲信号,最后电子信号处理器会对这些方波脉冲信号进行解码和计算,从而得到电机的旋转位置、速度以及方向等信息。

电机编码器的种类繁多,其中常见的包括增量电机编码器和绝对电机编码器。增量电机编码器的输出主要用于控制电机轴的速度,而绝对电机编码器的输出则指示电机轴的运动和位置。绝对式电机编码器最常用于需要位置精度的应用中的伺服电机上。

此外,电机编码器按检测原理还可以分为光电编码器、磁编码器和感应式编码器。光电编码器使用光电头来检测光栅的位置变化,磁编码器利用霍尔元件来检测磁场的变化,而感应式编码器则通过放出磁力线来检测齿轮上的刻度变化。

电机编码器在现代工业中有广泛的应用,如位置反馈、速度反馈、角度测量和控制应用等。例如,它们可以用于测量机器人、CNC机床、印刷机、自动控制门等运动物体的位置和方向,监测供应链上的输送带和传送机、工厂中的马达系统等物体的速度,以及测量风力发电机的转子、摩天轮、汽车安全气囊、船舶方向控制等被旋转对象的转角。

总的来说,电机编码器是实现精确运动控制的关键部件,对于提高工业自动化和机器人技术的性能和可靠性具有至关重要的作用。

由于霍尔编码器是由一个磁圈和两个感应磁性的传感器组成,当编码器N极转到A的传感器时,就会产生高电平,否则产生低电平;B传感器也亦然。


///TB6612引脚接线///
//直流电机----------TB6612丝印标识----------ArduinoUNO主板引脚
//                     PWMA-----------------3
//                     AIN2-----------------4
//                     AIN1-----------------2
//                     STBY-----------------7
//                     BIN1-----------------8
//                     BIN2-----------------12
//                     PWMB-----------------9
//                     GND------------------GND
//                     VM-------------------12V电池
//                     VCC------------------5V
//                     GND------------------GND
//电机A正极-------------AO1
//电机A负极-------------A02
//电机B负极-------------BO2
//电机B正极-------------BO1
//                     GND-----------------GND
//直流电机----------TB6612丝印标识----------ArduinoUNO主板引脚

//定义引脚名称
#define PWMA 3  //3为模拟引脚,用于PWM控制
#define AIN1 2
#define AIN2 4
#define PWMB 9  //9为模拟引脚,用于PWM控制
#define BIN1 8
#define BIN2 12
#define STBY 7  //2、4、8、12、7为数字引脚,用于开关量控制

int PwmA, PwmB;

void setup() {
  //TB6612电机驱动模块控制信号初始化
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
  pinMode(PWMA, OUTPUT);//A电机PWM
  pinMode(PWMB, OUTPUT);//B电机PWM
  pinMode(STBY, OUTPUT);

  //初始化TB6612电机驱动模块
  digitalWrite(AIN1, 1);//控制电机A的方向,(AIN1, AIN2)=(1, 0)为正转,(AIN1, AIN2)=(0, 1)为反转
  digitalWrite(AIN2, 0);
  digitalWrite(BIN1, 0);//控制电机B的方向,(BIN1, BIN2)=(0, 1)为正转,(BIN1, BIN2)=(1, 0)为反转
  digitalWrite(BIN2, 1);
  digitalWrite(STBY, 1);//TB6612FNG使能, 置0则所有电机停止, 置1才允许控制电机
  analogWrite(PWMA, 0);
  analogWrite(PWMB, 0);

}

/**************************************************************************
函数功能:设置指定电机转速
入口参数:指定电机motor,motor=1(2)代表电机A(B); 指定转速pwm,大小范围为0~255,代表停转和满速
返回  值:无
**************************************************************************/
void SetPWM(int motor, int pwm)
{
  if(motor==1&&pwm>=0)//motor=1代表控制电机A,pwm>=0则(AIN1, AIN2)=(1, 0)为正转
  {
    digitalWrite(AIN1, 1);
    digitalWrite(AIN2, 0);
    analogWrite(PWMA, pwm);
  }
  else if(motor==1&&pwm<0)//motor=1代表控制电机A,pwm<0则(AIN1, AIN2)=(0, 1)为反转
  {
    digitalWrite(AIN1, 0);
    digitalWrite(AIN2, 1);
    analogWrite(PWMA, -pwm);
  }
  else if(motor==2&&pwm>=0)//motor=2代表控制电机B,pwm>=0则(BIN1, BIN2)=(0, 1)为正转
  {
    digitalWrite(BIN1, 0);
    digitalWrite(BIN2, 1);
    analogWrite(PWMB, pwm);
  }
  else if(motor==2&&pwm<0)//motor=2代表控制电机B,pwm<0则(BIN1, BIN2)=(1, 0)为反转
  {
    digitalWrite(BIN1, 1);
    digitalWrite(BIN2, 0);
    analogWrite(PWMB, -pwm);
  }
}

void loop() 
{
  SetPWM(1, 255);//电机AB同时满速正转
  SetPWM(2, 255);
  delay(3000);//正转3s
  
//  SetPWM(1, 0);//电机AB停止
//  SetPWM(2, 0);
//  delay(1000);//停止1s
//  
//  SetPWM(1, 128);//电机AB同时半速正转
//  SetPWM(2, 128);
//  delay(3000);//半速正转3s
//  
//  SetPWM(1, 0);//电机AB停止
//  SetPWM(2, 0);
//  delay(1000);//停止1s
//  
//  SetPWM(1, -255);//电机AB同时满速反转
//  SetPWM(2, -255);
//  delay(3000);//反转3s
//  
//  SetPWM(1, 0);//电机AB停止
//  SetPWM(2, 0);
//  delay(1000);//停止1s
//  
//  SetPWM(1, 255);//电机A满速正转
//  SetPWM(2, -255);//电机B满速反转
//  delay(3000);//持续3s
//  
//  SetPWM(1, 0);//电机AB停止
//  SetPWM(2, 0);
//  delay(1000);//停止1s
}

以上是Arduino的代码。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值