关于51单片机控制步进电机位置偏移的问题;写了步进电机正转和反转两个函数,单独运行正转或反转角度都是没有问题的,但先执行正转某个角度,然后再执行反转相同角度却回不到原来的位置,搞不明白什么情况,请大家指点一下,万分感谢!程序代码如下:
#include "Public.h"
sbit MA=P3^3;
sbit MC=P3^2;
sbit MB=P3^1;
sbit MD=P3^0;
u8 step1=0,step2=0;
//busu为步数,0.9度每步。
//speed为速度,单位n*10微秒每步。
void motor_R(u16 busu,u16 speed)
{
u16 i=0;
for(i=0;i<busu;i++)
{
if(step1==8)step1=0;
switch(step1)
{
case 0:MA=1;MB=0;MC=0;MD=0;break;
case 1:MA=1;MB=1;MC=0;MD=0;break;
case 2:MA=0;MB=1;MC=0;MD=0;break;
case 3:MA=0;MB=1;MC=1;MD=0;break;
case 4:MA=0;MB=0;MC=1;MD=0;break;
case 5:MA=0;MB=0;MC=1;MD=1;break;
case 6:MA=0;MB=0;MC=0;MD=1;break;
case 7:MA=1;MB=0;MC=0;MD=1;break;
}
step1++;
delay_10us(speed);
}
MA=0;MB=0;MC=0;MD=0;
}
void motor_L(u16 busu,u16 speed)
{
u16 i=0;
for(i=0;i<busu;i++)
{
if(step2==8)step2=0;
switch(step2)
{
case 0:MA=1;MB=0;MC=0;MD=1;break;
case 1:MA=0;MB=0;MC=0;MD=1;break;
case 2:MA=0;MB=0;MC=1;MD=1;break;
case 3:MA=0;MB=0;MC=1;MD=0;break;
case 4:MA=0;MB=1;MC=1;MD=0;break;
case 5:MA=0;MB=1;MC=0;MD=0;break;
case 6:MA=1;MB=1;MC=0;MD=0;break;
case 7:MA=1;MB=0;MC=0;MD=0;break;
}
step2++;
delay_10us(speed);
}
MA=0;MB=0;MC=0;MD=0;
}
void main()
{
u8 i=0;
P3M0 |= 0x0f; P3M1 &= ~0x0f;
P5M0 = (P5M0 & ~0x20) | 0x10; P5M1 = (P5M1 & ~0x10) | 0x20;
delay_ms(1);
P54=1;
motor_R(800,100);
delay_ms(1000);
motor_L(800,100);
delay_ms(1000);
while(1)
{
}
}