一,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的连接如下
Arduino | TB6612FNG |
---|---|
3 | PWMA |
2 | AIN1 |
4 | AIN2 |
7 | STBY |
8 | BIN1 |
12 | BIN2 |
9 | PWMB |
GND | GND |
12V | VM |
5V | VCC |
三、电机与TB6612FNG连线
电机A | TB6612FNG | 电机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电机PWMpinMode(PWMB, OUTPUT);//B电机PWMpinMode(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的代码。