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

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

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

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

MX_Master писал(а):Осталось дело за малым - сделать это аппаратно :hehehe:
Аппаратно я такое делал лет 35 назад. На паре микросхем К155ИЕ8 :hottabych:
Базовая частота была, кстати, 10 МГц :)
Чудес не бывает. Бывают фокусы.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Сегодня часа 4 ушло на последовательные тесты умножителя в деле - на станке. Поставил электроящик на стол. К стенке ящика прикрутил струбцину и на неё установил монтажную платку с умножителем. Умножитель подключен к LPT порту. Питается умножитель прямо с материнки от 5V. Управление - LinuxCNC. На монтажной платке расположились 3 модуля:
На осях выставлял микрошаг от 1/64 до 1/256. Звук шаговиков стал более приятным, стессна, без потери скоростей. Пока тестировал, выявил косяк с направлением движения осей. Т.к. умножитель включается раньше чем LinuxCNC, то при старте умножителя может выставится неправильное начальное значение DIR. Скоро исправлю.

Фотки в массе похожи на паутину из проводов, но всё же. Видео не стал снимать, т.к. разница пока лишь в звуке моторов.
PHOTO_20170619_195903.jpg (3280 просмотров) <a class='original' href='./download/file.php?id=114331&sid=ef078e96c075d6a40da9400bf1d30d8e&mode=view' target=_blank>Загрузить оригинал (538.44 КБ)</a>
PHOTO_20170619_200035.jpg (3280 просмотров) <a class='original' href='./download/file.php?id=114330&sid=ef078e96c075d6a40da9400bf1d30d8e&mode=view' target=_blank>Загрузить оригинал (412.88 КБ)</a>
PHOTO_20170619_200054.jpg (3280 просмотров) <a class='original' href='./download/file.php?id=114329&sid=ef078e96c075d6a40da9400bf1d30d8e&mode=view' target=_blank>Загрузить оригинал (554.35 КБ)</a>
Аватара пользователя
Prav
Мастер
Сообщения: 827
Зарегистрирован: 14 июл 2015, 05:10
Репутация: 138
Настоящее имя: Петр Раввинский
Откуда: Москва
Контактная информация:

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

Сообщение Prav »

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

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

Сообщение MX_Master »

Prav писал(а):Из-за микрошага или ...?
У меня шаговики 86мм, длиной 118мм. Дрожат при вращении будь здоров. Поэтому микрошаг по всем осям мельче чем 1/64 ощутимо смягчает звук всего оркестра моторов.
Аватара пользователя
Prav
Мастер
Сообщения: 827
Зарегистрирован: 14 июл 2015, 05:10
Репутация: 138
Настоящее имя: Петр Раввинский
Откуда: Москва
Контактная информация:

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

Сообщение Prav »

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

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

Сообщение MX_Master »

В первом посте выложил исправленную версию прошивки для платки STM32F103C8T6. Сделал принудительную синхронизацию DIR во время простоя оси. Имеются разные варианты прошивки под разные множители - x2, x4, x8, x16, x32.

http://www.cnc-club.ru/forum/viewtopic.php?f=41&t=13977

Также добил все тесты на своём станке. Использовал множитель = 8 и исправленную прошивку. Самый крупный микрошаг получился по Z, где ШВП 2005 - 1/64. На приводах, где шестерня/рейка - 1/256, на поворотке с ременным редуктором (1:6) - 1/128. Максимальную подачу оставил как есть - 6 м/мин, больше жёсткость станка не позволяет.

Небольшой теоретический расчёт. Материнка с LinuxCNC выдаёт максимум 24 КГц. Дрова принимают максимум 200 Кгц. Допустим, по всем осям стоит ШВП с шагом 5мм, а микрошаг на драйверах = 1/16. Что соответствует 0.0015625 мм/шаг. Без умножителя максимальная скорость осей получится 2250 мм/мин = 24000гц / (200шагов * 16 / 5мм) * 60сек. А с умножителем X8 (24 КГц * 8 = 192Кгц) = 18 м/мин. Шаговик 57мм при хорошем питании на ШВП 5мм стабильно вытянет 5 м/мин рабочей подачи, а при шаге 10мм вытащит все 12 м/мин. В холостую будет еще быстрей, ну а дальше только сервы.

По итогу получается, что можно взять любой контроллер по вкусу и бюджету, будь-то ардуина с GRBL, материнка с LPT, клон NCStudio/USBCNC или китайский контроллер под Mach3. И разогнать их вывод до максимальной частоты бюджетных драйверов (200 Кгц). К тому же, в запасе останется возможность пересесть на более производительные драйвера (400 Кгц) или даже сервы.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Опробовал вчера еще один полуаппаратный способ вывода шагов на бюджетке с F103C8T6.

У этого F103C8T6 в наличии всего 4 аппаратных таймера. В текущем варианте умножителя это значит, что можно использовать только 4 оси и всё. Но этого маловато, хотелось бы выдавить из этого МК как минимум 5 осей.

Для этого я использовал способ вывода, при котором есть базовая несущая частота таймера. А генерация шагов для каждой оси происходит в каждом из 4-х отдельных каналов этого таймера. Я сделал так, что при каждом входящем шаге создаётся (обновляется) отдельный DMA массив из "2*множитель" элементов на основе текущего периода между входящими шагами. Каждый элемент массива это одно из будущих значений счётчика таймера, при котором будет дёргаться выходной пин. Далее этот массив скармливается своему каналу таймера и с помощью метода Output Compare + DMA происходит аппаратная генерация выходных шагов.

При таком подходе дело упирается только в кол-во DMA каналов МК, коих у F103C8T6 есть 7 штук. Проще говоря, можно организовать аппаратный вывод для 7 осей, используя всего 2 таймера из 4-х. Именно так я и сделал, но для начала выставил только 5 осей. Проверил вывод всех осей на анализаторе - всё работает. Есть, конечно, мелкие косяки в генерации, которые нужно допилить, но в целом этот новый способ весьма стабилен.

Вощем, будем развивать этот способ и далее. О дальнейших успехах буду сообщать уже с наглядными примерами.
Аватара пользователя
wldev
Мастер
Сообщения: 1639
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

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

Сообщение wldev »

MX_Master писал(а):Свежая версия прошивки для STM32F103C8Tx от 20.06.2017.
В комплект входят 5 прошивок с разными множителями - 2, 4, 8, 16, 32:
И зачем тут STM?
Делаем умножитель на 2 можно и так сделать... и на 4 итд.
Изображение

на STM надо делать с возможностью дробного коэффициета как у всех сервомоторов(цифр. редуктор) т.е. целочисленный числитель и знаменатель (16/32,bits)
и у каждой оси свой!
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Здесь всё как с модулем выравнивания портала, схема простая, но никто сам делать не будет (:

К тому же, чисто аппаратные решения не могут играть роль умного фильтра. Если исходный сигнал был рваный, как тряпка тузика, то чисто аппаратный выход будет выглядеть стрёмно. Михаил Юров не даст соврать :hehehe:
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

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

Bender писал(а):Делаем умножитель на 2 можно и так сделать... и на 4 итд.
Корректно такой умножитель будет работать только при меандре на входе и коэффициенте 2. И то на выходе у него будут короткие импульсы фиксированной длительности. При дальнейшем умножении они преобразуются в пачки импульсов по 2-4-8... Толку от такого умножения для управления ШД никакого.
Для того и нужны "умные" умножители, чтобы проанализировав входной поток импульсов, выдать равномерную частоту в n раз большую, причем количество импульсов должно получиться тоже точно в n раз большим.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
wldev
Мастер
Сообщения: 1639
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

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

Сообщение wldev »

Prav писал(а):Звук шаговиков стал более приятным, стессна, без потери скоростей.
а момент? я на своём гибочном станке тоже баловался(у меня контроллер может выдавать до 2,4МГц) но в результате пришёл к выводу, что скорость может и та же и звук лучше,но момент меньше, почему незнаю.
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
wldev
Мастер
Сообщения: 1639
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

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

Сообщение wldev »

Сергей Саныч писал(а):Для того и нужны "умные" умножители, чтобы проанализировав входной поток импульсов, выдать равномерную частоту в n раз большую, причем количество импульсов должно получиться тоже точно в n раз большим.
А если например один импульс придёт, то с какой частотой он должен выдать умноженные импульсы? что он будет анализировать?

В данной теме нужно говорить о не умножении частоты, а умножении импульсов шага.
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

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

Bender писал(а):А если например один импульс придёт, то с какой частотой он должен выдать умноженные импульсы? что он будет анализировать?
Его, родимого, и будет анализировать :)
Начнет выдавать импульсы с некоторой минимальной частотой. Придет второй импульс - частота увеличится.
Bender писал(а):В данной теме нужно говорить о не умножении частоты, а умножении импульсов шага.
А смысл в таком умножении?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Bender писал(а):
Prav писал(а):Звук шаговиков стал более приятным, стессна, без потери скоростей.
а момент? я на своём гибочном станке тоже баловался(у меня контроллер может выдавать до 2,4МГц) но в результате пришёл к выводу, что скорость может и та же и звук лучше,но момент меньше, почему незнаю.
Контроллер 2.4 Мгц может выдать, а драйвер сколько может принять? Аналоговый драйвер или цифровой? Нюансы и мелочи могут дать ответ.

Но я думаю так.. Самый высокий момент бывает только в устойчивых положениях статора - шаг, полушаг. И чем меньше мотор движется, тем больше момент. При очень мелком шаге, моторчик чаще находится в движении. И ротор чаще бывает в неустойчивых положениях. Отсюда снижение момента шаговика. Вощем, тут нужен компромисс.
Bender писал(а):А если например один импульс придёт, то с какой частотой он должен выдать умноженные импульсы? что он будет анализировать?
Умножение происходит между двумя шагами. Но у меня есть максимальное время ожидания второго шага, на тот случай, если был только 1 шаг.
Аватара пользователя
wldev
Мастер
Сообщения: 1639
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

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

Сообщение wldev »

Сергей Саныч писал(а):Начнет выдавать импульсы с некоторой минимальной частотой. Придет второй импульс - частота увеличится.
допустим, а след приходит с максимальной частотой, и он уже не успевает сделать текущую пачку. т.е. должен будет накопить ошибку и потом выдать....да? так это уже целый PID а не умножитель...
Сергей Саныч писал(а):А смысл в таком умножении?
Так если вы фактически умножаете количество импульсов т.е шагов...а потом делите на драйвере обратно.... или я не прав?
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

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

Bender писал(а):допустим, а след приходит с максимальной частотой
Это неправильно, так не должно быть в реальной системе. ШД - устройство механическое, инерционное. Ошибка следования будет в любом случае, а то и срыв шагов.
Bender писал(а):так это уже целый PID а не умножитель...
см. StepMaster :)
Последний раз редактировалось Сергей Саныч 25 июл 2017, 10:48, всего редактировалось 1 раз.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
wldev
Мастер
Сообщения: 1639
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

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

Сообщение wldev »

MX_Master писал(а):Контроллер 2.4 Мгц может выдать, а драйвер сколько может принять? Аналоговый драйвер или цифровой? Нюансы и мелочи могут дать ответ.
драйвер 200к.
MX_Master писал(а):Но я думаю так.. Самый высокий момент бывает только в устойчивых положениях статора - шаг, полушаг. И чем меньше мотор движется, тем больше момент. При очень мелком шаге, моторчик чаще находится в движении. И ротор чаще бывает в неустойчивых положениях. Отсюда снижение момента шаговика. Вощем, тут нужен компромисс.
согласен
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
wldev
Мастер
Сообщения: 1639
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

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

Сообщение wldev »

MX_Master писал(а):Умножение происходит между двумя шагами. Но у меня есть максимальное время ожидания второго шага, на тот случай, если был только 1 шаг.
надо ещё ч/з себя и dir пропускать, а то упрыгать может всё.
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

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

Bender писал(а):надо ещё ч/з себя и dir пропускать, а то упрыгать может всё.
Обязательно.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7478
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Bender писал(а):
MX_Master писал(а):Умножение происходит между двумя шагами. Но у меня есть максимальное время ожидания второго шага, на тот случай, если был только 1 шаг.
надо ещё ч/з себя и dir пропускать, а то упрыгать может всё.
Да, DIR каждой оси тоже заводится на вход
Ответить

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