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

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Mamont
Мастер
Сообщения: 2005
Зарегистрирован: 10 дек 2015, 12:21
Репутация: 391
Настоящее имя: Виталий
Откуда: РБ Минск
Контактная информация:

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

Сообщение Mamont »

u37 писал(а): Теперь по сути. ТС задался вопросом быстрых тиков для мягкости вращения двигателей, но забыл, что программа выдает тики явно не аппаратно.
А не беда. К примеру мач3 (не знаю, на чем работает ТС) на частоте 100кгц. Мач думает что выдает импульсы с периодом 10мкс. По факту может сильно отличатся, особенно если винда7 на компе.
Значит импульсы надо принять и квантовать по времени. Если разбежка импульсов меньше 5мкс (половины периода от 10мкс) то метод будет работать.
А если заставить комп постоянно выдавать импульс 100кгц, то совсем все хорошо, этот импульс использовать для синхронизации
u37
Новичок
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj
Контактная информация:

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

Сообщение u37 »

По поводу "полезных функций", может что заинтересует.
1. буферизирование импульсов для =гарантированно= мягкого и монотонного разгона/торможения двигателей (шаговиков). Об этом уже сказал.
Дополню - с функцией торможения/реверса/возврата, если надо - см. ниже.
2. "программные" поставщики импульсов управления (например, драйвер LPT в OS) ограничены _спонтанным_ лимитом по скорости. Завышенная скорость тиков будет ими нормально выдаваться только при низких скоростях движения, на высоких следует ограничение скорости реакции драйвера. Для обхода этого зла можно снизить скорость тиков в программе, и добавить маштабирование (умножение) в своем девайсе. Собственно, вся эта тема о том.
3. поставить умное ограничение площади стола. Т.е завести контакты лимитов не на контроллер, а на свой девайс. При этом сами импульсы "как-бы исполняются", но до драйверов не доходят. Например, если стол уперся в левый край, то последующие импульсы движения влево не пройдут в мотор, но сами импульс будут считаться и последующие "правые" импульсы начнут проходить в мотор только после обнуления счетчика. В отличии от простого лимита это позволит изготавливать деталь большего размера, чем размер стола. Всё, что "больше", естественно, придется пилить на другой заготовке и склеивать, но от этого уж никак не избавиться.
4. Можно делать компенсацию остановки и датчиков 0
5. отлично врезается пульт управления. Простые аналоговые джойстики по 40 рублей и всё удовольствие. ))
6. и самое любимое - калибровка 0 инструмента и позиционирования простым нажатием кнопки. Поднимать зад и тащиться кликать мышой - это скучно. Да и подсветку курсора можно включить на этот момент.
Всё сказанное IMHO и, по бОльшей части глупость. ))))
Аватара пользователя
Mamont
Мастер
Сообщения: 2005
Зарегистрирован: 10 дек 2015, 12:21
Репутация: 391
Настоящее имя: Виталий
Откуда: РБ Минск
Контактная информация:

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

Сообщение Mamont »

u37 писал(а):3. поставить умное ограничение площади стола.
ипосиблле.
выйдет координата за пределы. мастер-контроллер задушит импульсы на драйвера, но будет считать.
комп пойдет в обратку, наберет плавно скорость и влетит в рабочую зону. мастер контроллер сходу завалит драйвер быстрыми импульсами. а мотор будет жужжать, не сможет раскрутиться
u37
Новичок
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj
Контактная информация:

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

Сообщение u37 »

Mamont, мач3 выдает 100кгц только в среднем, да и то, он только думает, что там 100 кгц.
"По факту может сильно отличатся, особенно если винда7 на компе."
И я о том же. Причем, от "винды" почти не зависит. Драйверы - вот основное зло.
Сама цифра взялась вот откуда - время выпонения 1 запроса драйвера с доступом к порту занимает 10 uS (типичный максимум 30 uS), вот отсюда и 100 кгц.
Любой вмешательство OS и между 10uS тиками вклеивается разрыв в 2.5 ms.
Аватара пользователя
Mamont
Мастер
Сообщения: 2005
Зарегистрирован: 10 дек 2015, 12:21
Репутация: 391
Настоящее имя: Виталий
Откуда: РБ Минск
Контактная информация:

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

Сообщение Mamont »

u37 писал(а):Любой вмешательство OS и между 10uS тиками вклеивается разрыв в 2.5 ms.
можно поподробнее о вмешательстве, и почему оно никогда не происходит?
u37
Новичок
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj
Контактная информация:

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

Сообщение u37 »

Mamont писал(а):выйдет координата за пределы. мастер-контроллер задушит импульсы на драйвера, но будет считать.
комп пойдет в обратку, наберет плавно скорость и влетит в рабочую зону. мастер контроллер сходу завалит драйвер быстрыми импульсами. а мотор будет жужжать, не сможет раскрутиться
"1. буферизирование импульсов для =гарантированно= мягкого и монотонного разгона/торможения двигателей (шаговиков). "
Не вижу никаких проблем. ))
Мало того, что обрежутся импульсы в лимите, так еще можно легко учесть инерционный выбег механики, добавив несколько импульсов назад.
Да, сюда же придется вложить гистерезис кнопок датчиков лимитов. Но - всё решаемо.
Аватара пользователя
Mamont
Мастер
Сообщения: 2005
Зарегистрирован: 10 дек 2015, 12:21
Репутация: 391
Настоящее имя: Виталий
Откуда: РБ Минск
Контактная информация:

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

Сообщение Mamont »

u37 писал(а): "1. буферизирование импульсов для =гарантированно= мягкого и монотонного разгона/торможения двигателей (шаговиков). "
Не вижу никаких проблем. ))
Если не видишь проблем, это означает или зрение плохое, или нет ничего.
Практика - критерий истинны
u37
Новичок
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj
Контактная информация:

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

Сообщение u37 »

Mamont писал(а):
u37 писал(а):Любой вмешательство OS и между 10uS тиками вклеивается разрыв в 2.5 ms.
можно поподробнее о вмешательстве, и почему оно никогда не происходит?
Насчет "никогда не происходит" вы меня порадовали. )))
Программа с выводом в железо может работать двумя способами - или выдачей каждого импульса, или спецификацией драйверу выдать столько-то импульсов. Судя по рекомендации не запускать ресурсоемкие приложения одновременно с мач3, он работает по первому принципу (могу и заблуждаться).
Пока нагрузки на OS нет, то исполняемой программе дается практически всё время и никто ее особо не прерывает. Однако, появление другой "нагрузки" вызывает режим переключения задач и приложение усыпляется. На это время прохождение импульсов не происходит, программа же стоит.
Если драйвер порта не "просто генерит импульсы", то усыпление программы вызовет лишь небольшие неконтролируемые задержки между пачками импульсов. Вроде пустяк, но это так-же может вызывать срыв - механика не любит резких изменений скорости. Это как быстро идти и остановиться на шаге - неизбежно упадешь. ))
Если есть "аппаратная" буферизация, то проблемы с разрывами нет, надо лишь медленно (монотонно) подтормаживать, а потом разогнаться. Физически, механика и так и так будет замедляться-разгоняться, но при буферизации не произойдет срыва слежения.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

AndyBig писал(а):Отквотил целиком всю функцию
Я про мои слова. :)
AndyBig писал(а):С M4 не работаю
О чём тогда говорить?.. :) Ну а хотя-бы с stm32f3 работал? Или только f0 и f1? Там да, spl можно обойтись.
AndyBig писал(а):Бери плату с Altera EP4CE10
Туда разве что прошивка из проекта pluto-p поместиться, но это уже давно сделано. Там элементов даже на самое простое ядро arm не хватит, а оно для этой задачи понадобится.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

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

Сообщение AndyBig »

UAVpilot писал(а):Я про мои слова.
А, значит я не так понял :)
UAVpilot писал(а):Ну а хотя-бы с stm32f3 работал?
Нет, только с 100-й серией :)
UAVpilot писал(а):Туда разве что прошивка из проекта pluto-p поместиться, но это уже давно сделано. Там элементов даже на самое простое ядро arm не хватит, а оно для этой задачи понадобится.
Задача же - умножать импульсы STEP? Четыре оси влезут в десятку с огромным запасом, и не нужно никаких ядер :)
Но это я пошутил, разумеется :) Для автора это было бы слишком жестко :)
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

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

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

u37, почитайте эту тему
Цифровой фильтр для коррекции неравномерности импульсов Step #1
Задача давно поставлена, решена и реализована на практике.
Так что на данный момент она представляет интерес разве что в следующих вариантах:
- сделать что-то подобное, но с открытым кодом
- реализовать алгоритм на более дешевой платформе
- просто потренироваться в работе с МК
Чудес не бывает. Бывают фокусы.
Аватара пользователя
ALS
Опытный
Сообщения: 159
Зарегистрирован: 15 ноя 2013, 01:46
Репутация: 161
Откуда: Севастополь
Контактная информация:

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

Сообщение ALS »

Крамольную мысль выскажу.
Чем начинать осваивать новые камни, собирая все шишки и начиная с пресловутого мигания светодиодом, не проще ли взять то, что уже изучено (авр, я так понимаю) и сделать умножитель шагов для _одной_ оси на _одном_ МК.
Код при этом будет одинаковый для всех МК, нужно будет только запаять (подключить в случае с дуней) нужное их количество.
Учитывая их дешевизну, имхо, проще и дешевле будет поставить их, напр., 5 штук для пяти осей, чем пытаться сейчас впихивать все это в одного "монстра".
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

На дуньку2560 код на 4 оси уже готов и ждет приезда самой дуньки. А другой МК взят, т.к. в дуньке достигнут аппаратный потолок и добавить туда какие-то вспомогательные фильтры на вход/выход не выйдет.
u37
Новичок
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj
Контактная информация:

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

Сообщение u37 »

Сергей Саныч, так тож коммерческий проект. Смысла в нём 0. ))
Там используется F1, а значит высокоумных вычислений ждать не приходится. Что до "упрощенной" модели, то всё упрется в PID, который является ... ну, кто имел дело с PID, тот знает. Для subj вполне проходит обычный следящий фильтр - не такой умный, не такой эффективный, но с задачей справляется (IMHO), и не такой капризный в настройке, в отличии от PID.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

AndyBig писал(а):Задача же - умножать импульсы STEP?
А частоту умноженных импульсов ты чем вычислять будешь?..
u37 писал(а):и не такой капризный в настройке, в отличии от PID.
А что там сложного и капризного? Обычная несложная математика...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
u37
Новичок
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj
Контактная информация:

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

Сообщение u37 »

В PID нет ничего сложного, кроме его к-тов P I D.)) А без правильных к-тов PID работает безобразно. Будете прошивать индивидуальные настройки, или сделаете авонастройку? И тут прощай простота.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

А в чём проблема с индивидуальными настройками PID? Всё тоже самое как и с настройками коэф. умножения и т.п., можно eeprom шить, можно через COM задавать...

И вообще не понятно зачем там PID? Вон Степмастер спокойно без него обходится...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
u37
Новичок
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj
Контактная информация:

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

Сообщение u37 »

вообще-то, я и НЕ предлагал PID. ))
Следящий ограничитель проще и устойчивее.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

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

Сообщение AndyBig »

UAVpilot писал(а):А частоту умноженных импульсов ты чем вычислять будешь?..
Модулем вычисления частоты :-D Есть какие-то конкретные трудности с этим? Может быть я что-то недопонял в том что и как надо вычислять?
В EP3C16 влазило два канала перестраиваемого трехступенчатого цифрового фильтра с промежуточными дециматорами (в одной только первой ступени было более 2000 коэффициентов), выделявший из 20-кГц сигнала полосу до 30 Гц. Плюс куча сервисных функций, в том числе полное управление специализированным АЦП (AD6652). Влазил с огромным запасом по ячейкам, под завязку использованы были только умножители и память. Тут что-то сопоставимое по сложности предвидится? :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Нет, тут задачка посложней предвидится...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

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