Как заставить шаговый двигатель вращаться по часовой стрелке и против часовой стрелки

Я новичок в Arduino, поэтому мне нужна ваша помощь, чтобы понять, почему мой шаговый двигатель не вращается по часовой стрелке и против часовой стрелки. Все, что я мог сделать, это заставить его вращаться только в одном направлении.

Я использую библиотеку AccelStepper

Вот мой код:

#include <AccelStepper.h>
//Определяем подключения шагового двигателя
#define dirPin 4
#define stepPin 14
//Создаем шаговый объект
AccelStepper stepper(1,stepPin,dirPin); //тип моторного интерфейса должен быть установлен на 1 при использовании драйвера.
void setup()
{
  stepper.setMaxSpeed(1200); //максимальное количество шагов в секунду
}
void loop()
{
  stepper.setSpeed(1200); // шагов в секунду
  stepper.runSpeed(); // двигаем двигатель с постоянной скоростью, заданной setSpeed()
}

Я пытался добавить задержку и код против часовой стрелки, но это не работает.

#include <AccelStepper.h>
//Определяем подключения шагового двигателя
#define dirPin 4
#define stepPin 14
//Создаем шаговый объект
AccelStepper stepper(1,stepPin,dirPin); //тип моторного интерфейса должен быть установлен на 1 при использовании драйвера.
void setup()
{
  stepper.setMaxSpeed(1200); //максимальное количество шагов в секунду
}
void loop()
{
  Serial.println("clockwise");
  stepper.setSpeed(1200); // шагов в секунду
  stepper.runSpeed(); // двигаем двигатель с постоянной скоростью, заданной setSpeed()
  delay(1000);
  Serial.println("counterclockwise");
  stepper.setSpeed(-1200); // шагов в секунду
  stepper.runSpeed(); // двигаем двигатель с постоянной скоростью, заданной setSpeed()
  delay(1000);
}

, 👍0

Обсуждение

Попробуйте использовать более низкие значения для вращения, скажем, 150. Некоторые драйверы легко перегреваются при использовании более высоких скоростей., @smajli

он вращается только в одном направлении... в каком направлении?, @jsotola

Нет, дело не в нагреве или более высокой скорости. Если я поставлю 1200, он будет двигаться точно по часовой стрелке, если я поставлю значение -1200, он будет двигаться идеально против часовой стрелки. Но если я попытаюсь использовать оба, это создаст проблему, @Hardy

Какое оборудование вы используете? Я имею в виду, что такое драйвер шагового двигателя? Есть драйверы, которые легко перегреваются и (из-за встроенной защиты от перегрева) перестают работать., @smajli

@smajli дело не в нагреве я что-то пропустил с кодом если я вращаю в 1 направлении только с кодом по умолчанию, он работает нормально. Двигатель — шаговый двигатель NEMA17 5,5 кг/см, @Hardy


2 ответа


0

С веб-сайта AccelStepper: ссылка

Скорость более 1000 шагов в секунду ненадежна

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

,

спасибо за указание, но все равно такое же поведение, @Hardy


2

Здравствуйте, это ссылка на библиотечные функции, доступные в библиотеке accelstepper.

Перейдите по ссылке, она предоставит вам проблемы с вашим кодом и пример для вашего приложения, например, @smajli сказал, что шаги более 1000 ненадежны, здесь вы можете увидеть setSpeed(float ) функция, где установка отрицательного или положительного знака выбирает направление, а значение устанавливает скорость вращения.

,

чем вы за ваш вклад, но я все еще пытаюсь понять функции :( я изменил скорость на 1000 и поведение все еще такое же, @Hardy

Вы пробовали -500 и 500?, @Vaibhav

да, приятель, кажется, я не могу использовать функцию задержки в цикле, но я не понимаю, как использовать другую функцию этой библиотеки или использовать функцию миллиса, @Hardy