ESP32 + шаговый двигатель 17HS3401S + драйвер A4988. Шаговый двигатель не может двигаться по часовой стрелке.

/*
* Базовый пример кода для управления степпером с помощью библиотеки AccelStepper.
*
* автор Деян, https://howtomechatronics.com
*/

#include <AccelStepper.h>

const int DIR = 12;
const int STEP = 14;

#define motorInterfaceType 1
// Определить шаговый двигатель и контакты, подключенные к 0
AccelStepper motor(motorInterfaceType, STEP, DIR); // (Тип драйвера: с 2 контактами, STEP, DIR)

void setup() {
  // Устанавливаем максимальное значение скорости для степпера
  motor.setMaxSpeed(1000); // Устанавливаем максимальное значение скорости для степпера
  motor.setAcceleration(500); // Устанавливаем значение ускорения для степпера
  motor.setCurrentPosition(0); // Устанавливаем текущую позицию на 0 шагов
  Serial.begin(115200);
  //pinMode(32,OUTPUT);
}

void loop() {
  Serial.println("Moving to 800");
  motor.moveTo(800); // Устанавливаем желаемый ход: 800 шагов (в четвертьшаговом разрешении это одно вращение)
  motor.runToPosition(); // Перемещает двигатель в целевое положение с ускорением/замедлением и блокируется до тех пор, пока l не окажется в нужном положении
     // Возвращаемся в позицию 0, используя функцию run(), которая не блокируется — оба двигателя будут двигаться одновременно
  motor.moveTo(0);
  Serial.println("Moving to 0");
  while (motor.currentPosition() != 0) {
    motor.run();  // Перемещайте или двигайте двигатель, выполняя ускорение и замедление для достижения целевого положения. Неблокирующая функция
    //
    //
  }
}

Я попробовал использовать этот код, чтобы проверить, может ли мой двигатель двигаться по часовой стрелке и против часовой стрелки, как указано в руководстве. Однако ему удается только повернуть против часовой стрелки. Я попробовал подключить четыре контакта двигателя к драйверу в следующем порядке: если черный провод подключен к контакту 2B драйвера, двигатель будет вращаться против часовой стрелки. В противном случае, если черный провод подключен к контакту 1B драйвера, двигатель будет вращаться по часовой стрелке. Я также пробовал изменить motor.moveTo(800) на motor.moveTo(100) и motor.moveTo(0) на Motor.moveTo(-100), но выводит то же самое. Что не так с моим кодом, из-за которого двигатель может двигаться только в одном направлении?

, 👍0

Обсуждение

попробуйте запустить несколько примеров скетчей в библиотеке, @jsotola

@jsotola этот код на самом деле был из одного из примеров скетчей в библиотеке :(, @Jade Stark


1 ответ


0

Мне посчастливилось знать причину. Это из-за моей ошибки в контактах проводки. Сначала на моих выводах драйвера (2B-2A-1B-1A) были указаны черный, зеленый, синий и красный цвета. К счастью, я наткнулся на эту картинку и изменил порядок, как на картинке. 2Б-Черный, 2А-Зеленый, 1Б-Красный, 1А-Синий. Теперь он может двигаться в обоих направлениях (по и против часовой стрелки)

,