Идти в определенную позицию с постоянной скоростью, используя 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 и т. Д.

Другие вопросы по тегам