|
|
各位大牛大神好,最近学用Arudino控制步进电机。
硬件:Arduino MEGA2560 R3 开发板+L298N驱动模块+步进电机42BYG034-07(步矩角1.8度)。
目前状况:能将步进电机分成32拍控制,也就是1600个小脉冲使步进电机转一圈,但停下来时都达不到我要求的细分角度,只能停止到0.9度的倍数度数,不知是程序问题,还是硬件受限问题导致无法再细分,我外部供的是12.6V电源,现阶段程序如下:
int count=0;
int Motor_Plus=0;
void setup()
{
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop()
{ advance();
delayMicroseconds(350);
count++;
Motor_Plus++;
if(Motor_Plus==33) Motor_Plus=1;
if(count>1598) delay(1000);
}
void advance()
{
switch(Motor_Plus)
{
case 1:
digitalWrite(6,255);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,192);//1
break;
case 2:
digitalWrite(6,255);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,126);//2
break;
case 3:
digitalWrite(6,255);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,64);//3
break;
case 4:
digitalWrite(6,255);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,0);//4
break;
case 5:
digitalWrite(6, 255);
digitalWrite(9, 0);
digitalWrite(10,64);
digitalWrite(11, 0);//5
break;
case 6:
digitalWrite(6, 255);
digitalWrite(9, 0);
digitalWrite(10,126);
digitalWrite(11, 0);//6
break;
case 7:
digitalWrite(6, 255);
digitalWrite(9, 0);
digitalWrite(10,192);
digitalWrite(11, 0);//7
break;
case 8:
digitalWrite(6, 255);
digitalWrite(9, 0);
digitalWrite(10,255);
digitalWrite(11, 0);//6
break;
case 9:
digitalWrite(6,192);
digitalWrite(9,0);
digitalWrite(10,255);
digitalWrite(11,0);//9
break;
case 10:
digitalWrite(6,126);
digitalWrite(9,0);
digitalWrite(10,255);
digitalWrite(11,0);//10
break;
case 11:
digitalWrite(6,64);
digitalWrite(9,0);
digitalWrite(10,255);
digitalWrite(11,0);//11
break;
case 12:
digitalWrite(6, 0);
digitalWrite(9,0);
digitalWrite(10,255);
digitalWrite(11,0);//12
break;
case 13:
digitalWrite(6,0);
digitalWrite(9, 64);
digitalWrite(10, 255);
digitalWrite(11,0);//13
break;
case 14:
digitalWrite(6,0);
digitalWrite(9, 126);
digitalWrite(10, 255);
digitalWrite(11,0);//14
break;
case 15:
digitalWrite(6,0);
digitalWrite(9, 192);
digitalWrite(10, 255);
digitalWrite(11,0);//15
break;
case 16:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 255);
digitalWrite(11,0);//16
break;
case 17:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 192);
digitalWrite(11,0);//17
break;
case 18:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 126);
digitalWrite(11,0);//16
break;
case 19:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 64);
digitalWrite(11,0);//19
break;
case 20:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 0);
digitalWrite(11,0);//20
break;
case 21:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 0);
digitalWrite(11,64);//21
break;
case 22:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 0);
digitalWrite(11,126);//22
break;
case 23:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 0);
digitalWrite(11,192);//23
break;
case 24:
digitalWrite(6,0);
digitalWrite(9, 255);
digitalWrite(10, 0);
digitalWrite(11,255);//24
break;
case 25:
digitalWrite(6,0);
digitalWrite(9, 192);
digitalWrite(10, 0);
digitalWrite(11,255);//25
break;
case 26:
digitalWrite(6,0);
digitalWrite(9, 126);
digitalWrite(10, 0);
digitalWrite(11,255);//26
break;
case 27:
digitalWrite(6,0);
digitalWrite(9, 64);
digitalWrite(10, 0);
digitalWrite(11,255);//27
break;
case 28:
digitalWrite(6,0);
digitalWrite(9, 0);
digitalWrite(10, 0);
digitalWrite(11,255);//26
break;
case 29:
digitalWrite(6,64);
digitalWrite(9, 0);
digitalWrite(10, 0);
digitalWrite(11,255);//29
break;
case 30:
digitalWrite(6,126);
digitalWrite(9, 0);
digitalWrite(10,0);
digitalWrite(11,255);//30
break;
case 31:
digitalWrite(6,192);
digitalWrite(9, 0);
digitalWrite(10, 0);
digitalWrite(11,255);//31
break;
case 32:
digitalWrite(6,255);
digitalWrite(9, 0);
digitalWrite(10,0);
digitalWrite(11,255);//32
break;
case 33:
digitalWrite(6,0);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,0);
break;
}
请大神帮忙解答下,步进电机达到1200步以上的细分,是怎么做到的,网上都说步进电机可以转到任意角度,我怎么试也不行,纠结了快半个月了,是硬件要换吗?Arudino可以让步进电机42BYG034-07细分到步矩角最少几度?如何做到?
附加问题:8引脚可以用于PWM输出吗? |
|