Страница 5 из 15

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 21.05.2020{, 12:35}
Davit07
Ingwar, благодарю за ответ.
Буду пробовать. По результату обязательно отпишусь .

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 22.05.2020{, 12:51}
AlexCrane
ElectronicRTC, :smile171: Тут все драйверами пользуются я думаю, проблема сгенерировать импульсы с большой частотой... на предлагаемый вами драйвер...

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

Добавлено: 22.05.2020{, 13:03}
ElectronicRTC
AlexCrane, извиняйте если что не так - неужели сгенерить 1 канал 500кГц на ардуино так сложно ? Или нужны мегагерцы для шагового двигателя ?

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

Добавлено: 22.05.2020{, 20:44}
AlexCrane
ElectronicRTC, Вот тут Sancho подробно описал про частоты.
viewtopic.php?t=3064#p39396

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

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

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

Добавлено: 27.05.2020{, 00:00}
Davit07
Всем привет.
Подскажите пожалуйста. Пробовал загрузить данный блок на плату ESP 8266 v3, выдает ошибку с библиотекой . Загружаю с этого же компа , блок прекрасно работает с платами UNO,MEGA.
Парин, подскажите , что я делаю не так?
Благодарю за помощь

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

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

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

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

Добавлено: 27.05.2020{, 07:14}
AlexCrane
Davit07, Для ESP8266 нужно этот блок использовать viewtopic.php?t=5919&start=60#p88404 (без главного)

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

Добавлено: 27.05.2020{, 08:19}
Sancho
ElectronicRTC писал(а):
27.05.2020{, 04:21}
подружить модуль в ФЛПРОГ
AD9833
Воспользуйтесь поиском - коллеги давно сделали, например

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

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

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

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