Идти в определенную позицию с постоянной скоростью, используя accelStepper в Arduino
Я пытался сделать простой двухосевой станок с ЧПУ. Я только на начальной стадии, я просто хотел проверить библиотеку accelStepper. С помощью констант константы Speed и Bounce я получил некоторую идею и написал следующий код.
#include <AccelStepper.h>
AccelStepper stepperX(4, 4, 5, 6, 7);
AccelStepper stepperY(4, 8, 9, 10, 11);
unsigned int X = 800;
unsigned int Y = 600;
void setup(){
stepperX.setMaxSpeed(200);
stepperX.setSpeed(10);
stepperY.setMaxSpeed(200);
stepperY.setSpeed(10);
stepperX.move(200);
stepperY.move(200);
}
void loop(){
stepperX.runSpeed();
stepperY.runSpeed();
}
Когда я загружаю этот эскиз, мотор не работает. Но когда я меняю runSpeed () на run() и добавляю setAcceleration(), мотор работает, но с ускорением. Я не хочу ускорения. Итак, есть ли способ сделать это без ускорения.
1 ответ
Из документов (единственная разница между move
а также moveTo
является то, что первый делает относительный ход):
void AccelStepper:: moveTo (длинный абсолютный)
Установите целевую позицию. Функция run () попытается переместить двигатель (не более одного шага за вызов) из текущей позиции в целевую позицию, установленную самым последним вызовом этой функции. Внимание: moveTo() также пересчитывает скорость для следующего шага. Если вы пытаетесь использовать движения с постоянной скоростью, вы должны вызвать setSpeed () после вызова moveTo().
Ключевая строка (как на круговой диаграмме): если вы пытаетесь использовать движения с постоянной скоростью, вы должны вызвать setSpeed () после вызова moveTo().
Но, побывав там (создавая XY-плоттер, 2-осевой ЧПУ), вы избавите себя от горя и просто используйте grbl. Он обрабатывает все скоординированное управление осями, анализ gcode и т. Д.