Попытка понять постоянную скорость AccelStepper
Я начинаю изучать библиотеку AccelStepper для управления шаговыми двигателями для проекта, над которым я работаю. Я могу заставить шаговые двигатели работать с основными примерами, которые используют ускорение.
Я знаю, что для частей или всего проекта я хочу использовать постоянную скорость, поэтому я открыл демо с постоянной скоростью: https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library/blob/master/examples/Accel_ConstantSpeed/Accel_ConstantSpeed.ino
#include <Wire.h>
#include <AccelStepper.h>
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *myStepper1 = AFMS.getStepper(200, 2);
void forwardstep1() {
myStepper1->onestep(FORWARD, SINGLE);
}
void backwardstep1() {
myStepper1->onestep(BACKWARD, SINGLE);
}
AccelStepper Astepper1(forwardstep1, backwardstep1);
void setup()
{
Serial.begin(9600);
Serial.println("Stepper test!");
AFMS.begin(); // create with the default frequency 1.6KHz
Astepper1.setSpeed(50);
}
void loop()
{
Astepper1.runSpeed();
}
(Я использую крыло шагового двигателя adafruit)
Я загрузил его в свой arduino, и он работает, вал вращается, но он делает это очень медленно. Я решил, что это имеет смысл, потому что он установлен на скорости 50, поэтому я попытался увеличить скорость:
Astepper1.setSpeed(200);
Но скорость, кажется, все та же. Учитывая, что это 200-шаговый двигатель, а setSpeed
-шаги в секунду, вы думаете, что это будет довольно быстро.
Я уверен, что это связано с моим непониманием того, как работает библиотека, но мне трудно понять, как правильно использовать методы постоянной скорости.
@Chris Schmitz, 👍1
Обсуждение1 ответ
Поэтому я закончил погружением в исходный код библиотеки AccelStepper, чтобы выяснить, в чем проблема, и оказалось, что в их примере кода отсутствовал вызов метода, в частности вызов setMaxSpeed
в функции настройки:
void setup()
{
Serial.begin(9600); // настройка последовательной библиотеки со скоростью 9600 бит / с
Serial.println("Stepper test!");
AFMS.begin(); // create with the default frequency 1.6KHz
// ! Обратите внимание, что вам необходимо установить максимальную скорость, иначе шаговый двигатель будет
// ! делать шаг только один раз за интервал, независимо от того, какое значение "setSpeed" вы даете
Astepper1.setMaxSpeed(1000);
Astepper1.moveTo(targetDistance);
Astepper1.setSpeed(targetSpeed);
}
Если вы посмотрите на
метод setSpeed в библиотеке, вы заметите ограничение на значение скорости:
Метод constrain
принимает значение скорости, а затем низкое и высокое, которые библиотека accelstepper устанавливает в переменную private _maxSpeed. Если скорость находится за пределами этого диапазона, она установит значение, равное низкому или высокому переданному значению.
Это означает, что если вы не вызовете setMaxSpeed
, библиотека будет использовать значение _maxSpeed по умолчанию, назначенное во время построения, которое соответствует стандарту isss
1.0
:
Таким образом, чтобы правильно использовать методы постоянной скорости, вам необходимо обязательно включить вызов setMaxSpeed
в свой код перед вызовом setSpeed
, вероятно, в функции настройки
.
Я также снял видео-объяснение, чтобы поделиться им со своими коллегами. Вы можете увидеть это здесь: https://vimeo.com/438272826
- Шаговые двигатели Adafruit Motor Shield не вращаются.
- Как я могу использовать степпер для определенной степени?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Почему Adafruit motor shield не крутит моторы?
- Шаговый двигатель не поворачивается/не поворачивается против часовой стрелки
- Какие компоненты мне нужны маленького GPS-трекера
- Шаговый двигатель с концевыми выключателями
пожалуйста, поставьте пробел перед " https://` в URL-адресе ... без него ссылка не кликабельна, @jsotola
попробуйте другие примеры скетчей, @jsotola
Эй, @jsotola, я исправил ссылку. спасибо за этот улов. Кроме того, я попробовал другие демо-скетчи. Демо-версии на основе ускорения работают и даже StackingTest.ino, которая не использует постоянную скорость напрямую, но делает индивидуальный шаг без ускорения, и это работает, но я все еще не могу понять, почему сами методы постоянной скорости не работают так, как ожидалось., @Chris Schmitz
Я только что понял, что тест укладки не использует библиотеку accelstepper, так что да, все еще в недоумении :(, @Chris Schmitz
@jsotola, я уже все понял. См.Мой ответ ниже., @Chris Schmitz