Я когда начал осваивать Accel, то не задавал вопросов, а ввел запрос на форуме и все темы из списка внимательно прочитал, кстати с этой ветки и начинается список. Разумется прочитал много ваших комментариев, то что вы мне написали я знаю, спасибо, с уважением.
Секретного в скетче нет ничего. Это доработанный скетч из библиотеки.
Я тоже думал, что от перестановки разницы быть не должно, однако ошибался.
Вот не знаю, может то чудачества MotorShield? Хотя при чем тут он...
странно, вроде от перестановки ничего не должно меняться.
Я никогда не пользовался прямой установкой скорости, наверно поэтому и не понял фишки. Всегда пользовался ускорением, то есть всеми преимуществами библиотеки. А так происходит следующее: при вызове run() библиотека пытается расчитать скорость, но если moveTo не задан, то из-за равенства текущей и целевой позиции скорость устанавливается в 0. setSpeed() тоже не проходит, если "ехать никуда не надо" Я бы все-же рекомендовал вынести из цикла moveTo и setSpeed, функция run() должна вызываться максимально часто, пока не дорстигнуьа целевая позиция. Поэтому я их заворачиваю в отдельный цикл. Я его писал выше. В теле цикла обычно ставлю опрос концевых датчиков, аварийной кнопки и т.д.
Мне анализировать код как AlexFisherу не дано. Но я решил проверить скетч. Если откинуть AFMotor и все что с ней связано, потому что у меня нет под рукой второго драйвера и мотор я могу подключитьтолько один, то loop-то Асселевский! Но ЩД по этому коду едет "вдаль" без остановок и moveTo ему не указ!
Нужна помощь - не получается заставить двигатель плавно вращаться на малых оборотах - идёт с вибрацией, явно ощутимы шаги и дребезг... используется ардуино нано nema 17 и драйвер 8825. Нужно, чтобы от самых низких оборотов было плавное вращение. В данном примере 50 об/сек
а что не так? он же может обеспечивать высокую точность позиционирования что такое для него 60 шагов в секунду? мне кажется что на станке при плавном перемещении ничего не вибрирует... (имею в виду простейший диодный лазерный гравёр)
Так я с него и брал. Единственное, я вставил управление оборотами с потенциометра, но для вопроса это не нужно и я их вырезал. В таком варианте так же работает. https://youtu.be/CYsS-hhsHAE видно как бутылка едет от вибрации и плохо, но заметно шаги движения. без камеры очень ощутимо
я думал, может команда какая есть для этого. я китайскую плату от лазера взял и хочу её использовать для демостолика вращающегося, именно поэтому потенциометр на скорость и установка скорости в петле запущена
Тогда это говорит о том, что момент крайне слабый. Думаю, что вполне может дёргать неравномерно под нагрузкой. То, что было на видео - для 1/32 нехарактерно. Я думал, что на 1/2 шагает максимум.
проверил соединив просто с драйвером - так же работает... Ощущение, что где то задержка между циклами шагов и поэтому так работает... непонятно. Ладно, собрал столик, как то крутится и ладно
Мне лень подключать второй ШД, но на одном если написать так:
ШД крутит хорошо.
все таки посмотрите единицы измерения. И попробуйте явное преобразование типов:
ШД крутит хорошо.
runToNewPosition() - блокирующая функция, moveTo() - неблокирующая, с которой нужно применять run() в цикле, например, так:
Я когда начал осваивать Accel, то не задавал вопросов, а ввел запрос на форуме и все темы из списка внимательно прочитал, кстати с этой ветки и начинается список. Разумется прочитал много ваших комментариев, то что вы мне написали я знаю, спасибо, с уважением.
Большое спасибо всем за ответы. Разгадка проблемы оказалась до безобразия простой. Нужно было написать moveTo перед setSpeed.
stepper1.moveTo(steps1);
stepper1.setSpeed(speed1);
Теперь все работает как нужно. Ещё раз спасибо за попытку помочь!
Чудесно! А весь скетч можно посмотреть? Или секрет?
странно, вроде от перестановки ничего не должно меняться.
И я! И я!... Того же мнения.
Секретного в скетче нет ничего. Это доработанный скетч из библиотеки.
Я тоже думал, что от перестановки разницы быть не должно, однако ошибался.
Вот не знаю, может то чудачества MotorShield? Хотя при чем тут он...
#include <AccelStepper.h> #include <AFMotor.h> AF_Stepper motor1(200, 1); AF_Stepper motor2(200, 2); int startPosH = 0; int startPosV = 0; long runtime = 0; float SpeedH = 0; float SpeedV = 0; void forwardstep1() { motor1.onestep(FORWARD, SINGLE); } void backwardstep1() { motor1.onestep(BACKWARD, SINGLE); } // wrappers for the second motor! void forwardstep2() { motor2.onestep(FORWARD, SINGLE); } void backwardstep2() { motor2.onestep(BACKWARD, SINGLE); } AccelStepper stepper1(forwardstep1, backwardstep1); AccelStepper stepper2(forwardstep2, backwardstep2); void setup() { } void loop() { startPosH = 2000; startPosV = 3000; runtime = 60; SpeedH = 0; SpeedV = 0; SpeedH = startPosH / runtime; SpeedV = startPosV / runtime; stepper1.moveTo(startPosH); stepper1.setSpeed(SpeedH); stepper2.moveTo(startPosV); stepper2.setSpeed(SpeedV); stepper1.run(); stepper2.run(); }Я никогда не пользовался прямой установкой скорости, наверно поэтому и не понял фишки. Всегда пользовался ускорением, то есть всеми преимуществами библиотеки. А так происходит следующее: при вызове run() библиотека пытается расчитать скорость, но если moveTo не задан, то из-за равенства текущей и целевой позиции скорость устанавливается в 0. setSpeed() тоже не проходит, если "ехать никуда не надо" Я бы все-же рекомендовал вынести из цикла moveTo и setSpeed, функция run() должна вызываться максимально часто, пока не дорстигнуьа целевая позиция. Поэтому я их заворачиваю в отдельный цикл. Я его писал выше. В теле цикла обычно ставлю опрос концевых датчиков, аварийной кнопки и т.д.
а зачем нужна дополнительная библиотека AFMotor.h? Там какие-то фишки, или она заточена под конкретный шилд?
Мне анализировать код как AlexFisherу не дано. Но я решил проверить скетч. Если откинуть AFMotor и все что с ней связано, потому что у меня нет под рукой второго драйвера и мотор я могу подключитьтолько один, то loop-то Асселевский! Но ЩД по этому коду едет "вдаль" без остановок и moveTo ему не указ!
Здравствуйте!
Нужна помощь - не получается заставить двигатель плавно вращаться на малых оборотах - идёт с вибрацией, явно ощутимы шаги и дребезг... используется ардуино нано nema 17 и драйвер 8825. Нужно, чтобы от самых низких оборотов было плавное вращение. В данном примере 50 об/сек
#include <AccelStepper.h> #define dirPin 5 #define stepPin 2 #define motorInterfaceType 1 AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); void setup() { stepper.setMaxSpeed(2000); } void loop() { stepper.setSpeed(50); stepper.runSpeed(); }http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Нужно, чтобы от самых низких оборотов было плавное вращение.
а что не так? он же может обеспечивать высокую точность позиционирования что такое для него 60 шагов в секунду? мне кажется что на станке при плавном перемещении ничего не вибрирует... (имею в виду простейший диодный лазерный гравёр)
Открываем примеры к AccelStepper, смотрим ConstantSpeed. Чем Ваш исходник отличается от стокового примера?
Так я с него и брал. Единственное, я вставил управление оборотами с потенциометра, но для вопроса это не нужно и я их вырезал. В таком варианте так же работает. https://youtu.be/CYsS-hhsHAE видно как бутылка едет от вибрации и плохо, но заметно шаги движения. без камеры очень ощутимо
Стоковый пример работал нормально?
нет так же
Значит микрошаг надо увеличивать.
я думал, может команда какая есть для этого. я китайскую плату от лазера взял и хочу её использовать для демостолика вращающегося, именно поэтому потенциометр на скорость и установка скорости в петле запущена
внешне выглядит, как будто серию шагов делает, а потом щелчок и ещё серию...
в принципе под нагрузкой не так трясётся
Ну, черт его знает. Плавность - это субъективная оценка. Зависит от многого.
На большом микрошаге двигатель с градусом 7.5 не очень себя хорошо вёл. На определённых скоростях движок может "войти в резонанс", их надо проскочить.
http://arduino.ru/forum/programmirovanie/peremeshchenie-karetki-na-stanke-shagovym-dvigatelem-proshu-konsultatsii - первый скетч.
В 11-й строке ставите 3мкс, а 13-й скорость регулируете. + Экспериментируете с микрошагом.
спасибо, попробую/ а микрошагом где экспериментировать? на плате все 3 ноги спаяны и на +5 сидят, если я правильно понял о чём речь
Откуда же мне знать, что за плата? Я не телепат.
+ Экспериментируете с микрошагом - можно было проще послать я тоже не телепат :))
я спросил - где это меняется в скетче или перемычками... если перемычками, то у меня запаяно, если софтверно, то подскажите где
DRV8825 только перемычками.
ясно, тогда на 32 стоит, по - максимуму
Тогда это говорит о том, что момент крайне слабый. Думаю, что вполне может дёргать неравномерно под нагрузкой. То, что было на видео - для 1/32 нехарактерно. Я думал, что на 1/2 шагает максимум.
На голом драйвере экспериментируйте.
проверил соединив просто с драйвером - так же работает... Ощущение, что где то задержка между циклами шагов и поэтому так работает... непонятно. Ладно, собрал столик, как то крутится и ладно