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

Контроллеры, драйверы, датчики, управляющие устройства.

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

Сообщение MX_Master » 05 дек 2016, 19:01

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

Например, вы используете Mach3 или LinuxCNC + программный вывод шагов через LPT порт. Для таких систем вывести на драйвер шаговика больше 50 КГц шагов будет нереально. Тем не менее, сам драйвер поддерживает частоту до 200 КГц. Для более плавной работы мотора нужно хотя бы 150 КГц на выходе. Как раз для таких случаев и нужен умножитель частоты шагов. Он получает на вход STEP/DIR сигналы от контроллера, умножает их на указанное число и выводит наружу. К примеру, если на входе была частота шагов 36.21 КГц, то на выходе будет ровно 108.63 КГц. Думаю, принцип понятен.

В начале я сделал прошивку для STM32F407VET6. Такие макетки продаются на АЛИ по 10$. Но в природе есть и более бюджетные модели. Например, синяя пилюля с STM32F103C8T6. Всего 2$, зато сколько удовольствия ;D Окончательный вариант прошивки заточен именно под синюю пилюлю (см. фотки).

Максимальное кол-во осей step/dir - 4.
Максимальная частоты вывода шагов - 1 МГц.

Исходники проекта - закрыты, автор наелся этим open-source до полного отвращения

Готовые прошивки с разными множителями лежат в архиве
Вложения
steps-frequency-multiplier_v1.0.3_bin.zip
(26.44 Кб) Скачиваний: 14
Последний раз редактировалось MX_Master 17 апр 2020, 06:02, всего редактировалось 28 раз(а).
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5600
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2532
Медальки:
Настоящее имя: Михаил

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

Сообщение aftaev » 05 дек 2016, 19:07

MX_Master писал(а): поднять частоту STEP/DIR на участке между контроллером (или платой развязки) и драйверами моторов.

Не совсем понятно зачем это нужно?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
 
Сообщения: 31644
Зарегистрирован: 04 апр 2010, 19:22
Откуда: Казахстан. Шымкент
Репутация: 5665
Медальки:

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

Сообщение MX_Master » 05 дек 2016, 19:19

aftaev писал(а):Не совсем понятно зачем это нужно?

Все, что у меня есть, выдает на выходе не больше 30 КГц, в том числе и ПК с LCNC. Для плавной и быстрой работы ШД нужен весьма мелкий микрошаг и, соответственно, чуть больше STEP'чиков, хотя п до 200 КГц (лимит драйвера). Плюс, может кому-ньть кроме меня в быту пригодится.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5600
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2532
Медальки:
Настоящее имя: Михаил

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

Сообщение Mamont » 05 дек 2016, 20:01

MX_Master писал(а):
aftaev писал(а):Не совсем понятно зачем это нужно?

Все, что у меня есть, выдает на выходе не больше 30 КГц, в том числе и ПК с LCNC. Для плавной и быстрой работы ШД нужен весьма мелкий микрошаг и, соответственно, чуть больше STEP'чиков, хотя п до 200 КГц (лимит драйвера). Плюс, может кому-ньть кроме меня в быту пригодится.


А какой у тебя драйвер двигателей?
Аватара пользователя
Mamont
Мастер
 
Сообщения: 1331
Зарегистрирован: 10 дек 2015, 12:21
Откуда: РБ Минск
Репутация: 237
Настоящее имя: Виталий

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

Сообщение aftaev » 05 дек 2016, 20:08

MX_Master писал(а): в том числе и ПК с LCNC.

Если на ПК собрать Pluto-P мож по шустрее будет чем городить что то непонятное на Ардуине ;)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
 
Сообщения: 31644
Зарегистрирован: 04 апр 2010, 19:22
Откуда: Казахстан. Шымкент
Репутация: 5665
Медальки:

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

Сообщение MX_Master » 05 дек 2016, 20:53

Mamont писал(а):А какой у тебя драйвер двигателей?

DQ860MA
aftaev писал(а):Если на ПК собрать Pluto-P мож по шустрее будет чем городить что то непонятное на Ардуине

Дуинка это чисто на "попробовать". Тут скорее было интересно разобраться с МК и разработкой под них.
Первый блин, так скать (:
У меня брат - электроник, а я прогер. И было бы неплохо объединить эти две области.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5600
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2532
Медальки:
Настоящее имя: Михаил

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

Сообщение Сергей Саныч » 05 дек 2016, 20:58

А про Степмастер забыли? Или он не входит в категорию "бюджетных"?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 8801
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 2754
Медальки:

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

Сообщение MX_Master » 05 дек 2016, 21:20

Сергей Саныч писал(а):А про Степмастер забыли? Или он не входит в категорию "бюджетных"?

Это был первый вариант в поисках истины (: Я уважаю работу Михаила. Он создаёт сами платы и разработал под них свой софт. Цена адекватная. Но моя цель не в покупке готового решения, а в превращении любой сподручной платки с МК в полезное ЧПУ устройство, просто средствами прошивки. Если на этих Мегах2560 даже GRBL софт пашет, то простой фильтр сигналов тоже должен уместиться.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5600
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2532
Медальки:
Настоящее имя: Михаил

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

Сообщение selenur » 05 дек 2016, 21:32

Может попробовать тебе посмотреть на STM32 микроконтроллеры?
Например с 8-ми битными AVR микроконтроллерами я знаком хорошо, и для получения максимальной скорости, я пользовался ассемблером, но сейчас используя stm32f103c8t6 мне уже абсолютно не нужно просчитывать такты процессора, для получения желаемого результата, теперь даже не оптимизированный код работает сверх быстро...
Хотя конечно обилие регистров в STM немного пугает после AVR, но обычно и не стоит задача использовать по максимуму всю периферию микроконтроллера.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
selenur
Почётный участник
Почётный участник
 
Сообщения: 4274
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1504
Медальки:
Настоящее имя: Сергей

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

Сообщение UAVpilot » 05 дек 2016, 22:09

Обилие регистров почти не заметно, если пользоваться CubeMX и HAL.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 19875
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4796
Медальки:
Настоящее имя: Сергей

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

Сообщение selenur » 05 дек 2016, 22:13

UAVpilot писал(а):Обилие регистров почти не заметно, если пользоваться CubeMX и HAL.

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

Вот к стати благодаря этому каналу, познавал STM32: https://www.youtube.com/user/Sappise
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
selenur
Почётный участник
Почётный участник
 
Сообщения: 4274
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1504
Медальки:
Настоящее имя: Сергей

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

Сообщение UAVpilot » 05 дек 2016, 22:18

Так исходники HAL включаются в проект и можно легко глянуть кишочки любой функции.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 19875
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4796
Медальки:
Настоящее имя: Сергей

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

Сообщение MX_Master » 05 дек 2016, 22:30

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, цена, благо, не кусается.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5600
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2532
Медальки:
Настоящее имя: Михаил

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

Сообщение UAVpilot » 05 дек 2016, 22:38

MX_Master писал(а):Всё это для экономии места в оперативке под выходной буфер.

Твой код лежит во флеше, а не в ОЗУ.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 19875
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4796
Медальки:
Настоящее имя: Сергей

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

Сообщение MX_Master » 05 дек 2016, 23:07

Буффер как раз в ОЗУ, т.к. он глобален, как и прочие вспомогательные массивы. Из 8кб при работе занято 5. Про флэху тут речи не было, бинарник в 2 кб вполне в ней поместится (:
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5600
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2532
Медальки:
Настоящее имя: Михаил

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

Сообщение selenur » 06 дек 2016, 00:03

Я в некоторых проектах использую вот такую http://www.st.com/en/evaluation-tools/3 ... overy.html в ней есть внешняя память на 64 мбит, работать с памятью легко, скорость огромная....
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
selenur
Почётный участник
Почётный участник
 
Сообщения: 4274
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1504
Медальки:
Настоящее имя: Сергей

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

Сообщение UAVpilot » 06 дек 2016, 12:13

MX_Master писал(а):Буффер как раз в ОЗУ, т.к. он глобален, как и прочие вспомогательные массивы. Из 8кб при работе занято 5. Про флэху тут речи не было, бинарник в 2 кб вполне в ней поместится (:

Внимательно следи за буквами: твой буфер размещается в ОЗУ, программный код во флеше. Уменьшение размера кода сократит место занимаемое во флеше и никак не повлияет на место, занимаемое в ОЗУ.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 19875
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4796
Медальки:
Настоящее имя: Сергей

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

Сообщение Mamont » 06 дек 2016, 12:20

А ниче что вы одно и тоже написали уже 4 раза?
Аватара пользователя
Mamont
Мастер
 
Сообщения: 1331
Зарегистрирован: 10 дек 2015, 12:21
Откуда: РБ Минск
Репутация: 237
Настоящее имя: Виталий

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

Сообщение Сергей Саныч » 06 дек 2016, 12:22

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

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

Сообщение UAVpilot » 06 дек 2016, 12:26

selenur писал(а):Я в некоторых проектах использую вот такую http://www.st.com/en/evaluation-tools/3 ... overy.html в ней есть внешняя память на 64 мбит, работать с памятью легко, скорость огромная....

А эта память может отображаться в общее адресное пространство МК, чтоб её можно было использовать под переменные? В доках не нашёл ничего про это...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 19875
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4796
Медальки:
Настоящее имя: Сергей

След.

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

Кто сейчас на конференции

Зарегистрированные пользователи: a.t.76, Bing [Bot], Google [Bot], Majestic-12 [Bot], Xer0x_king, Yandex [bot], Тенгель

Reputation System ©'