用51单片机控制 TB6560驱动板驱动步进电机,不能正反转
时间:10-02
整理:3721RD
点击:
驱动器:TB6560AHQ 步进电机:2相四线 只能一个方向转 不能正反转 求教懂大神指导下
#include<reg52.h>
sbit CLK=P1^0; //脉冲
sbit ENA=P1^1; //使能
sbit DIR=P1^2; //转向
sbit CW=P3^0; //正传运行按键
sbit STOP=P3^1; //停止运行按键
sbit CCW=P3^2; //反转运行按键
sbit ADJ1=P3^3; //调速运行按键
sbit ADJ2=P3^4;
sbit Led1=P0^0;
sbit Led2=P0^1;
bit Run_Status;
unsigned char Run_Dir;
#define F_DIR 0; //正转
#define B_DIR 1; //反转
unsigned int CYCLE;
void Delay_ms(unsigned char ms)
{
unsigned char i;
for(;ms>0;ms--)
{
for(i=0;i<125;i++);
}
}
void main()
{
Run_Status=0;
CLK=0;
ENA=0;
while(1)
{
if(!STOP)
{
Delay_ms(1000);
if(!STOP)
{
Run_Status=0;
CLK=0;
ENA=0;
TR0=0;
Led1=1;
Led2=1;
}
}
if(!CW&&!Run_Status)
{
Delay_ms(1000);
if(!CW&&!Run_Status)
{
Run_Status=1;
DIR=0;
ENA=1;
CYCLE=2500;
TMOD|=0X01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
IE=0X82;
TR0=1;
Run_Dir=F_DIR;
Led1=0;
}
}
if(!CCW&&!Run_Status)
{
Delay_ms(1000);
if(!CCW&&!Run_Status)
{
Run_Status=1;
DIR=0;
ENA=1;
CYCLE=2500;
TMOD|=0X01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
IE=0X82;
TR0=1;
Run_Dir=B_DIR;
Led2=0;
}
}
if(!ADJ1)
{
Delay_ms(1000);
if(!ADJ1)
{
if(CYCLE<20000)CYCLE+=2000;
else CYCLE=1000;
Run_Status=1;
TR0=1;
}
}
}
}
void Timer0_ISR(void) interrupt 1 using 1
{
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
CLK=~CLK;
}
#include<reg52.h>
sbit CLK=P1^0; //脉冲
sbit ENA=P1^1; //使能
sbit DIR=P1^2; //转向
sbit CW=P3^0; //正传运行按键
sbit STOP=P3^1; //停止运行按键
sbit CCW=P3^2; //反转运行按键
sbit ADJ1=P3^3; //调速运行按键
sbit ADJ2=P3^4;
sbit Led1=P0^0;
sbit Led2=P0^1;
bit Run_Status;
unsigned char Run_Dir;
#define F_DIR 0; //正转
#define B_DIR 1; //反转
unsigned int CYCLE;
void Delay_ms(unsigned char ms)
{
unsigned char i;
for(;ms>0;ms--)
{
for(i=0;i<125;i++);
}
}
void main()
{
Run_Status=0;
CLK=0;
ENA=0;
while(1)
{
if(!STOP)
{
Delay_ms(1000);
if(!STOP)
{
Run_Status=0;
CLK=0;
ENA=0;
TR0=0;
Led1=1;
Led2=1;
}
}
if(!CW&&!Run_Status)
{
Delay_ms(1000);
if(!CW&&!Run_Status)
{
Run_Status=1;
DIR=0;
ENA=1;
CYCLE=2500;
TMOD|=0X01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
IE=0X82;
TR0=1;
Run_Dir=F_DIR;
Led1=0;
}
}
if(!CCW&&!Run_Status)
{
Delay_ms(1000);
if(!CCW&&!Run_Status)
{
Run_Status=1;
DIR=0;
ENA=1;
CYCLE=2500;
TMOD|=0X01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
IE=0X82;
TR0=1;
Run_Dir=B_DIR;
Led2=0;
}
}
if(!ADJ1)
{
Delay_ms(1000);
if(!ADJ1)
{
if(CYCLE<20000)CYCLE+=2000;
else CYCLE=1000;
Run_Status=1;
TR0=1;
}
}
}
}
void Timer0_ISR(void) interrupt 1 using 1
{
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
CLK=~CLK;
}
您好 反转程序去了 正传也正常!接线应该也没问题
您看下 程序应该没什么错误吧?
不能正反转,我现在也遇到 了这个问题,请问你解决好了吗,我发现CW引脚没有用,无法控制转向
基本确定你用的是89C52一类的芯片,用个500欧姆的电阻上拉到5V即可,因为此芯片没有强输出,能力太渣
基本确定你用的是89C52一类的芯片,用个500欧姆的电阻上拉到5V即可,因为此芯片没有强输出,能力太渣
DIR=P1^2; 程序中正反转都是 DIR=0; 没变呀
什么意思呢?我用的k60,也遇到了这个问题、、不太清楚怎么解决
啊!懂了,非常感谢!原来是io口输出电压不够
我用的89C51的,结果接上TB6560后,只是震动,没有转!(5V驱动)
如果用l293dd的电机驱动芯片,用l293dd的程序驱动,电机可以正常运转(5V驱动),说明我的42步进电机是好的
但是为什么在TB6560上面却转不了,感觉像是只有一个相在发送脉冲!
大家好 我想问一下 tb6560 用开关电源供电 不加滤波电容 电源处 芯片能正常工作吗