Страница 1 из 19

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

СообщениеДобавлено: 05 дек 2016, 19:01
MX_Master
Умножитель частоты шагов на STM32 HTB1PemDJpXXXXXHXpXXq6xXFXXXM.jpg
С микроконтроллерами дел не имел. Но на горизонте замаячила задачка - поднять частоту шагов STEP на участке между контроллером (платой развязки) и драйверами шаговых движков. Покопался по сетям и в Китае, но кроме StepMaster'a, PLCS-L и Geckodrive G901X ничего путнего не нашёл :hehehe: И тогда стало ясно, что пора сдуть пыль с навыков программирования, изучить работу с МК и создать требуемое устройство.

Цель всей затеи - создать максимально бюджетный умножитель STEP/DIR, который можно прилепить к медленным бюджетным контроллерам или материнкам под Mach3/LinuxCNC. Всё это нужно для плавных (малый микрошаг) и более быстрых перемещений по всем осям.

Макеток с разными МК в Китае много, в качестве подопытных выбрал Мегу2560 за 7$ и STM32F407VET6 за 12$. 16 Мгц атмеги2560 оказалось мало, поэтому сначала переехал на STM32F407VET6 (168МГц). По ходу разработки прикупил бюджетку с STM32F103C8T6 (2$). Со временем стало понятно, что бюджетки STM32F103C8T6 вполне достаточно для текущей задачи, поэтому плавно перевёл разработку под неё. О дальнейших успехах и неудачах этой затеи буду сообщать по мере тестирования.

Свежая версия прошивки для STM32F103C8Tx от 20.06.2017.
В комплект входят 5 прошивок с разными множителями - 2, 4, 8, 16, 32:

Прошивается всё при помощи китайского ST-Link V2 (2$) и программы STM32 ST-LINK Utility (бесплатная).

Распиновка:
Умножитель частоты шагов на STM32 2017-06-13_083959.png
STM32F103C8Tx

:attention: Не забываем, что у STM32 вход/выход рассчитан на напряжение 3.3V.
Если у вашего контроллера (или LPT порта) выход на 5V или больше,
прикупите любой конвертер напряжения, например:


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

СообщениеДобавлено: 05 дек 2016, 19:07
aftaev
MX_Master писал(а): поднять частоту STEP/DIR на участке между контроллером (или платой развязки) и драйверами моторов.

Не совсем понятно зачем это нужно?

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

СообщениеДобавлено: 05 дек 2016, 19:19
MX_Master
aftaev писал(а):Не совсем понятно зачем это нужно?

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

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

СообщениеДобавлено: 05 дек 2016, 20:01
Mamont
MX_Master писал(а):
aftaev писал(а):Не совсем понятно зачем это нужно?

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


А какой у тебя драйвер двигателей?

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

СообщениеДобавлено: 05 дек 2016, 20:08
aftaev
MX_Master писал(а): в том числе и ПК с LCNC.

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

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

СообщениеДобавлено: 05 дек 2016, 20:53
MX_Master
Mamont писал(а):А какой у тебя драйвер двигателей?

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

Дуинка это чисто на "попробовать". Тут скорее было интересно разобраться с МК и разработкой под них.
Первый блин, так скать (:
У меня брат - электроник, а я прогер. И было бы неплохо объединить эти две области.

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

СообщениеДобавлено: 05 дек 2016, 20:58
Сергей Саныч
А про Степмастер забыли? Или он не входит в категорию "бюджетных"?

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

СообщениеДобавлено: 05 дек 2016, 21:20
MX_Master
Сергей Саныч писал(а):А про Степмастер забыли? Или он не входит в категорию "бюджетных"?

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

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

СообщениеДобавлено: 05 дек 2016, 21:32
selenur
Может попробовать тебе посмотреть на STM32 микроконтроллеры?
Например с 8-ми битными AVR микроконтроллерами я знаком хорошо, и для получения максимальной скорости, я пользовался ассемблером, но сейчас используя stm32f103c8t6 мне уже абсолютно не нужно просчитывать такты процессора, для получения желаемого результата, теперь даже не оптимизированный код работает сверх быстро...
Хотя конечно обилие регистров в STM немного пугает после AVR, но обычно и не стоит задача использовать по максимуму всю периферию микроконтроллера.

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

СообщениеДобавлено: 05 дек 2016, 22:09
UAVpilot
Обилие регистров почти не заметно, если пользоваться CubeMX и HAL.

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

СообщениеДобавлено: 05 дек 2016, 22:13
selenur
UAVpilot писал(а):Обилие регистров почти не заметно, если пользоваться CubeMX и HAL.

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

Вот к стати благодаря этому каналу, познавал STM32: https://www.youtube.com/user/Sappise

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

СообщениеДобавлено: 05 дек 2016, 22:18
UAVpilot
Так исходники HAL включаются в проект и можно легко глянуть кишочки любой функции.

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

СообщениеДобавлено: 05 дек 2016, 22:30
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, цена, благо, не кусается.

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

СообщениеДобавлено: 05 дек 2016, 22:38
UAVpilot
MX_Master писал(а):Всё это для экономии места в оперативке под выходной буфер.

Твой код лежит во флеше, а не в ОЗУ.

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

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

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

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

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

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

Внимательно следи за буквами: твой буфер размещается в ОЗУ, программный код во флеше. Уменьшение размера кода сократит место занимаемое во флеше и никак не повлияет на место, занимаемое в ОЗУ.

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

СообщениеДобавлено: 06 дек 2016, 12:20
Mamont
А ниче что вы одно и тоже написали уже 4 раза?

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

СообщениеДобавлено: 06 дек 2016, 12:22
Сергей Саныч
UAVpilot писал(а):буфер размещается в ОЗУ, программный код во флеше
Предполагаю, что это сделано для экономии места в ОЗУ путем рациональной организации хранения данных. Чтобы, скажем, один пиксел черно-белой картинки занимал один бит, а не, скажем, целый байт.

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

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

А эта память может отображаться в общее адресное пространство МК, чтоб её можно было использовать под переменные? В доках не нашёл ничего про это...