Умножитель частоты шагов на STM32

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
MX_Master
Мастер
Сообщения: 6410
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2731
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Умножитель частоты шагов на STM32

Сообщение MX_Master »

Иногда встречается необходимость увеличить микрошаг драйвера шаговика. Чтобы сделать работу мотора более плавной и тихой. Для этой задачи нужно сделать так, чтоб ваше ЧПУ и контроллер выдавали наружу больше шагов (импульсов). Для более дорогих контроллеров с этим нет проблем. А вот в бюджетных решениях увеличить частоту шагов проблемно.

Например, вы используете 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 КБ) 143 скачивания
2017-06-13_083959 (1).png (97 просмотров) <a class='original' href='./download/file.php?id=189751&sid=22777dc44267fb36cd395ce2586da8f2&mode=view' target=_blank>Загрузить оригинал (54.85 КБ)</a>
Последний раз редактировалось MX_Master 13 дек 2020, 02:17, всего редактировалось 30 раз.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32753
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5870
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение aftaev »

MX_Master писал(а): поднять частоту STEP/DIR на участке между контроллером (или платой развязки) и драйверами моторов.
Не совсем понятно зачем это нужно?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
MX_Master
Мастер
Сообщения: 6410
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2731
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение MX_Master »

aftaev писал(а):Не совсем понятно зачем это нужно?
Все, что у меня есть, выдает на выходе не больше 30 КГц, в том числе и ПК с LCNC. Для плавной и быстрой работы ШД нужен весьма мелкий микрошаг и, соответственно, чуть больше STEP'чиков, хотя п до 200 КГц (лимит драйвера). Плюс, может кому-ньть кроме меня в быту пригодится.
Аватара пользователя
Mamont
Мастер
Сообщения: 1484
Зарегистрирован: 10 дек 2015, 12:21
Репутация: 249
Настоящее имя: Виталий
Откуда: РБ Минск
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Mamont »

MX_Master писал(а):
aftaev писал(а):Не совсем понятно зачем это нужно?
Все, что у меня есть, выдает на выходе не больше 30 КГц, в том числе и ПК с LCNC. Для плавной и быстрой работы ШД нужен весьма мелкий микрошаг и, соответственно, чуть больше STEP'чиков, хотя п до 200 КГц (лимит драйвера). Плюс, может кому-ньть кроме меня в быту пригодится.
А какой у тебя драйвер двигателей?
aftaev
Зачётный участник
Зачётный участник
Сообщения: 32753
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 5870
Откуда: Казахстан. Шымкент
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение aftaev »

MX_Master писал(а): в том числе и ПК с LCNC.
Если на ПК собрать Pluto-P мож по шустрее будет чем городить что то непонятное на Ардуине ;)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
MX_Master
Мастер
Сообщения: 6410
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2731
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение MX_Master »

Mamont писал(а):А какой у тебя драйвер двигателей?
DQ860MA
aftaev писал(а):Если на ПК собрать Pluto-P мож по шустрее будет чем городить что то непонятное на Ардуине
Дуинка это чисто на "попробовать". Тут скорее было интересно разобраться с МК и разработкой под них.
Первый блин, так скать (:
У меня брат - электроник, а я прогер. И было бы неплохо объединить эти две области.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 8980
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2806
Откуда: Тюмень
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Сергей Саныч »

А про Степмастер забыли? Или он не входит в категорию "бюджетных"?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
MX_Master
Мастер
Сообщения: 6410
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2731
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение MX_Master »

Сергей Саныч писал(а):А про Степмастер забыли? Или он не входит в категорию "бюджетных"?
Это был первый вариант в поисках истины (: Я уважаю работу Михаила. Он создаёт сами платы и разработал под них свой софт. Цена адекватная. Но моя цель не в покупке готового решения, а в превращении любой сподручной платки с МК в полезное ЧПУ устройство, просто средствами прошивки. Если на этих Мегах2560 даже GRBL софт пашет, то простой фильтр сигналов тоже должен уместиться.
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4339
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1518
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение selenur »

Может попробовать тебе посмотреть на STM32 микроконтроллеры?
Например с 8-ми битными AVR микроконтроллерами я знаком хорошо, и для получения максимальной скорости, я пользовался ассемблером, но сейчас используя stm32f103c8t6 мне уже абсолютно не нужно просчитывать такты процессора, для получения желаемого результата, теперь даже не оптимизированный код работает сверх быстро...
Хотя конечно обилие регистров в STM немного пугает после AVR, но обычно и не стоит задача использовать по максимуму всю периферию микроконтроллера.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
Serg
Мастер
Сообщения: 21276
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5025
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

Обилие регистров почти не заметно, если пользоваться CubeMX и HAL.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4339
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1518
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение selenur »

UAVpilot писал(а):Обилие регистров почти не заметно, если пользоваться CubeMX и HAL.
Не ну я конечно этим пользуюсь, поэтому и получается легко делать всякую чепуху, но не дает покоя осознание того, что непонятно как работает внутри... вот и лезешь разбираться... :-)

Вот к стати благодаря этому каналу, познавал STM32: https://www.youtube.com/user/Sappise
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
Serg
Мастер
Сообщения: 21276
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5025
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

Так исходники HAL включаются в проект и можно легко глянуть кишочки любой функции.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 6410
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2731
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение MX_Master »

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] );
Всё это для экономии места в оперативке под выходной буфер. В общем, я убедился, что 8 кб оперативки это чудовищно мало для REALTIME обработки! 20 кб у stm32f103c8t6, конечно, улучшат положение, но это ведь тоже немного. Стал присматриваться к 196 Кб на макетках с STM32F407VET6, цена, благо, не кусается.
Аватара пользователя
Serg
Мастер
Сообщения: 21276
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5025
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

MX_Master писал(а):Всё это для экономии места в оперативке под выходной буфер.
Твой код лежит во флеше, а не в ОЗУ.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 6410
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 2731
Настоящее имя: Миша
Откуда: Алма-Ата
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение MX_Master »

Буффер как раз в ОЗУ, т.к. он глобален, как и прочие вспомогательные массивы. Из 8кб при работе занято 5. Про флэху тут речи не было, бинарник в 2 кб вполне в ней поместится (:
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4339
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1518
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение selenur »

Я в некоторых проектах использую вот такую http://www.st.com/en/evaluation-tools/3 ... overy.html в ней есть внешняя память на 64 мбит, работать с памятью легко, скорость огромная....
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
Serg
Мастер
Сообщения: 21276
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5025
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

MX_Master писал(а):Буффер как раз в ОЗУ, т.к. он глобален, как и прочие вспомогательные массивы. Из 8кб при работе занято 5. Про флэху тут речи не было, бинарник в 2 кб вполне в ней поместится (:
Внимательно следи за буквами: твой буфер размещается в ОЗУ, программный код во флеше. Уменьшение размера кода сократит место занимаемое во флеше и никак не повлияет на место, занимаемое в ОЗУ.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Mamont
Мастер
Сообщения: 1484
Зарегистрирован: 10 дек 2015, 12:21
Репутация: 249
Настоящее имя: Виталий
Откуда: РБ Минск
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Mamont »

А ниче что вы одно и тоже написали уже 4 раза?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 8980
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2806
Откуда: Тюмень
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Сергей Саныч »

UAVpilot писал(а):буфер размещается в ОЗУ, программный код во флеше
Предполагаю, что это сделано для экономии места в ОЗУ путем рациональной организации хранения данных. Чтобы, скажем, один пиксел черно-белой картинки занимал один бит, а не, скажем, целый байт.
Последний раз редактировалось Сергей Саныч 06 дек 2016, 12:28, всего редактировалось 1 раз.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21276
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5025
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

selenur писал(а):Я в некоторых проектах использую вот такую http://www.st.com/en/evaluation-tools/3 ... overy.html в ней есть внешняя память на 64 мбит, работать с памятью легко, скорость огромная....
А эта память может отображаться в общее адресное пространство МК, чтоб её можно было использовать под переменные? В доках не нашёл ничего про это...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «Электроника»