Страница 4 из 16

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

Добавлено: 04.12.2019{, 22:24}
AlexCrane
Бок управления шаговым двигателем на библиотеке AccelStepper

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

Работает на библиотеке 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 КБ) 738 скачиваний
- здесь блоки старые оставил просто как пример (новые внизу)
------------------------------------------------
ТЕСТ ШД v6.flp
(225.63 КБ) 678 скачиваний
- здесь блоки старые оставил просто как пример (новые внизу)
------------------------------------------------
Обновил 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 КБ) 1072 скачивания

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

Добавлено: 07.04.2020{, 19:43}
AlexCrane
Sanbi4, Хорошо, сделаю

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

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

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

Добавлено: 18.04.2020{, 08:39}
AlexCrane
Sanbi4, Scrabler, Испытайте, блоков кидайте на сколько пинов хватит :smile171:
ШД1_ESP_v1.3_(CODE).ubi
(128.91 КБ) 119 скачиваний

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

Добавлено: 18.04.2020{, 14:04}
Scrabler
Спасибо. Пока не работает перемещение на заданное количество шагов после поиска концевика. Разбираюсь.. Есть вопрос - должен ли появляться сигнал Ready01 после того как непрерывное вращение нашло концевик? или этот сигнал только выставляется после отработки движения двигателя на заданное количество шагов?

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

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

Добавлено: 18.04.2020{, 16:40}
AlexCrane
Scrabler, А если так
ШД1_ESP_v1.5_(CODE).ubi
(128.96 КБ) 114 скачиваний

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

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

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

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

Scrabler, спасибо за тестирование, проверю сам и исправлю...

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

Добавлено: 18.04.2020{, 19:06}
Scrabler
Хорошо спасибо потестирую

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

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

Добавлено: 27.04.2020{, 11:03}
Sanbi4
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, все, что нужно - он умеет. все остальное приделывается другими блоками и логикой работы! этот блок не должен думать за другую логику, он нужен только для того, чтобы правильно управлять мотором, и не нужно прикручивать лишнее к нему, лишнее, что можно реализовать на других блоках!!!! иначе, можно сломать изначальную задумку!

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

Добавлено: 27.04.2020{, 22:05}
Scrabler
Понятно. Спасибо. Буду пробовать

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

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

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

Добавлено: 29.04.2020{, 10:19}
AlexCrane
ingener, Что мешает попробовать?

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

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

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

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

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

Добавлено: 05.05.2020{, 20:15}
XENOMAN
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();

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

Добавлено: 05.05.2020{, 20:41}
AlexCrane
noahi1977, Попробуйте ESP32, думаю его возможностей хватит

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

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

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

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

Добавлено: 06.05.2020{, 20:56}
ingener
попробуйте на контроллер установить только один блок ШД и более ничего, может, тогда реальная частота повысится.

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

Добавлено: 19.05.2020{, 23:10}
Davit07
Доброго времени суток .
До какой скорости можно разогнать ШД с помощью данного блока ?

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

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

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

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


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