Шаговый двигатель на AccelStepper

Шаговый двигатель на AccelStepper

Пользовательские блоки для управления шаговыми двигателями и сервоприводами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Шаговый двигатель на AccelStepper

#1

Сообщение AlexCrane » 04.12.2019{, 22:24}

Бок управления шаговым двигателем на библиотеке AccelStepper

Наименование блока: ШагДвиг_mod (step/dir) INT_v2
ШД.png
ШД.png (4.42 КБ) 41183 просмотра

Работает на библиотеке AccelStepper.h и TimerOne.h (Не будет работать ШИМ на выходах завязанных на первое прерывание)
http://www.airspayce.com/mikem/arduino/ ... index.html

Параметры пользователя:
period - Период прерывания, мкс, Менять Оторожно
Step - Пин управления шагами контроллера
Dir - Пин направления вращения контроллера

Входы:
Continuous - При true постоянно шагаем, имеет больший приоритет перед EnSteps
SpeedContinuous - Скорость ШД для "постоянно шагаем"
Эти два входа можно использовать для поиска концевика и просто чтобы покрутить двигателем, но без ускорений

SetZeroPosition - Установка начальной позиции в 0. Использовать через RTrig

EnSteps - при переднем фронте начинаем шагать. Использовать через RTrig
MaxSpeed - Максимальная скорость шаг/сек
Acceleration - Ускорение шаг/сек2
Steps - Количество шагов для выполнения (hint: можно и отрицательные)
CCW - true крутить против часовой, иначе по

AbsSteps - Если true то шагаем по абсолютным координатам от нулевой позиции, иначе идем относительно последней позиции

StopAccel - Остановка с использованием текущей скорости и ускорения

Выходы:
Ready - true двигатель закончил движение
Position - Текущая позиция двигателя
-

-
Небольшой пример:
------------------------------------------------
Тест ШД 04 test.flp
(752.64 КБ) 737 скачиваний
- здесь блоки старые оставил просто как пример (новые внизу)
------------------------------------------------
ТЕСТ ШД v6.flp
(225.63 КБ) 677 скачиваний
- здесь блоки старые оставил просто как пример (новые внизу)
------------------------------------------------
Обновил 15.12.2019. Не включалось повторно бесконечное вращение
Обновил 14.01.2020. После остановки "бесконечного вращения" продолжал медленно шагать
Обновил 29.01.2020 до версии 1.2. Пофиксил обнаруженные баги.
Обновил 06.04.2020 до версии 1.3. Некорректно работал вход CCW
Обновил 12.11.2020 Добавил блоки для DUE и для драйверов на базе ULN2003, L298N и пр.

Примеры предоставленные участниками форума:
viewtopic.php?t=5919#p80991

Библиотеки
Accel_libraries.zip
(118.27 КБ) 1069 скачиваний
Вложения
ШД AlexCrane v1.3.ubl
(780.74 КБ) 1026 скачиваний
Последний раз редактировалось AlexCrane 12.11.2020{, 18:48}, всего редактировалось 9 раз.
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Шаговый двигатель на AccelStepper

#61

Сообщение AlexCrane » 07.04.2020{, 19:43}

Sanbi4, Хорошо, сделаю
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Scrabler
Рядовой
Сообщения: 9
Зарегистрирован: 20.07.2019{, 18:16}
Репутация: 0
Имя: Михаил

Шаговый двигатель на AccelStepper

#62

Сообщение Scrabler » 15.04.2020{, 19:29}

Уважаемый автор модуля для ESP. Погонял ваш модуль и выяснилось следующее - поиск концевика работает изумительно, но есть проблемы с EnStep... Что бы двигатель отработал заданное количество шагов нужно на EnStep подать не передний фронт импульса а испульс длиной больше времени исполнения этого количества шагов... Как это можно исправить? Заранее благодарю

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Шаговый двигатель на AccelStepper

#63

Сообщение AlexCrane » 18.04.2020{, 08:39}

Sanbi4, Scrabler, Испытайте, блоков кидайте на сколько пинов хватит :smile171:
ШД1_ESP_v1.3_(CODE).ubi
(128.91 КБ) 119 скачиваний
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Scrabler
Рядовой
Сообщения: 9
Зарегистрирован: 20.07.2019{, 18:16}
Репутация: 0
Имя: Михаил

Шаговый двигатель на AccelStepper

#64

Сообщение Scrabler » 18.04.2020{, 14:04}

Спасибо. Пока не работает перемещение на заданное количество шагов после поиска концевика. Разбираюсь.. Есть вопрос - должен ли появляться сигнал Ready01 после того как непрерывное вращение нашло концевик? или этот сигнал только выставляется после отработки движения двигателя на заданное количество шагов?

Отправлено спустя 25 минут 36 секунд:
Да и еще проблема в следующем... Двигатель у меня не быстрый - 400 шагов на оборот. И при подаче через Rtrigger сигнала на движение - он начинает шагать, но не отрабатывает их все... Не знаю с чем это связано... Пробовал меня скорость и ускорение но не помогло.

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Шаговый двигатель на AccelStepper

#65

Сообщение AlexCrane » 18.04.2020{, 16:40}

Scrabler, А если так
ШД1_ESP_v1.5_(CODE).ubi
(128.96 КБ) 114 скачиваний
Последний раз редактировалось AlexCrane 18.04.2020{, 18:52}, всего редактировалось 1 раз.

Scrabler
Рядовой
Сообщения: 9
Зарегистрирован: 20.07.2019{, 18:16}
Репутация: 0
Имя: Михаил

Шаговый двигатель на AccelStepper

#66

Сообщение Scrabler » 18.04.2020{, 18:24}

нет что-то стало все виснуть... Предыдущая версия в принципе рабочая. Только можно в нее добавить выставление флага Ready01 в 1 при условии нахождения концевика. А так все хорошо. шаги не все выполнялись по причине кривизны моего драйвера - на нем нельзя выставить полный шаг как оказалось... Извиняюсь за то что вснес смуту.. Спасибо вам за ваш труд))

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Шаговый двигатель на AccelStepper

#67

Сообщение AlexCrane » 18.04.2020{, 18:53}

Scrabler, Попробуй viewtopic.php?f=75&t=5919&p=88430#p88430
Жаль проверить не на чем :(

Scrabler, спасибо за тестирование, проверю сам и исправлю...
Последний раз редактировалось AlexCrane 18.04.2020{, 22:17}, всего редактировалось 1 раз.
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Scrabler
Рядовой
Сообщения: 9
Зарегистрирован: 20.07.2019{, 18:16}
Репутация: 0
Имя: Михаил

Шаговый двигатель на AccelStepper

#68

Сообщение Scrabler » 18.04.2020{, 19:06}

Хорошо спасибо потестирую

Отправлено спустя 1 час 13 минут 25 секунд:
В общем описываю ситуацию как работает последняя версия... Все собрано на макетке только двайвер, мотор и кнопки - одна на continues, одна на Enstep и одна на StopAccel и висит светодиод на Ready. В Flprog имеем Enstep через Rtrig и триггер заведен Ready на Zeroposition. Имеем в итоге при старте программа реагирует только на сигнал Continues и при его прерывании не останавливается двигатель. Не останавливается он и при последующей подаче сигнала на StopAccel. Через долгое нажатие на Enstep все-таки двигатель останавливается, но шаги выполняет не все... Да сигнал Ready висит все время в 1 с начала вращений, а не появляется как должно быть после отработки перемещения

Sanbi4
Рядовой
Сообщения: 76
Зарегистрирован: 30.10.2019{, 17:58}
Репутация: 3
Имя: Сергей

Шаговый двигатель на AccelStepper

#69

Сообщение Sanbi4 » 27.04.2020{, 11:03}

Scrabler писал(а):
18.04.2020{, 18:24}
Только можно в нее добавить выставление флага Ready01 в 1 при условии нахождения концевика
а зачем? чем вас не устраивает использование сигнала с самого концевика? Ready нужен для того, чтобы говорить о том, что мотор отработал заданное количество шагов.

Zeroposition должен брать сигнал с концевика, а не с Ready. отчет шагов как раз начинается с этой точки. на Ensteps - прикручивайте симметричный генератор длит импульса 1мкс. и на ABS - ставите 1. тогда у вас мотор будет отрабатывать то количество шагов, которое подадите на степс от концевика.

у меня так сделано: через континиус - ищем концевик. доехали до концевика - остановили мотор, задали нулевую точку (zeroposition), далее открутили мотор в рабочее положение, далее работаем по координатам.( по количеству шагов) - в таком случае мы отчитываем количество шагов от нуля. то есть если рабочее от нуля(концевика) 500 шагов, то при шагании нужно учитывать шаги от концевика!!! это правильнее, чем отчитывать от рабочего положения (РП) в 500 шагов от концевика, принимая это за ноль. В моем предложении можно реализовать минимальное и максимальное количество шагов, за которые мотор не шагнет (блок лимита в помощь). допустим, нам надо отъехать на 200 шагов от РП, то нам нужно сделать 300 шагов от нуля, и собственно это значение и подаем на вход шагов. блок сам определит в какую сторону двинуть, так как сейчас 500 шагов, а надо 200 шагов назад от РП, то мотор отмотает 200 шагов назад и блок будет считать,что мотор сделал 300 шагов, и собственно, 300 шагов и надо подавать на вход steps


По мне, это самый правильный блок для шаговиков на step/dir, все, что нужно - он умеет. все остальное приделывается другими блоками и логикой работы! этот блок не должен думать за другую логику, он нужен только для того, чтобы правильно управлять мотором, и не нужно прикручивать лишнее к нему, лишнее, что можно реализовать на других блоках!!!! иначе, можно сломать изначальную задумку!

Scrabler
Рядовой
Сообщения: 9
Зарегистрирован: 20.07.2019{, 18:16}
Репутация: 0
Имя: Михаил

Шаговый двигатель на AccelStepper

#70

Сообщение Scrabler » 27.04.2020{, 22:05}

Понятно. Спасибо. Буду пробовать

Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

Шаговый двигатель на AccelStepper

#71

Сообщение ingener » 28.04.2020{, 20:05}

AlexCrane писал(а):
06.04.2020{, 17:23}
Обновил блоки до версии 1.3 скачать здесь в самом низу
Написано, что некорректно работал вход выбора направления (CCW). Столкнулся с этой проблемой в одном проекте, где есть необходимость с высокой частотой менять направление вращения мотора. И действительно была некорректная работа, пришлось отдельно делать выход с контроллера мимо блока.
Т.е. теперь такое исключено?

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Шаговый двигатель на AccelStepper

#72

Сообщение AlexCrane » 29.04.2020{, 10:19}

ingener, Что мешает попробовать?
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

noahi1977
Рядовой
Сообщения: 8
Зарегистрирован: 03.05.2020{, 19:50}
Репутация: 0
Имя: Эдуард

Шаговый двигатель на AccelStepper

#73

Сообщение noahi1977 » 05.05.2020{, 17:08}

AlexCrane,
Попробовал Ваши блоки.
Спасибо Вам большое за них.
Подскажите пожалуйста. Возможно ли добавить
скорости работы .
Max speed 80000
Ускорение 40000.
У меня сервоприводы моторы с большой редукцией.

Блоки рассматриваю на меге.нано.

Отправлено спустя 50 секунд:
Это мои настройки.Но не хватает немного

XENOMAN
Рядовой
Сообщения: 49
Зарегистрирован: 05.10.2015{, 18:03}
Репутация: 6

Шаговый двигатель на AccelStepper

#74

Сообщение XENOMAN » 05.05.2020{, 20:15}

noahi1977, 80000 шагов в секунду - недостижимая скорость. Даже для DUE 40000 - потолок.
Пруф
Performance
The fastest motor speed that can be reliably supported is about 4000 steps per second at a clock frequency of 16 MHz on Arduino such as Uno etc. Faster processors can support faster stepping speeds. However, any speed less than that down to very slow speeds (much less than one per second) are also supported, provided the run() function is called frequently enough to step the motor whenever required for the speed set. Calling setAcceleration() is expensive, since it requires a square root to be calculated.
Gregor Christandl reports that with an Arduino Due and a simple test program, he measured 43163 steps per second using runSpeed(), and 16214 steps per second using run();

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Шаговый двигатель на AccelStepper

#75

Сообщение AlexCrane » 05.05.2020{, 20:41}

noahi1977, Попробуйте ESP32, думаю его возможностей хватит
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

noahi1977
Рядовой
Сообщения: 8
Зарегистрирован: 03.05.2020{, 19:50}
Репутация: 0
Имя: Эдуард

Шаговый двигатель на AccelStepper

#76

Сообщение noahi1977 » 05.05.2020{, 23:40}

Не успел написать..
Пишу сейчас.
Скорость снизил до 10000.Пока подгонял настройки с ускорением обратил внимание,что после 10000 реакции на увеличение скорости нет.
Дело в том,что при ручном управлении(continuous)скорость очень приличная.Но в авто режиме она маловата для меня.Я так понимаю,это связано с тем,контроллер не успевает считать?

Ещё не могу понять ,как работает stopAsel.Как не пытался понять ,реакции нет.
Так же обратил внимание.
Если не стоит чисел в скорости и ускорении то обычное перемещение continuous не активируется.
Идет какой то такт на период в 1секунду

Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

Шаговый двигатель на AccelStepper

#77

Сообщение ingener » 06.05.2020{, 20:56}

попробуйте на контроллер установить только один блок ШД и более ничего, может, тогда реальная частота повысится.

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Шаговый двигатель на AccelStepper

#78

Сообщение Davit07 » 19.05.2020{, 23:10}

Доброго времени суток .
До какой скорости можно разогнать ШД с помощью данного блока ?

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Шаговый двигатель на AccelStepper

#79

Сообщение Ingwar » 20.05.2020{, 00:17}

Davit07 писал(а):
19.05.2020{, 23:10}
До какой скорости можно разогнать ШД с помощью данного блока ?
Мало вводных или вопрос не корректен.
Контроллер/делитель/напряжение/драйвер ну и двигатели разные бывают...
Разгонял типовой nema17 ардуиной до 2000+ об/мин в качестве эксперимента (но не этим блоком).
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Davit07
Сержант
Сообщения: 119
Зарегистрирован: 05.01.2020{, 03:39}
Репутация: 5
Имя: Давит

Шаговый двигатель на AccelStepper

#80

Сообщение Davit07 » 20.05.2020{, 00:54}

Ingwar писал(а):
20.05.2020{, 00:17}
Davit07 писал(а):
19.05.2020{, 23:10}
До какой скорости можно разогнать ШД с помощью данного блока ?
Мало вводных или вопрос не корректен.
Контроллер/делитель/напряжение/драйвер ну и двигатели разные бывают...
Разгонял типовой nema17 ардуиной до 2000+ об/мин в качестве эксперимента (но не этим блоком).
Каким блоком можно разогнать ?
К примру : Mega , Драйвер DM542, Питание 24в, ШД Nema 23(23hd10002y-20p). Из того что есть в наличии.
Разгонял Mach3 до 2200 об\мин. Но хотелось бы в Flprog создать программу управления ШД.
К примру сделать, что-то такое :


Благодарю за ответ

Ответить

Вернуться в «Управление шаговыми двигателями и сервоприводами»