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

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

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

Сообщение Олег. » 07 дек 2016, 10:20

Ещё проблема есть, DIR придётся тоже обрабатывать, иначе при реверсе возможны ошибки.
Поломать голову придётся, чтобы множитель сочинить.

В сервоприводах этот множитель фактически присутствует, и работает с некоторой задержкой.
пришлось немного поработать с недоприводом от Festo, входной сигнал менее 30 кГц. ( были причины)
Если фильтр на входной сигнал маловат, привод вибрирует, если великоват, движение плавное, но пролетает позицию и после остановки поправляется на несколько мм.
Другой случай, один из заказчиков ставил этот привод для перемещения ножа и реза в движении, синхронизация по энкодеру на материале. Более менее нормальный результат получился когда энкодер подобрали на 100500 импульсов, под привычный на 1000 импульсов не смогли настроить привод.

Это я к тому, что задачка с множителем не из простых.
Олег.
Опытный
 
Сообщения: 122
Зарегистрирован: 20 ноя 2014, 19:18
Репутация: 13

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

Сообщение MX_Master » 07 дек 2016, 11:00

Олег. писал(а):Ещё проблема есть, DIR придётся тоже обрабатывать, иначе при реверсе возможны ошибки.
Поломать голову придётся, чтобы множитель сочинить.

DIR синхронизируется со STEP, тут пока что проблем нет


Andrey@KZN писал(а):Так на картинке все вторые импульсы выдаются до прихода следующего шага.

Это для наглядности, на самом деле OUTPUT выполняется позднее, как только все для подсчета получено и обработано. Т.е. как минимум после очередного фронта.


Mamont писал(а):С предыдущего импульса отсчитывается период, делится надвое. После прихода нового импульса, он выдается, а через половинку предыдущего импульса выдается промежуточный.

Вот мы как раз и рассматриваем случай, когда нового импульса нет


Mamont писал(а):Надо сделать автоопределение длительности первого импульса, определяется прогой, ее стартовой скоростью и ускорением. После включения питания (или длительного простоя без импульсов) длительность между первым и вторым делится надвое и принимается за базовую. Если она меньше чем находится в памяти, она корректируется. Больше - игнорируется

В работе, после первого импульса, который был после длительного простоя, выдается через базовое время этот импульс

Представьте, что был всего 1 импульс на входе (:
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

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

Сообщение UAVpilot » 07 дек 2016, 11:14

sidor094 писал(а):Во всех микросхемах где есть поддержка внешнего озу оно находится в адресном пространстве процессора.

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

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

Сообщение MX_Master » 07 дек 2016, 11:37

Задумался над тем, что будет, если на входе получен всего 1 шаг.. Каким же должен быть период (Х) для выхода? И когда надо начинать подавать эти 2 шага на выход? Какая-то максимальная задержка ожидания входного шага должна быть?

Код: Выделить всёРазвернуть

INPUT  ______________|""|______________________

TIME                 |  X  |

OUTPUT ______________|"|___|"|_________________


Т.к. вывод для всех осей синхронизирован, ждать пока для одной оси придёт второй шаг для расчётов - как-то неправильно.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

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

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

После первого импульса через базовое время пуляется второй. Базовое время прописано в константах, в епроме.
После первого импульса обнуляется таймер. Если произошло переполнение таймера, а второго импульса нет, считается что следующий импульс тоже первый. Иначе время таймера делится пополам и после второго импульса посылается через это время
А базовое время будеш периодически кооректировать: после первого импульса с длительным простоем по всем осям. Определишь время до второго. Если оно меньше чем прописано в константах, перезапишиваешь. Главное что плата компа но пьяни не выдала импульсов с места в карьер, которые пропишутся в константы умножителя
Аватара пользователя
Mamont
Мастер
 
Сообщения: 490
Зарегистрирован: 10 дек 2015, 12:21
Откуда: РБ Минск
Репутация: 60
Настоящее имя: Виталий

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

Сообщение MX_Master » 07 дек 2016, 12:30

Понятно. Значит надо добавить макс. время ожидания.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

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

Сообщение tmr » 07 дек 2016, 18:24

Я пробовал реализовать умножитель на меге (честный - пропорциональный), но уперся в производительность (слишком затратная операция деления для четырех осей, даже битовый сдвиг) и объем памяти (не хватает памяти для хранения таймеров в буфере, накапливается при долгих разгонах). Заказывал дуе для решения этих проблем, но пока он шел - обзавелся контроллером на 100кГц, т.ч. проблема отпала. Вот последний сохранившийся код, но там были ошибки, я уже не помню в чем, я его еще неделю с тех пор отлаживал пока не забросил.
tmr
Новичок
 
Сообщения: 30
Зарегистрирован: 24 июн 2016, 23:09
Репутация: 2

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

Сообщение MX_Master » 07 дек 2016, 21:35

tmr писал(а):Я пробовал реализовать умножитель на меге (честный - пропорциональный), но уперся в производительность (слишком затратная операция деления для четырех осей, даже битовый сдвиг) и объем памяти (не хватает памяти для хранения таймеров в буфере, накапливается при долгих разгонах). Заказывал дуе для решения этих проблем, но пока он шел - обзавелся контроллером на 100кГц, т.ч. проблема отпала. Вот последний сохранившийся код, но там были ошибки, я уже не помню в чем, я его еще неделю с тех пор отлаживал пока не забросил.

Я с вашего кода и начинал изучать сей вопрос (: У вас там получился тестовый вариант на 1 STEP вход. Но раз уж вывод в любом случае будет буферизированный, то надо синхронно отслеживать оба входа - и STEP, и DIR. Ну а раз уж каждый порт по 8 пинов, аккурат хватает на 4 оси. Можно и больше.

Я использую только 1 таймер и настроил его так, чтобы функционал отслежки запускался с частотой 200 КГц (каждые 5 мкс), а механизм вывода пахал на 1 МГц (каждые 1 мкс). Т.е. желательно при выводе не превышать 16 тактов, а при отслежке 80. Пока что укладываюсь. Но я еще в живую не пробовал, там может все обернутся иначе.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

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

Сообщение Morroc » 08 дек 2016, 10:17

Учитывая цену всяких микроардуин может проще взять по ардуине на ось ? И места займет тоже немного.
Morroc
Мастер
 
Сообщения: 201
Зарегистрирован: 22 ноя 2015, 03:17
Репутация: 22
Настоящее имя: Александр

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

Сообщение MX_Master » 08 дек 2016, 10:57

Morroc писал(а):Учитывая цену всяких микроардуин может проще взять по ардуине на ось ? И места займет тоже немного.

С большой вероятностью получится разсинхрон. У нас все оси играют в команде и наш фильтр должен за этим внимательно следить, а иначе кто-то убежит вперед, а кто-то отстанет.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

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

Сообщение Morroc » 08 дек 2016, 12:30

Так ли это важно внутри заданного интервала ? А от фронта исходных сигналов все равно далеко не разбегутся. Ну вот разве что ситуации типа "последнего импульса" - тут непонятно.
Morroc
Мастер
 
Сообщения: 201
Зарегистрирован: 22 ноя 2015, 03:17
Репутация: 22
Настоящее имя: Александр

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

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

MX_Master писал(а):С большой вероятностью получится разсинхрон.
У Степмастера два независимых МК обслуживают 4 оси и сколько-нибудь заметного рассинхрона не наблюдается. Хотя там алгоритмы гораздо сложнее, чем пока обсуждавшиеся в этой теме.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 7980
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 2484
Медальки:

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

Сообщение michael-yurov » 08 дек 2016, 13:11

Там что-то вроде фильтра низкой частоты второго-третьего порядка (действующего преимущественно на ускорение и на его производную).
В аудиоусилителе в аудиотракте ведь рассинхрона нет, хотя и работают каналы отдельно друг от друга.
Ну и реакция на изменение входящего сигнала в степмастере мгновенная без буферов / задержек.
Небольшое отставание выходных импульсов по сравнению с входными есть, но это неправильно было бы назвать задержкой.
Но требуется одинаковая настройка для всех осей.

Я сначала делал по принципу ПИД регулятора, а потом нашелся способ дающий значительно лучший результат (но, блин, не простой для реализации).
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 10536
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 4082
Медальки:
Настоящее имя: Михаил Львович

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

Сообщение sidor094 » 08 дек 2016, 13:30

MX_Master писал(а):С большой вероятностью получится разсинхрон. У нас все оси играют в команде и наш фильтр должен за этим внимательно следить, а иначе кто-то убежит вперед, а кто-то отстанет.
Рассинхронизация будет как у всех обычных приводов.В пределах настройки каждого канала.То есть при одинаковой настройке рассинхронизации не будет.А при неодинаковой будет наблюдаться небольшая разница при движении.Но накапливаться она не будет.Так как при увеличении рассогласования будет увеличивться и скорость выдачи импульсов.Вообще то можно сделать как в приводах Чем больше отставание ,тем выше частота выдачи импульсов.Я делал программу управляющую шаговым приводом с обратной связью по энкодеру.Работающую по такому принципу.Без задержек же такое управление осуществить очень сложно.Так как предсказать поведение системы чпу не возможно.
sidor094
Мастер
 
Сообщения: 300
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 34

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

Сообщение tmr » 08 дек 2016, 13:38

Я бы еще добавил, что касается умножения частоты, то нельзя сказать что "там алгоритмы гораздо сложнее". Всё-таки АПЧ у степмастера это совсем простой алгоритм, в отличии от буферизации.

Что касается предсказания импульса - можно использовать sherline mode (1/2 скважности), хотя это не очень честно :)
tmr
Новичок
 
Сообщения: 30
Зарегистрирован: 24 июн 2016, 23:09
Репутация: 2

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

Сообщение michael-yurov » 08 дек 2016, 13:49

tmr писал(а):Я бы еще добавил, что касается умножения частоты, то нельзя сказать что "там алгоритмы гораздо сложнее". Всё-таки АПЧ у степмастера это совсем простой алгоритм, в отличии от буферизации.

Да, ладно, Сергей Саныч просто немного польстил мне.
Но АПЧ был первоначально. Сейчас по другому.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 10536
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 4082
Медальки:
Настоящее имя: Михаил Львович

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

Сообщение MX_Master » 08 дек 2016, 16:59

Я не думаю, что Михаил будет доволен, если мы сделаем бесплатный аналог степмастера (: Поэтому я делаю заведомо хуже и на одном недорогом МК.

Завтра доделаю вариант с равномерным распределением умноженных STEP/DIR на выходе. Но опять-таки, надо всё тестировать вживую и на разных контроллерах, желательно. А мой наборчик юного МКшника, видимо, надолго застрял в Китае. Может, чтоб не терять время, надо заказать какую-ньть макетку на Кортексе М3 или М4? Заодно подучиться АРМу (:
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

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

Сообщение michael-yurov » 08 дек 2016, 17:06

У меня покупатели найдутся. Тут не переживай.
Пурики вот сделали, и мне кажется это скорее плюс для меня, чем проблема.
Кто захочет повозиться с паяльником и сделать своими руками - повторит твой проект. А кому работать - купит у меня.

К слову, умножение частоты в СтепМастере - это так, побочная возможность.
Просто потому что легко было добавить ее к функционалу. А штука вполне полезная.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 10536
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 4082
Медальки:
Настоящее имя: Михаил Львович

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

Сообщение MX_Master » 08 дек 2016, 17:10

А, кстати, на каком МК у пуриков сделано? На фотках не видно ничего, разве что примерно.

Я, кстати, безпаяльниковый вариант делаю - только прошивка для конкретной макетки.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

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

Сообщение michael-yurov » 08 дек 2016, 17:58

MX_Master писал(а):А, кстати, на каком МК у пуриков сделано? На фотках не видно ничего, разве что примерно.

Пурики, наверное, затирают маркировку.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 10536
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 4082
Медальки:
Настоящее имя: Михаил Львович

Пред.След.

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

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

Зарегистрированные пользователи: alexxx666, Bing [Bot], Google [Bot], Google Feedfetcher, john1987887, Majestic-12 [Bot], Q-starь, Rom327, Yandex [bot], Канатекс

Поделиться

Reputation System ©'