我用直流电机驱动l298n 控制步进电机,
通过分别给A,B,C,D四根步进电机的线输入低电平信号来控制步进电机转
问题:
我写好了一个子程序,每次控制步进电机转1圈。
可是在用开关点动触发转1圈的时候,
步进电机有时候会出现反转现象、又或是说出现正转一半突然反转的情况。
明明子程序单独调试是可以正转1圈,但在多次的点动触发情况下,会出现这种乱跑的现象。
求大佬们告诉我下这是什么情况?一般怎么解决...
程序的部分内容:
int AA=22;//步进电机的四个管脚
int BB=23;
int CC=24;
int DD=25;
int g=1;//这个为步进电机的转速
int key=1;//临时开关,(key那一块我用的是红外遥控....大家就当个普通开关看下,不然全部复制过来太长了而且没必要....)
void setup()
{
Serial.begin(9600);
pinMode(AA,1);//步进电机的四个管脚
pinMode(BB,1);
pinMode(CC,1);
pinMode(DD,1);
pinMode(key,1);
}
void loop()
{
if(key==1){bujin(1);}
}
void bujin(int i)
{
int k;
if(i>=0){
for(k=i*50;k>0;k--)
{
digitalWrite(AA,0);digitalWrite(BB,1);digitalWrite(CC,1);digitalWrite(DD,1);delay(g);
digitalWrite(AA,1);digitalWrite(BB,1);digitalWrite(CC,0);digitalWrite(DD,1);delay(g);
digitalWrite(AA,1);digitalWrite(BB,0);digitalWrite(CC,1);digitalWrite(DD,1);delay(g);
digitalWrite(AA,1);digitalWrite(BB,1);digitalWrite(CC,1);digitalWrite(DD,0);delay(g);
}
}
if(i<0){ i=-i;//这里i取反,保证i为正值
for(k=i*50;k>0;k--)
{
digitalWrite(AA,0);digitalWrite(BB,1);digitalWrite(CC,1);digitalWrite(DD,1);delay(g);
digitalWrite(AA,1);digitalWrite(BB,1);digitalWrite(CC,0);digitalWrite(DD,1);delay(g);
digitalWrite(AA,1);digitalWrite(BB,0);digitalWrite(CC,1);digitalWrite(DD,1);delay(g);
digitalWrite(AA,1);digitalWrite(BB,1);digitalWrite(CC,1);digitalWrite(DD,0);delay(g);
}
}
}
|