Шаговый двигатель не изменяет направления движения!
Я управляю биполярным шаговым двигателем с драйвером 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