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)
, но выводит то же самое. Что не так с моим кодом, из-за которого двигатель может двигаться только в одном направлении?
@Jade Stark, 👍0
Обсуждение1 ответ
Мне посчастливилось знать причину. Это из-за моей ошибки в контактах проводки. Сначала на моих выводах драйвера (2B-2A-1B-1A) были указаны черный, зеленый, синий и красный цвета. К счастью, я наткнулся на эту картинку и изменил порядок, как на картинке. 2Б-Черный, 2А-Зеленый, 1Б-Красный, 1А-Синий. Теперь он может двигаться в обоих направлениях (по и против часовой стрелки)
- AccelStepper.h — Как быстро увеличить скорость двигателя NEMA 17?
- Шаговый двигатель не работает с платой A4988
- Шаговый двигатель работает медленно при чтении с датчика MPU 6050
- Невозможно управлять двигателем с помощью ESP32 с помощью переключателя логического уровня.
- CD rom stepper нагревается
- Перегорают ли мои шаговые двигатели? В чем здесь проблема?
- Почему мой шаговый двигатель работает, когда я открываю последовательный порт?
- Не могу управлять 4 шаговыми двигателями одновременно
попробуйте запустить несколько примеров скетчей в библиотеке, @jsotola
@jsotola этот код на самом деле был из одного из примеров скетчей в библиотеке :(, @Jade Stark