Arduino Uno步进电机问题

时间:2017-05-28 16:10:50

标签: c++ arduino

我正在使用一个步进电机连接到Arduino Uno上的引脚9,10,11和12。为了旋转步进电机,我写了一个辅助方法。这种特殊的步进电机每步旋转1.8度。方法是:

void rotateStepperBy(float deg) {
  int steps = deg / 1.8;
  motor.step(steps);
}

该方法适用于小程度测量,但如果我给它更大程度的测量,如45和90,则表现出意想不到的方式(旋转,前后旋转)。这是我尝试的一个例子:< / p>

#include <Stepper.h>

Stepper motor(200, 9, 10, 11, 12);

void setup() {
  rotateStepperBy(360);
}

void loop() {
  rotateStepperBy(90);
  delay(10);
}

void rotateStepperBy(float deg) {
  int steps = deg / 1.8;
  motor.step(steps);
}

motor.step是否完成,然后程序的其余部分恢复,或者是否需要更长的延迟来进行更大程度的测量以使电机完成步进?

1 个答案:

答案 0 :(得分:1)

  

motor.step是否完成,然后程序的其余部分恢复..

是的,motor.step()a blocking function

  

此功能正在阻止;也就是说,它会等到电机有   完成移动以将控制传递到草图中的下一行。

但您可能需要设置setup()的速度,例如motor.setSpeed(30);

查看code for stepper它看起来像step_delay保持未定义(或零),直到调用setSpeed()(即它在构造函数中没有得到默认值..)< / p>

unsigned long step_delay; // delay between steps, in ms, based on speed

此值仅在setSpeed()

中更改
/*
 * Sets the speed in revs per minute
 */
void Stepper::setSpeed(long whatSpeed)
{
  this->step_delay = 60L * 1000L * 1000L / this->number_of_steps / whatSpeed;
}