我正在尝试使用EasyDriver,NEMA17步进电机,电位计和arduino构建可变速的小型旋转工作台。我在使用代码时遇到了麻烦。基本上,电动机的旋转速度与电位器位置相同。当我将电位计放在最终位置附近时,电动机也开始旋转。并且仅在该位置不断旋转。
我已经检查了所有硬件组件,并且它们工作正常。我猜问题出在代码中。将LED二极管放在步进销上,我看到arduino工作正常,但是步进电机没有相应地移动。
void setup() {
// put your setup code here, to run once:
//STEP PIN
pinMode (13, OUTPUT);
//POTPIN
pinMode (A5, INPUT);
//DIRPIN
pinMode (12, OUTPUT);
digitalWrite (12, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
int potValue = analogRead (A5) / 8;
digitalWrite (13, HIGH);
delay (potValue);
digitalWrite (13, LOW);
delay (potValue);
}
答案 0 :(得分:0)
我相信您的问题是使用delay()
函数时,此类型的电机驱动器的值范围错误。
您的延迟表示迈出一步的时间,您的转子速度取决于您的电机有多少步。我建议延迟播放between 10 and 2000 微秒。您当前的延迟功能设置为 0到128毫秒之间,这比电动机的要求要慢很多。
要解决此问题,请尝试使用map()
来正确设置电动机的延迟。我还建议您使用delay()
函数而不是delayMicroseconds()
。
基本上,您可以使用以下方法将电位计值转换为正确的延迟值:
int delayValue= map(potValue, 0, 1023, 10, 2000);
您的代码将类似于以下代码:
void setup() {
pinMode (13, OUTPUT); //STEP PIN
pinMode (A5, INPUT); //POTPIN
pinMode (12, OUTPUT); //DIRPIN
digitalWrite (12, LOW);
}
void loop() {
int potValue = analogRead (A5); // Read from potentiometer
int delayValue= map(potValue, 0, 1023, 10,2000); // Map potentiometer value to a value from 300 to 4000
digitalWrite (13, HIGH);
delayMicroseconds(delayValue);
digitalWrite (13, LOW);
delayMicroseconds(delayValue);
}