Шаговый двигатель на 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 КБ) 41160 просмотров

Работает на библиотеке 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 КБ) 1068 скачиваний
Вложения
ШД AlexCrane v1.3.ubl
(780.74 КБ) 1026 скачиваний
Последний раз редактировалось AlexCrane 12.11.2020{, 18:48}, всего редактировалось 9 раз.
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

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

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

#81

Сообщение Ingwar » 20.05.2020{, 19:36}

Davit07 писал(а):
20.05.2020{, 00:54}
Каким блоком можно разогнать ?
Я пока не пробовал блок AlexCrane - нет необходимости.
Основные проблемы, с которыми можно столкнутся - непостоянство частоты сигналов (в следствии изменения времени выполнения программы в цикле) и "шаг" прироста частоты.
Но у Вас есть все, для того чтобы просто проверить самому. Хотя замечу, что 24 вольта мало для высоких скоростей. И не стоить забывать, что момент на валу падает с увеличением скорости (вдруг это критично).
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

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

#82

Сообщение Davit07 » 20.05.2020{, 21:46}

Ingwar писал(а):
20.05.2020{, 19:36}
Davit07 писал(а):
20.05.2020{, 00:54}
Каким блоком можно разогнать ?
Я пока не пробовал блок AlexCrane - нет необходимости.
Основные проблемы, с которыми можно столкнутся - непостоянство частоты сигналов (в следствии изменения времени выполнения программы в цикле) и "шаг" прироста частоты.
Но у Вас есть все, для того чтобы просто проверить самому. Хотя замечу, что 24 вольта мало для высоких скоростей. И не стоить забывать, что момент на валу падает с увеличением скорости (вдруг это критично).
Доброго времени суток .
На данном блоке собрал несколько проектов . Конечно же после консультации с автором блока и с его помощью .
Разогнать получилось максимально до 700 об/мин, а после дробление шага 1/16 скорость меньше . После увеличение скорости блок подклинивает и не реагирует на кнопки. Включается и крутит ШД пока не отключить питание .
Может ,что то не правльно делаю .
Вот и решил узнать у Вас . Может ли данный блок разогнаться до 1500-2000об/мин , если нет , то какой другой ?
Всем спасибо за ответ

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

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

#83

Сообщение Ingwar » 21.05.2020{, 00:26}

Davit07 писал(а):
20.05.2020{, 21:46}
Может ,что то не правльно делаю .
Шаговый привод с одной стороны прост в управлении, а с другой - очень требователен к стабильности. Его можно сравнить с синхронным двигателем, где скорость вращения ротора синхронна со скоростью "вращения" магнитного поля статора. Если поле статора сразу начать "вращать" быстро, то ротор в силу инертности не сможет этого сделать. Он стронется, его южные (для примера) полюса "потянутся" к "убегающим" северным полюсам статора, но поздно... уже подоспели южные статорные, которые его "отталкивают", а потом история повторяется. Так и стоит ротор на месте конвульсивно дергаясь...
Вот и с шаговым похожая история. Если он крутился довольно быстро, то пропуски step или даже кратковременное изменение в + или - частоты step с большим приращением, вызовет его остановку. И стартануть заного он сможет только с низкой частоты...
Такое может происходить если программа в микроконтроллере содержит блоки, имеющие больший приоритет на выполнение, чем блок шагового двигателя. А так же в случае, когда дискретность увеличения частоты низкая. Например (чисто в качестве примера) время периода можно уменьшать дискретно на 10мсек. Для понимания как это отражается на приращении табличка ниже
СпойлерПоказать
Безымянный.png
Безымянный.png (8.6 КБ) 2509 просмотров
Из нее видно, как на высоких скоростях увеличение на один "шаг" пытается заставить быстрее крутиться ротор, который в силу инерции этого сделать не сможет.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

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

#84

Сообщение Davit07 » 21.05.2020{, 03:07}

Ingwar,
Благодарю за развернутый ответ.
Не такое полное , но уже приблизительно понимание имею ,что Вы имеете в виду.
Если я не ошибаюсь , что ардуино не может обеспечить равномерное подачу сигнала , длину сигнала и равномерное уменьшение расстояние меж сигналом для ускорение ?

Тут недавно пытался научиться создаю блока по управлению ШД , что к сожелению прошло без результата. Но с помощью aidar_i, получилось закрутить ШД до 1020 об/ми с дроблением шага 1/16, (замер производил механическим тахометром времён СССР). Использовал : Nema17 ,12v , драйвер SDM-1,5.
Вот и подумал , может быстрее получиться.
Ссылка на мой горе эксперимент . Без помощи aidar_i, наверно бы не чего не получилось )
viewtopic.php?p=89591#p89591
Благодарю за проявленный интерес к вопросу.

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

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

#85

Сообщение Ingwar » 21.05.2020{, 08:06}

Davit07 писал(а):
21.05.2020{, 03:07}
Если я не ошибаюсь , что ардуино не может обеспечить равномерное подачу сигнала
Почему же, вполне себе может. Например при использовании функции micros(), шаг изменения может быть в 4 мксек. Другое дело если у Вас в программе есть блоки, использующие аппаратные прерывания (например энкодер). Во время обработки прерывания счет прекращается со всеми вытекающими. Так же критично время выполнения всей программы в цикле. В идеале бы разделить управление на 2 микроконтроллера. Один содержит функции управления, другой формирует сигналы step dir en. Или использовать более быстрые микроконтроллеры (duo, esp32, stm).
А вообще, правильно могут ответить только "шарящие" в программировании, к коим себя я не причисляю... :smile44:

Отправлено спустя 3 минуты 36 секунд:
Да, напоминаю, 24 вольта мало для Ваших хотелок. Минимум 36, а лучше больше. От этого зависит время перемагничивания и соответственно частота вращения. И чем выше индуктивность обмоток, тем большее нужно напряжение.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

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

#86

Сообщение Davit07 » 21.05.2020{, 12:35}

Ingwar, благодарю за ответ.
Буду пробовать. По результату обязательно отпишусь .

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

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

#87

Сообщение dizzyy » 21.05.2020{, 14:09}

Davit07 писал(а):
21.05.2020{, 03:07}
ШД до 1020 об/ми с дроблением шага 1/16,
а зачем 1/16 ??? из практики больше 1/4 не ставил даже на станке.. точности оно не дает , а только больше греется шаговик и драйвер .. дробление только для плавности чтоб уйти от резонанса

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

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

#88

Сообщение Ingwar » 21.05.2020{, 16:11}

dizzyy писал(а):
21.05.2020{, 14:09}
точности оно не дает
Да, почти так. На ШВП с шагом 5мм точность без дробления на стандартныом двигателем с 1,8 градусом поворота будет +-0,025 мм. Но шуму... Хорошо если драйвера leadshine или лучше, а если это в квартире...
А если работа на ремень, то при диаметре колеса 8мм один шаг это уже 0,2513мм, а если диаметр больше..., вот тут без дробления никак. Дома на принтер поставил контроллер с tmc2209 1/32 и STM на борту. Теперь бесит шум вентиляторов... :smile113:
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

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

#89

Сообщение Davit07 » 21.05.2020{, 18:59}

Парни , скажу из личного опыта. Дробление шага даёт больше точности в работе ШД .
Ingwar, снизьте ток , проэкперементируйте на каком токе ему трудно перемещать ось и по таблице добавьте одно или два деления. Тем самым ШД не будет работать на пике и греться не будет. В принципе у ШД рабочая температура 70 градусов если я не ошибаюсь .
По крайней мере мои перестали греться на фрезере.

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

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

#90

Сообщение Ingwar » 21.05.2020{, 19:32}

Davit07 писал(а):
21.05.2020{, 18:59}
Ingwar, снизьте ток
У меня ничего не греется) Вентиляторы хотэнда и обдува детали "шумят".
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
ElectronicRTC
Рядовой
Сообщения: 49
Зарегистрирован: 09.07.2019{, 06:13}
Репутация: 1
Откуда: Москва
Имя: Евгений

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

#91

Сообщение ElectronicRTC » 22.05.2020{, 08:02}

Вопрос по теме, но возможно не в тему. Хотя может кому то поможет.
Почему не используете готовое решение типа https://aliexpress.ru/item/32737927184. ... hweb201603_
С помощью готового решения можно очень неплохо управлять из ФЛПРОГ, реализовывая логику работы, а работу с шаговым пусть делает модуль.
Цена 400 руб для такого это можно сказать не цена.
Промышленная электроника и оборудование

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

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

#92

Сообщение AlexCrane » 22.05.2020{, 12:51}

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

Аватара пользователя
ElectronicRTC
Рядовой
Сообщения: 49
Зарегистрирован: 09.07.2019{, 06:13}
Репутация: 1
Откуда: Москва
Имя: Евгений

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

#93

Сообщение ElectronicRTC » 22.05.2020{, 13:03}

AlexCrane, извиняйте если что не так - неужели сгенерить 1 канал 500кГц на ардуино так сложно ? Или нужны мегагерцы для шагового двигателя ?
Промышленная электроника и оборудование

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

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

#94

Сообщение AlexCrane » 22.05.2020{, 20:44}

ElectronicRTC, Вот тут Sancho подробно описал про частоты.
viewtopic.php?t=3064#p39396
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#95

Сообщение Sancho » 23.05.2020{, 10:23}

ElectronicRTC писал(а):
22.05.2020{, 13:03}
неужели сгенерить 1 канал 500кГц на ардуино так сложно ?
Разберём вопрос.
500кГц - 2мкс. 1мкс - полпериода, частота переключения выхода.
1 такт контролера 16мГц - 62,5нс.
Используя аппаратный таймер с тактированием без предделителя, можем попробовать, но
есть время, в течении которого при прерывании будет происходить отправка текущей позиции программы в стёк,
выполнение прерывания, управление выходом, перенастройка таймера, возвращение в работу основной программы из стёка.
за один полупериод, 1 мкс, это 1000/62,5 = 16 тиков проги - если всё и успеем, что останется основному циклу программы?
Как-то так, возможно заблуждаюсь.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

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

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

#96

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

Всем привет.
Подскажите пожалуйста. Пробовал загрузить данный блок на плату ESP 8266 v3, выдает ошибку с библиотекой . Загружаю с этого же компа , блок прекрасно работает с платами UNO,MEGA.
Парин, подскажите , что я делаю не так?
Благодарю за помощь
Вложения
Аннотация 2020-05-26 234454.png

Аватара пользователя
ElectronicRTC
Рядовой
Сообщения: 49
Зарегистрирован: 09.07.2019{, 06:13}
Репутация: 1
Откуда: Москва
Имя: Евгений

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

#97

Сообщение ElectronicRTC » 27.05.2020{, 04:17}

По частотам\скорости пусть так. Скажем 100кГц это предел, с учетом что сама программа должна работать.
Вопрос - насколько часто в шаговых используют частоты выше 100кГц ? Кто реально сталкивался в работе и для чего это нужно? Если ускоренное перемещение то неужели надо под 500 кгц ? торопимся ?
И сразу же предложение: а не попробовать ли использовать готовый генератор с управлением по SPI (I2C не нашел) ?
Например готовый модуль есть: https://aliexpress.ru/item/32867090501. ... b4cfefe0-1
Осталось обратиться к мастерам за помощью. Sancho, сможете в случае необходимости подружить модуль в ФЛПРОГ ? Есть готовые работы, типа https://tsibrov.blogspot.com/2018/06/ad9833.html

Отправлено спустя 4 минуты 6 секунд:
И было бы хорошо с программным SPI (настраиваемые пины т.к.аппаратный у многих бывает занят)
Промышленная электроника и оборудование

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

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

#98

Сообщение AlexCrane » 27.05.2020{, 07:14}

Davit07, Для ESP8266 нужно этот блок использовать viewtopic.php?t=5919&start=60#p88404 (без главного)
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#99

Сообщение Sancho » 27.05.2020{, 08:19}

ElectronicRTC писал(а):
27.05.2020{, 04:21}
подружить модуль в ФЛПРОГ
AD9833
Воспользуйтесь поиском - коллеги давно сделали, например
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

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

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

#100

Сообщение Davit07 » 28.05.2020{, 01:44}

AlexCrane, Подскажи пожалуйста.
Блок, что Вы посоветовали не получается запустить в режиме шага.
ШД работает как положено если на входе блок прописать константу. Но если через переменную указать скорость и шаг, то ШД работает без остановки в режиме шага .
Данный пример, что Вы делали ранние работает, с платами UNO, Mega. Но с ESP отсчитывать шаги не желает.
Укажите пожалуйста на ошибки?
Спасибо за помощь

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

Ещё не могу понять ,как работает stopAsel.Как не пытался понять ,реакции нет.
Так же обратил внимание.
Если не стоит чисел в скорости и ускорении то обычное перемещение continuous не активируется.
Идет какой то такт на период в 1секунду
noahi1977, Буду Вам благодарен если поделитесь готовым примером
Вложения
Тест ШД test ESP.flp
(327.88 КБ) 75 скачиваний

Ответить

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