Как изменить направление шагового двигателя с помощью библиотеки AccelStepper?

Я использую шаговый двигатель Nema 17 (200 шагов) и двигатель DRV8825. Водитель. Это конфигурация, которую я использую:

Я использую источник питания 9 В. DirPin подключен к контакту 3 на плате Arduino, а мой StepPin — к контакту 2.

Я пытаюсь переместить двигатель на 100 шагов по часовой стрелке, а затем на 100 шагов против часовой стрелки, чтобы он вернулся в исходное положение. Это код, который я использую:

#include <AccelStepper.h>

#define dirPin 3
#define stepPin 2
#define motorInterfaceType 1

int SPR = 200;

AccelStepper stepper(motorInterfaceType, stepPin, dirPin); 

void setup() {
  pinMode(dirPin,OUTPUT);
  pinMode(stepPin,OUTPUT);
  // поместите сюда свой код установки для однократного запуска:
  stepper.setMaxSpeed(200);
  stepper.setAcceleration(30);
}

void loop() {
  // поместите сюда свой основной код для многократного запуска:
  stepper.moveTo(100);

  stepper.runToPosition();
  delay(1000);

  stepper.moveTo(-100);

  stepper.runToPosition();
  delay(1000);
}

У меня две проблемы:

  1. Прежде чем переместить мотор на 100 шагов, он делает пару шагов (например, 15°), а затем начинает двигаться, сначала 100 шагов, а затем 200 шагов. Это будет первая итерация, и я не понимаю, почему она перемещает эти 200 шагов. А затем, в следующих итерациях, мотор делает всего 200 шагов.

  2. Он движется только в одном направлении. Я не могу заставить его двигаться против часовой стрелки.

, 👍2

Обсуждение

на схеме подключения показаны соединения, отличные от кода, @jsotola


1 ответ


2

Функция moveTo() принимает абсолютные позиции, поэтому, если вы хотите двигаться в обоих направлениях, вам следует соответствующим образом настроить целевые позиции.

Вы можете изменить функцию loop() следующим образом:

void loop() {
  stepper.moveTo(100);
  stepper.runToPosition();
  delay(1000);

  stepper.moveTo(0); // Возвращаемся в исходную позицию
  stepper.runToPosition();
  delay(1000);
}
,