搞了一晚上TB6560都没用成功驱动步进电机,昨天数电实验做了脉冲分配器忽然有了信心,并成功完成调试。

TB6560控制步进电机图解

上面就是TB6560的图,底部有一块很大的散热片,上面还有接线头和一些拨码开关。TB6560有A+、A-、B+、B-两路的输出,还有CLK(CP时钟)、CW(方向)、EN(使能)三个输入(算上正负两极一共有6条接线),另外还有电源VCC与GND的输入端。

TB6560控制步进电机图解

TB6560控制步进电机图解

以上是TB6560的两种接法。本人用Arduino作为控制器,直接将各个输入引脚的阴极短接后接地,CLK+、CW+、EN+作为输入端接Arduino的IO口。

TB6560控制步进电机图解

TB6560控制步进电机图解

这是TB6560拨码开关的具体作用,该表刻于TB6560中央。

步进电机一般的接线方法如下:

TB6560控制步进电机图解

我使用的是四出线的步进电机,步进电机的线有不同颜色,按照下图的方法接线。

TB6560控制步进电机图解

注意:切不可随意接线,否则步进电机时序错误会导致旋转混乱!比如,我第一次调试就按照四根线的排列顺序分别与A+、A-、B+、B-相连,最后证实这一接法是错误的,步进电机会不停地“摇头”,无法正常工作。

TB6560控制步进电机图解

以上是实物连接图

这里步进电机额定电流为1.4A,因此SW1 SW2 SW3 S1 为:0110,选择停止电流为50%,细分步数为1步,衰减方式为50%。

总体拨码开关的值为(从SW1~S6):011000001

代码如下:

int CLK=7;

int CW=6;

int EN=5;

void setup() {

pinMode(CLK,OUTPUT);

pinMode(CW,OUTPUT);

pinMode(EN,OUTPUT);

digitalWrite(EN,LOW);//低电平有效

}

void loop() {

rotate(5,0);

delay(1000);

rotate(10,1);

while(1);

}

void cycle(void){

for(int i=0;i

digitalWrite(CLK,HIGH);

delayMicroseconds(500);

digitalWrite(CLK,LOW);

delayMicroseconds(500);

}

}

//direct=0,顺时针转;direct=1,逆时针转

void rotate(int n ,int direct){

if(direct==0){

digitalWrite(CW,LOW);

for(int i=0;i

cycle();

}

}

else{

digitalWrite(CW,HIGH);

for(int i=0;i

cycle();

}

}

}

控制步进电机的CP脉冲是人为给定的:

digitalWrite(CLK,HIGH);

delayMicroseconds(500);

digitalWrite(CLK,LOW);

delayMicroseconds(500);

注意控制其周期,我将其设置为500us高电平+500us低电平,CP脉冲(CLK)的周期为1KHz,发现此时步进电机的噪音最小,旋转最稳定!

如果将周期改为0.8ms或者1.2ms,会发现步进电机转速发生改变,同时自身会抖动并发出一定的噪音。

脉冲的最适占空比和装负载后最适频率尚未测定。

200个CP脉冲可以使步进电机转一圈。

TB6560也可硬直接用analogWrite()来作为CLK输入,但是实测噪音较大,仅仅是用起来方便,还是建议自己写函数控制。