51单片机控制步进电机能够正转却不能反转?

我的单片机程序使用码表四拍的进行控制步进电机,正转码表可以使电机运行,反转码表却不行,请问怎么回事儿?

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code F_Rotation[4]={0x40,0x20,0x10,0x08};//正转表格
uchar code B_Rotation[4]={0x08,0x10,0x20,0x40};//反转表格

void Delay(unsigned int i)//延时
{
while(--i);
}

main()
{

unsigned char i;
P1 = 0x00;
Delay(5000);
while(1)
{
for(i=0;i<4;i++) //4相
{
P1=F_Rotation[i]; //输出对应的相 可以自行换成反转表格
/*把上面这行换成P1=B_Rotation[i]; 步进电机不能运转*/
Delay(8000); //改变这个参数可以调整电机转速
}
}
}

这可能与你步进电机的停止步距角有点关系,既然正转从0x40开始没问题,你试试反转也从此开始。试试如下修改。
uchar code B_Rotation[4]={x040,0x08,0x10,0x20};//反转表格追问

谢谢你的回答。试过,不行。偶尔可以运转,但是运行也完全不一样的速度,有卡顿,时间修改也写过按键控制,不是时间上的问题。检查硬件没有问题,甚至更换过大电流的电源供应也是一样。但是这个程序从理论上应该也没错呀。

追答

你修改一下延时参数,可能是频率高低不合适造成的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-10
你修改Delay(8000);这个延时的时间,来调节脉冲的速度,估计基本上就可以调出来。追问

抱歉,这个时间应该不是问题。我在问题上说过正转是没有问题的,所以我才困惑,还请帮忙看看是什么问题。

追答

试试才知道。

第2个回答  2013-08-10
四拍 正转 A B C D 反转 A D C B 这样控制的
第3个回答  2013-08-10
反转码对吗?追问

对呀,就是反转码,但是运行不了呀

追答

这个跟电路有关系,首先看看电路硬件有没有问题?

相似回答