刚刚下决心准备学好单片机 弄个步进电机真正反转,但通过Protuse模拟发现每次转动都不一样。目标电机是两相四线,通过L298,除第一次按下开关转动之后,往后总会出现半天一小转,甚至不转,以下是本人的代码,请各位大神过目是否有错误,给出指导意见。还有什么启动频率、具体细分什么的是如何实现,请给小弟些指导。
#include<reg52.h>
sbit key1=P1^0;
sbit key2=P1^1;
sbit IN1=P2^0;
sbit IN2=P2^1;
sbit IN3=P2^2;
sbit IN4=P2^3;
sbit motor_Ea=P2^4;
sbit motor_Eb=P2^5;
void delay(unsigned int x)
{
unsigned int i,j;
for (i=0;i<x;i++)
for(j=0;j<110;j++);
}
void motor_left()
{
motor_Ea=1;
IN1=0;
IN2=1;
motor_Eb=1;
IN3=0;
IN4=1;
delay(40);
motor_Ea=0;
motor_Eb=0;
}
void motor_right()
{
motor_Ea=1;
IN1=1;
IN2=0;
motor_Eb=1;
IN3=1;
IN4=0;
delay(40);
motor_Ea=0;
motor_Eb=0;
}
void main()
{
while(1)
{
if(key1==0)
{
delay(4);
if(key1==0)
{
while(1)
{
motor_left();
break;
}
while(!key1)
delay(4);
while(!key1);
}
}
else if(key2==0)
{
delay(4);
if(key2==0)
{
while(1)
{
motor_right();
break;
}
while(!key2)
delay(4);
while(!key2);
}
}
else
motor_Ea=0;
motor_Eb=0;
}
} |