StrongZhu 发表于 2013-5-30 15:25:46

请教关于步进电机不同步的情况

taobao上买了一个42的步进电机,用L298N模块驱动。

代码很简单:

#define STEPS 60
// create instance
Stepper stepper(STEPS, 2,3,4,5);

void setup()
{
stepper.setSpeed(300);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}


void loop()
{
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);

    stepper.step(200);
    delay(500);
}

现在的问题是:
#define STEPS 60
    stepper.step(200); //正好是一整圈

-------------------------------

#define STEPS 80   // 这时候回出现不同步的现象,转不到一整圈,声音听着也有异常
    stepper.step(200); //

-------------------------------

#define STEPS 100 // 这时候回出现不同步的现象,转不到一整圈,声音听着也有异常
    stepper.step(200); //


请问,这是我的程序设置不对吗?
或者是电机有问题?L298N模块有问题?

学长 发表于 2013-5-30 16:05:07

这个 STEPS 放入 step() 的第一个参数
代表 转一圈所需要的步数

一般来说如果 步进角 是 1.8度 , 那转一圈就是 200 步。

所以, 如果这个参数不正确 当然结果就不正确了。

如果要再深入讨论为什麽需要这个 STEPS 参数,
那就要打 stepper.cpp 跟 stepper.h 这两个档案来研究了

StrongZhu 发表于 2013-5-30 17:00:53

学长 发表于 2013-5-30 16:05 static/image/common/back.gif
这个 STEPS 放入 step() 的第一个参数
代表 转一圈所需要的步数



恩,我看过了。

setSpeed函数里用了STEPS参数来计算出每一步的间隔
看来是速度过快,导致步进电机乱转。

学长 发表于 2013-5-30 18:30:46

delay(500) 还会失步?这有点奇怪哦

StrongZhu 发表于 2013-5-31 21:34:59

学长 发表于 2013-5-30 18:30 static/image/common/back.gif
delay(500) 还会失步?这有点奇怪哦

不是这个delay。

step里面,每前进一拍,都会有一个很小的delay
页: [1]
查看完整版本: 请教关于步进电机不同步的情况