gpt4 book ai didi

c++ - Arduino Uno 步进电机问题

转载 作者:行者123 更新时间:2023-11-28 05:07:52 24 4
gpt4 key购买 nike

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

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

该方法适用于小度数测量,但如果我给它更大的度数测量(如 45 和 90),它会以意想不到的方式运行(旋转、来回旋转)。这是我尝试的示例:

#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 是否完成然后程序的其余部分恢复,或者是否需要更长的延迟以进行更大程度的测量以使电机完成步进?

最佳答案

Does motor.step complete and then the rest of the program resumes..

是的,motor.step()a blocking function :

This function is blocking; that is, it will wait until the motor has finished moving to pass control to the next line in your sketch.

但您可能必须在 setup() 中设置速度,例如 motor.setSpeed(30);

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

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;
}

关于c++ - Arduino Uno 步进电机问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com