Умножитель частоты шагов на STM32
- MX_Master
- Мастер
- Сообщения: 7460
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3086
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Умножитель частоты шагов на STM32
Иногда встречается необходимость увеличить микрошаг драйвера шаговика. Чтобы сделать работу мотора более плавной и тихой. Для этой задачи нужно сделать так, чтоб ваше ЧПУ и контроллер выдавали наружу больше шагов (импульсов). Для более дорогих контроллеров с этим нет проблем. А вот в бюджетных решениях увеличить частоту шагов проблемно.
Например, вы используете Mach3 или LinuxCNC + программный вывод шагов через LPT порт. Для таких систем вывести на драйвер шаговика больше 50 КГц шагов будет нереально. Тем не менее, сам драйвер поддерживает частоту до 200 КГц. Для более плавной работы мотора нужно хотя бы 150 КГц на выходе. Как раз для таких случаев и нужен умножитель частоты шагов. Он получает на вход STEP/DIR сигналы от контроллера, умножает их на указанное число и выводит наружу. К примеру, если на входе была частота шагов 36.21 КГц, то на выходе будет ровно 108.63 КГц. Думаю, принцип понятен.
В начале я сделал прошивку для STM32F407VET6. Такие макетки продаются на АЛИ по 10$. Но в природе есть и более бюджетные модели. Например, синяя пилюля с STM32F103C8T6. Всего 2$, зато сколько удовольствия ;D Окончательный вариант прошивки заточен именно под синюю пилюлю (см. фотки).
Максимальное кол-во осей step/dir - 4.
Максимальная частоты вывода шагов - 1 МГц.
Исходники проекта - https://gitlab.com/MX_Master/steps-frequency-multiplier
Готовые прошивки с разными множителями лежат в архиве
Например, вы используете Mach3 или LinuxCNC + программный вывод шагов через LPT порт. Для таких систем вывести на драйвер шаговика больше 50 КГц шагов будет нереально. Тем не менее, сам драйвер поддерживает частоту до 200 КГц. Для более плавной работы мотора нужно хотя бы 150 КГц на выходе. Как раз для таких случаев и нужен умножитель частоты шагов. Он получает на вход STEP/DIR сигналы от контроллера, умножает их на указанное число и выводит наружу. К примеру, если на входе была частота шагов 36.21 КГц, то на выходе будет ровно 108.63 КГц. Думаю, принцип понятен.
В начале я сделал прошивку для STM32F407VET6. Такие макетки продаются на АЛИ по 10$. Но в природе есть и более бюджетные модели. Например, синяя пилюля с STM32F103C8T6. Всего 2$, зато сколько удовольствия ;D Окончательный вариант прошивки заточен именно под синюю пилюлю (см. фотки).
Максимальное кол-во осей step/dir - 4.
Максимальная частоты вывода шагов - 1 МГц.
Исходники проекта - https://gitlab.com/MX_Master/steps-frequency-multiplier
Готовые прошивки с разными множителями лежат в архиве
- Вложения
-
- steps-frequency-multiplier_v1.0.3_bin.zip
- (26.44 КБ) 298 скачиваний
Последний раз редактировалось MX_Master 13 дек 2020, 02:17, всего редактировалось 30 раз.
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6191
- Откуда: Казахстан.
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Не совсем понятно зачем это нужно?MX_Master писал(а): поднять частоту STEP/DIR на участке между контроллером (или платой развязки) и драйверами моторов.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- MX_Master
- Мастер
- Сообщения: 7460
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3086
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Все, что у меня есть, выдает на выходе не больше 30 КГц, в том числе и ПК с LCNC. Для плавной и быстрой работы ШД нужен весьма мелкий микрошаг и, соответственно, чуть больше STEP'чиков, хотя п до 200 КГц (лимит драйвера). Плюс, может кому-ньть кроме меня в быту пригодится.aftaev писал(а):Не совсем понятно зачем это нужно?
- Mamont
- Мастер
- Сообщения: 1949
- Зарегистрирован: 10 дек 2015, 12:21
- Репутация: 380
- Настоящее имя: Виталий
- Откуда: РБ Минск
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
А какой у тебя драйвер двигателей?MX_Master писал(а):Все, что у меня есть, выдает на выходе не больше 30 КГц, в том числе и ПК с LCNC. Для плавной и быстрой работы ШД нужен весьма мелкий микрошаг и, соответственно, чуть больше STEP'чиков, хотя п до 200 КГц (лимит драйвера). Плюс, может кому-ньть кроме меня в быту пригодится.aftaev писал(а):Не совсем понятно зачем это нужно?
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6191
- Откуда: Казахстан.
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Если на ПК собрать Pluto-P мож по шустрее будет чем городить что то непонятное на АрдуинеMX_Master писал(а): в том числе и ПК с LCNC.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- MX_Master
- Мастер
- Сообщения: 7460
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3086
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
DQ860MAMamont писал(а):А какой у тебя драйвер двигателей?
Дуинка это чисто на "попробовать". Тут скорее было интересно разобраться с МК и разработкой под них.aftaev писал(а):Если на ПК собрать Pluto-P мож по шустрее будет чем городить что то непонятное на Ардуине
Первый блин, так скать (:
У меня брат - электроник, а я прогер. И было бы неплохо объединить эти две области.
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2857
- Откуда: Тюмень
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
А про Степмастер забыли? Или он не входит в категорию "бюджетных"?
Чудес не бывает. Бывают фокусы.
- MX_Master
- Мастер
- Сообщения: 7460
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3086
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Это был первый вариант в поисках истины (: Я уважаю работу Михаила. Он создаёт сами платы и разработал под них свой софт. Цена адекватная. Но моя цель не в покупке готового решения, а в превращении любой сподручной платки с МК в полезное ЧПУ устройство, просто средствами прошивки. Если на этих Мегах2560 даже GRBL софт пашет, то простой фильтр сигналов тоже должен уместиться.Сергей Саныч писал(а):А про Степмастер забыли? Или он не входит в категорию "бюджетных"?
- selenur
- Почётный участник
- Сообщения: 4604
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1621
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Может попробовать тебе посмотреть на STM32 микроконтроллеры?
Например с 8-ми битными AVR микроконтроллерами я знаком хорошо, и для получения максимальной скорости, я пользовался ассемблером, но сейчас используя stm32f103c8t6 мне уже абсолютно не нужно просчитывать такты процессора, для получения желаемого результата, теперь даже не оптимизированный код работает сверх быстро...
Хотя конечно обилие регистров в STM немного пугает после AVR, но обычно и не стоит задача использовать по максимуму всю периферию микроконтроллера.
Например с 8-ми битными AVR микроконтроллерами я знаком хорошо, и для получения максимальной скорости, я пользовался ассемблером, но сейчас используя stm32f103c8t6 мне уже абсолютно не нужно просчитывать такты процессора, для получения желаемого результата, теперь даже не оптимизированный код работает сверх быстро...
Хотя конечно обилие регистров в STM немного пугает после AVR, но обычно и не стоит задача использовать по максимуму всю периферию микроконтроллера.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Обилие регистров почти не заметно, если пользоваться CubeMX и HAL.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- selenur
- Почётный участник
- Сообщения: 4604
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1621
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Не ну я конечно этим пользуюсь, поэтому и получается легко делать всякую чепуху, но не дает покоя осознание того, что непонятно как работает внутри... вот и лезешь разбираться...UAVpilot писал(а):Обилие регистров почти не заметно, если пользоваться CubeMX и HAL.
Вот к стати благодаря этому каналу, познавал STM32: https://www.youtube.com/user/Sappise
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Так исходники HAL включаются в проект и можно легко глянуть кишочки любой функции.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- MX_Master
- Мастер
- Сообщения: 7460
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3086
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Выноса мозга от работы с регистрами у меня не было, а вот от хитросплетений побитовых операций я иногда зависал. Чего только стоит вот такая конструкцияselenur писал(а):Может попробовать тебе посмотреть на STM32 микроконтроллеры?
Например с 8-ми битными AVR микроконтроллерами я знаком хорошо, и для получения максимальной скорости, я пользовался ассемблером, но сейчас используя stm32f103c8t6 мне уже абсолютно не нужно просчитывать такты процессора, для получения желаемого результата, теперь даже не оптимизированный код работает сверх быстро...
Хотя конечно обилие регистров в STM немного пугает после AVR, но обычно и не стоит задача использовать по максимуму всю периферию микроконтроллера.
Код: Выделить всё
out_pin_cur ^=
( (-GET_BIT(buf[ buf_out_pos[axis] ], step_bit[axis])) ^ out_pin_cur ) &
( 1 << step_bit[axis] );
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Твой код лежит во флеше, а не в ОЗУ.MX_Master писал(а):Всё это для экономии места в оперативке под выходной буфер.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- MX_Master
- Мастер
- Сообщения: 7460
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3086
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Буффер как раз в ОЗУ, т.к. он глобален, как и прочие вспомогательные массивы. Из 8кб при работе занято 5. Про флэху тут речи не было, бинарник в 2 кб вполне в ней поместится (:
- selenur
- Почётный участник
- Сообщения: 4604
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1621
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Я в некоторых проектах использую вот такую http://www.st.com/en/evaluation-tools/3 ... overy.html в ней есть внешняя память на 64 мбит, работать с памятью легко, скорость огромная....
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Внимательно следи за буквами: твой буфер размещается в ОЗУ, программный код во флеше. Уменьшение размера кода сократит место занимаемое во флеше и никак не повлияет на место, занимаемое в ОЗУ.MX_Master писал(а):Буффер как раз в ОЗУ, т.к. он глобален, как и прочие вспомогательные массивы. Из 8кб при работе занято 5. Про флэху тут речи не было, бинарник в 2 кб вполне в ней поместится (:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Mamont
- Мастер
- Сообщения: 1949
- Зарегистрирован: 10 дек 2015, 12:21
- Репутация: 380
- Настоящее имя: Виталий
- Откуда: РБ Минск
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
А ниче что вы одно и тоже написали уже 4 раза?
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2857
- Откуда: Тюмень
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
Предполагаю, что это сделано для экономии места в ОЗУ путем рациональной организации хранения данных. Чтобы, скажем, один пиксел черно-белой картинки занимал один бит, а не, скажем, целый байт.UAVpilot писал(а):буфер размещается в ОЗУ, программный код во флеше
Последний раз редактировалось Сергей Саныч 06 дек 2016, 12:28, всего редактировалось 1 раз.
Чудес не бывает. Бывают фокусы.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Умножитель STEP/DIR на Arduino
А эта память может отображаться в общее адресное пространство МК, чтоб её можно было использовать под переменные? В доках не нашёл ничего про это...selenur писал(а):Я в некоторых проектах использую вот такую http://www.st.com/en/evaluation-tools/3 ... overy.html в ней есть внешняя память на 64 мбит, работать с памятью легко, скорость огромная....
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...