用电位器控制步进电机的速度

时间:2019-08-21 12:24:01

标签: arduino stepper

我正在尝试使用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);
}

1 个答案:

答案 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);
}