基于Arduino使用TB6600步进电机驱动器
简介
这是一款专业的两相步进电机驱动,可实现正反转控制,通过3位拨码开关,可以选择7档细分控制(1、2/A、2/B、4、8、16、32),8 档电流控制(0.5A、1A、1.5A、2A、2.5A、2.8A、 3.0A、3.5A),适合驱动 57、42 型两相、四相混合式步进电机,能达到低振动、低噪声、高速度的驱动效果。
(TB6600步进电机驱动器)
产品特点
1、原装全新步进电机驱动芯片 2、8 档电流控制 3、7 种细分可调 4、接口采用高速光耦隔离 5、自动半流减少发热量 6、大面积散热片不惧高温环境使用 7、抗高频干扰能力强 8、输入电压防反接保护 9、过热,过流短路保护
功能结构
电气参数
输入输出端说明 信号输入端
PUL+ 脉冲信号输入正 PUL- 脉冲信号输入负 DIR+ 电机正、反转控制正 DIR- 电机正、反转控制负 ENA+ 电机脱机控制正 ENA- 电机脱机控制负
电机绕组连接
A+ 连接电机绕组 A+相 A- 连接电机绕组 A-相 B+ 连接电机绕组 B+相 B- 连接电机绕组 B-相
电源电压连接
VCC 电源正端“+” GND 电源负端“-” 注意:DC9-40V 不可以超过此范围,否则将无法正常工作,甚至损坏驱动器。
输入端接线说明
输入信号共有三路,它们是:①步进脉冲信号 PUL+,PUL-;②方向电平信号DIR+, DIR-;③脱机信号 ENA+,ENA-,输入信号接口有两种接法,用户可根据需要采用共阳极接法或共阴极接法。 共阳极接法:分别将 PUL+,DIR+,ENA+连接到控制系统的电源上,如果此电源是+5V 则可直接接入,如果此电源大于+5V,则须外部另加限流电阻 R,保证控制器管脚能够输出 8~15mA 电流以驱动内部光耦芯片,脉冲输入信号通过 PUL-接入,方向信号通过 DIR-接 入,使能信号通过 ENA-接入。如下图:
共阴极接法:分别将 PUL-,DIR-,EN-连接到控制系统的地端;脉冲输入信号通过 PUL+接入,方向信号通过 DIR+接入,使能信号通过 ENA+接入,若需限流电阻,限流电阻 R 的接法取值与共阳极接法相同。如下图:
注意:ENA端可不接,ENA有效时电机转子处于自由状态(脱机状态),这时可以手动转动电机转轴,做适合您的调节,手动调节完成后,再将 EN设为无效状态,以继续自动控制。
步进电机接线
两相4线,6线,8线电机接线,如下图:
系统接线
驱动器与控制器、电机、电源的接线,以共阳接法为例,如下图所示:
注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路,以免损坏驱动器。
设定拨码开关 细分数设定
细分数是通过驱动板上的拨码开关来设定的,用户可根据驱动器外壳上的细分表来自行选择(需在断电情况下设定),细分后步进电机步距角按下列方法计算:步距角=电机固有步距角/细分数,如:一 台固有步距角为 1.8°的步进电机在 4 细分下步距角为 1.8°/4=0.45°。 驱动板上拨码开关 1、2、3、分别对应 S1、S2、S3
电流大小设定
驱动板上拨码开关 4、5、6 分别对应 S4、S5、S6
关于脱机功能(ENA)
打开脱机功能后,电机转子处于自由不锁定状态,可以轻松转动,此时入脉冲信号不响应, 关闭此信号后电机接受脉冲信号正常运转。 注意:实际应用中一般不接。
常见问题解答
1、问:初次使用该步进驱动器,如何能尽快上手? 答:正确接好电源和电机后,只接脉冲信号PUL(先将频率设置为1K以内),细分设置为16,方向和脱机悬空,此时加电后电机默认正转,运行无误后再依次测试加速(提高频率)、方向、细分和脱机等功能。 2、问:控制信号高于 5V,一定要加串联电阻吗? 答:是的,否则有可能烧毁驱动器控制接口的电路。 3、问:接线后电源指示灯亮,但电机不转,是什么原因? 答:如果接线正确,但仍然不转,说明控制部分驱动能力不够,这种情况多出现在用单片的 I/O 口直接控制方式,请确保控制接口有5mA 的驱动能力。 4、问:如何判断步进电机四条线的定义? 答:将电机的任意两条线接在一起,此时用手拧电机转子有阻力,则这两条线是同一相,可接在驱动器 A+、A-;另外两条线短接仍然有阻力,则将这两条线接在B+和 B-。 5、问:电机的正反转情况与应实际达到的相反? 答:只需要把电机其中一相的两根线互换接入即可。
尺寸图
案例
借助于arduino硬件和mixly软件设计,用绿色、黄色、蓝色、红色和黑色五个按钮实现对步进电机的不同控制,绿色按钮控制步进电机的缓慢转动,黄色按钮控制步进电机的快速转动,蓝色按钮控制步进电机反转五圈后停止,停顿1S后再正转,正转五圈后停止,停顿1S后再反转,依次循环,红色按钮控制步进电机的快速转动,当步进电机碰到限位开关后停止,黑色按钮是对步进电机碰到限位开关停止后的脱机控制。
材料准备
主要用到的材料有,一块Arduino UNO R3开发板 ,一个滑台丝杆(两相四线步进电机),当步进电机转动时滑台会往前或往后运动,一个TB6600步进电机驱动器,一个6V电池电源,用来给Arduino UNO R3开发板供电,绿色、黄色、蓝色、红色和黑色五个按钮,用于控制步进电机的不同运动方式,12V直流电源,给TB6600步进电机驱动器供电,一个SS-5GL2小型行程限位开关,用来控制步进电机的行程,当步进电机碰到SS-5GL2小型行程限位开关时停止,杜邦线等。
本次案例采用的是共阴接法,硬件连接
Arduino UNO SS-5GL2小型行程限位开关 3.3V <------> NO GND <------> NC D6 <------> C
Arduino UNO 带线盖开关5号电池盒 5V <------> 红色线正极 GND <------> 黑色线负极
Arduino UNO TB6600步进电机驱动器 GND <------> ENA- D7 <------> ENA+ GND <------> DIR- D8 <------> DIR+ GND <------> PUL- D9 <------> PUL+
Arduino UNO 绿色按钮模块 D3 <------> OUT 5V <------> VCC GND <------> GND
Arduino UNO 黄色按钮模块 D4 <------> OUT 5V <------> VCC GND <------> GND
Arduino UNO 蓝色按钮模块 D5 <------> OUT 5V <------> VCC GND <------> GND
Arduino UNO 红色按钮模块 D11 <------> OUT 5V <------> VCC GND <------> GND
Arduino UNO 黑色按钮模块 D12 <------> OUT 5V <------> VCC GND <------> GND
12V直流电源 TB6600步进电机驱动器 正极 <------> VCC 负极 <------> GND
两相四线步进电机 TB6600步进电机驱动器 电机绕组A+ <------> A+ 电机绕组A- <------> A- 电机绕组B+ <------> B+ 电机绕组B- <------> B- 备注:可以把ENA-、DIR-和PUL-端的三根线接在一起接入Arduino UNO的GND,把五个按钮的GND端的五根线接在一起接入Arduino UNO的GND,把SS-5GL2小型行程限位开关的NC端线和带线盖开关5号电池盒的负极接在一起接入Arduino UNO的GND。
限位开关
限位开关又称行程开关,可以安装在相对静止的物体(如固定架、门框等,简称静物)上或者运动的物体(如行车、门等,简称动物)上,当动物接近静物时,开关的连杆驱动开关的接点引起闭合的接点分断或者断开的接点闭合,由开关接点开、合状态的改变去控制电路和电机,限位开关就是用以限定机械设备的运动极限位置的电气开关,限位开关有接触式的和非接触式的,接触式的比较直观,机械设备的运动部件上,安装上行程开关,与其相对运动的固定点上安装极限位置的挡块,或者是相反安装位置,当行程开关的机械触头碰上挡块时,切断了(或改变了)控制电路,机械就停止运行或改变运行。
SS-5GL2小型行程限位开关产品参数
额定电压:125V 额定电流:5V 机械寿命:约3000万次 使用环境:耐高温
(SS-5GL2小型行程限位开关电路原理图)
本次案例采用的是2/A细分,步进电机每转一圈400个脉冲,输出电流设为2.0A
设置的参数为S1 ON、S2 OFF、S3 ON、S4 ON、S5 OFF、S6 OFF。
绿色按钮控制步进电机缓慢转动
步进电机每2S转动一圈
黄色按钮控制步进电机快速转动
步进电机每400MS转动一圈
蓝色按钮控制步进电机反转五圈后停止,停顿1S后再正转,正转五圈后停止,停顿1S后再反转,依次循环。
红色按钮控制步进电机的快速转动,当步进电机碰到限位开关后停止
黑色按钮是对步进电机碰到限位开关停止后的脱机控制
总程序
程序实现代码
- void setup(){
- Serial.begin(9600);
- pinMode(3, INPUT);
- pinMode(9, OUTPUT);
- pinMode(4, INPUT);
- pinMode(5, INPUT);
- pinMode(8, OUTPUT);
- pinMode(11, INPUT);
- pinMode(6, INPUT);
- pinMode(12, INPUT);
- pinMode(7, OUTPUT);
- }
- void loop(){
- if (digitalRead(3) == HIGH) {
- for (int i = 0; i <= 400; i = i + (1)) {
- digitalWrite(9,HIGH);
- digitalWrite(9,LOW);
- delay(5);
- }
- } else if (digitalRead(4) == HIGH) {
- for (int i = 0; i <= 400; i = i + (1)) {
- digitalWrite(9,HIGH);
- digitalWrite(9,LOW);
- delay(1);
- }
- } else if (digitalRead(5) == HIGH) {
- digitalWrite(8,LOW);
- for (int i = 0; i <= 2000; i = i + (1)) {
- digitalWrite(9,HIGH);
- digitalWrite(9,LOW);
- delay(1);
- }
- delay(1000);
- digitalWrite(8,HIGH);
- for (int i = 0; i <= 2000; i = i + (1)) {
- digitalWrite(9,HIGH);
- digitalWrite(9,LOW);
- delay(1);
- }
- delay(1000);
- } else {
- digitalWrite(9,LOW);
- }
- if (digitalRead(11) == HIGH) {
- digitalWrite(8,LOW);
- if (digitalRead(6) == LOW) {
- for (int i = 0; i <= 400; i = i + (1)) {
- digitalWrite(9,HIGH);
- digitalWrite(9,LOW);
- delay(1);
- }
- } else {
- digitalWrite(9,LOW);
- }
- } else {
- digitalWrite(9,LOW);
- if (digitalRead(12) == HIGH) {
- digitalWrite(7,HIGH);
- } else {
- digitalWrite(7,LOW);
- }
- }
- }
复制代码 |