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

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

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

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

Умножитель частоты шагов на 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 или больше,
прикупите любой конвертер напряжения, например:

Последний раз редактировалось MX_Master 21 июн 2017, 22:25, всего редактировалось 23 раз(а).
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3383
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1788
Медальки:
Настоящее имя: Михаил

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
Почётный участник
Почётный участник
 
Сообщения: 3755
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1322
Медальки:
Настоящее имя: Сергей

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

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

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

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

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

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

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

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

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

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

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

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
Почётный участник
Почётный участник
 
Сообщения: 3755
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1322
Медальки:
Настоящее имя: Сергей

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

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

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

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

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

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

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

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

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

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

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

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

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

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

След.

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

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

Зарегистрированные пользователи: 1240, aftaev, AndyBig, anthro, artclonic, artsemi, Bing [Bot], Chili, david1920, Disasse, dmitrykobylin86, FLUKE, gigs, Google [Bot], Izohron, JamesLet, magnetic, Majestic-12 [Bot], Maxekb77, MGG, mikehv, MX_Master, nik1, niksooon, nizamus, Гагарин, Skydiving, Stalker, toxakorzh, tueur, Umnik, VitalikD, Yandex [bot], yurayerz, ДмитрийП, Тарантос

Поделиться

Reputation System ©'