本帖最后由 IOT专业户 于 2018-12-5 14:34 编辑
Arduino控制42步进电机 1、项目总览 2、42步进电机 可以看到这个是四线步进电机,内部两两短接,可以通过万用表测出,相同相的线随意接入驱动器的A+,A-和B+,B-即可。 3、驱动器 驱动器侧面有一排按钮,往上拨为OFF,往下为ON,其中看驱动器界面标识可见, SW1-SW3:为步进电机驱动器电流控制按钮,电流越大步进电机就越有劲,不容易丢步。 SW4:是控制限时电流按钮,即电机不转时是否给电机电流按钮,据说开启OFF可以更好的保护电机,但是为了更好地控制步进电机建议打开。 SW5-SW8:是控制电机精度的,Pulsw/rev表示的是多少个脉冲为一圈,数字越小即转的越快,数字越高越精确转的越慢。 PUL+,PUL-:步数控制,输入脉冲信号,一个脉冲(一高一低)走一步。 DIR+,DIR-:方向控制,接入高电平即正转,接入低电平则反转。 ENA+,ENA-:使能控制,一般情况悬空(都不接)即可,接入高电平步数控制失效,可以手动转动,当接入低电平恢复原有的步数控制,此时无法手动转动。
4、程序代码 保证线路连接正确的情况下,以下程序就能简单控制步进电机的运动,如果要精确控制等更精确的控制,或者用库控制的话需要更深入的研究。 [mw_shl_code=arduino,true]int x;//定义发射方波次数
//SW 往上是off往下是on
#define enaPin 6
#define dirPin 22
#define pulPin 7
void setup()
{
Serial.begin(115200);
pinMode(enaPin, OUTPUT); // Enable
pinMode(pulPin, OUTPUT); // Step
pinMode(dirPin, OUTPUT); // Dir
digitalWrite(enaPin, LOW); // Set Enable low
}
void loop()
{
digitalWrite(dirPin, HIGH); // Set Dir high
for (x = 0; x < 256; x++) // Loop 200 times
{
// digitalWrite(pulPin, HIGH); // Output high
// delayMicroseconds(800); // Wait 1/2 a ms
// digitalWrite(pulPin, LOW); // Output low
// delayMicroseconds(800); // Wait 1/2 a ms
//这里两种驱动方式任选其一即可,上面的这个语句可以精确控制到几步,缺点:占用CPU时间,这个控制下CPU无法进行其他运算。
analogWrite(pulPin, x);//如果用analogWrite则注释掉上面的,优点不占用CPU,写法简单,缺点,不能精确控制到几步,下同。
Serial.println(x);
}
delay(1000); // pause one second
digitalWrite(dirPin, LOW); // Set Dir low
for (x = 0; x < 255; x++) // Loop 2000 times
{
// digitalWrite(pulPin, HIGH); // Output high
// delayMicroseconds(800); // Wait 1/2 a ms
// digitalWrite(pulPin, LOW); // Output low
// delayMicroseconds(800); // Wait 1/2 a ms
analogWrite(pulPin, x);
Serial.println(x);
}
delay(1000); // pause one second
}[/mw_shl_code]
|