Шаговый двигатель не изменяет направления движения!
Я управляю биполярным шаговым двигателем с драйвером a4988, используя библиотеку AccelStepper. Моя цель-нажать кнопку, и двигатель движется CW, затем еще одну кнопку для CCW.
Я посмотрел еще один пост с очень похожей проблемой, но решение, похоже, не очень подходит для библиотеки AccelStepper, которую я действительно хотел бы использовать, учитывая ее универсальность.
В настоящее время, какую бы кнопку я ни нажал, двигатель движется. Любая помощь будет очень признательна!
#include <AccelStepper.h>
AccelStepper stepperX(1, 3, 2);
void setup() {
pinMode(8, INPUT)
pinMode(9, INPUT);
stepperX.setMaxSpeed(100.0);
stepperX.setAcceleration(100.0);
}
int moveRight = 1000; //arbitrarily high number
int moveLeft = -1000; //arbitrarily low number
void loop() {
while (digitalRead(8) == HIGH) { //when d8 button is pressed move left
stepperX.moveTo(moveLeft); //set move
if (digitalRead(8) == LOW) { //if not pressed, kill loop
stepperX.stop();
break;
}
stepperX.run();
}
while (digitalRead(9) == HIGH) { //when d9 button is pressed move right
stepperX.moveTo(moveRight); //set move
if (digitalRead(9) == LOW) { //if not pressed, kill loop
stepperX.stop();
break;
}
stepperX.run();
}
}
@Epsicro N, 👍1
Обсуждение1 ответ
Вы работаете с ускорением и абсолютными позициями. Вы знаете об этом? Эта библиотека не предназначена для постоянной работы в одном и том же направлении. Это позволяет определить положение, в котором должно завершиться движение, ускорение или скорость, и контроллер перемещает двигатель в это положение.
Метод run должен вызываться постоянно, он запускает шаги. Поэтому я поместил его непосредственно в метод loop ()
.
Следующий прогон должен, надеюсь, переместить двигатель в положение 1000, если вы нажмете кнопку 8, в положение -1000, если вы нажмете кнопку 9, и останавливается, если обе кнопки выключены. У меня нет аппаратного обеспечения, доступного на данный момент, вы это просто слепое программирование. Используйте это как идею.
#include <AccelStepper.h>
AccelStepper stepperX(1, 3, 2);
void setup()
{
pinMode(8, INPUT)
pinMode(9, INPUT);
stepperX.setMaxSpeed(100.0);
stepperX.setAcceleration(3.0);
}
int positivePosition = 1000;
int negativePosition = -1000;
void loop()
{
if ( digitalRead(8) == HIGH )
{
stepperX.moveTo(positivePosition);
}
else if (digitalRead(9) == HIGH)
{
stepperX.moveTo(negativePosition);
}
else
{
stepperX.stop();
}
stepperX.run();
}
- Как правильно использовать микрошаговый драйвер с шаговым двигателем более низкого напряжения
- Как изменить направление шагового двигателя с помощью библиотеки AccelStepper?
- Проблемы с библиотекой AccelStepper/Multistepper
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Управлять двигателем с помощью кнопки
- Шаговый двигатель с концевыми выключателями
- Запустить два степпера одновременно
- Как контролировать скорость шагового двигателя 28BYJ-48 без использования библиотеки?
начните отладку, сократив код до перемещения CW на одну секунду ... остановитесь на одну секунду ... переместитесь на одну секунду ... остановитесь на одну секунду, @jsotola