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

Контроллеры, драйверы, датчики, управляющие устройства.
Олег.
Опытный
Сообщения: 131
Зарегистрирован: 20 ноя 2014, 19:18
Репутация: 14
Контактная информация:

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

Сообщение Олег. »

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

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

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

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

Сообщение MX_Master »

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

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

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

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

В работе, после первого импульса, который был после длительного простоя, выдается через базовое время этот импульс
Представьте, что был всего 1 импульс на входе (:
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

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

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

Сообщение MX_Master »

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

Код: Выделить всё


INPUT  ______________|""|______________________

TIME                 |  X  |

OUTPUT ______________|"|___|"|_________________

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

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

Сообщение Mamont »

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

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

Сообщение MX_Master »

Понятно. Значит надо добавить макс. время ожидания.
tmr
Новичок
Сообщения: 30
Зарегистрирован: 24 июн 2016, 23:09
Репутация: 2
Контактная информация:

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

Сообщение tmr »

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

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

Сообщение MX_Master »

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

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

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

Сообщение Morroc »

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

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

Сообщение MX_Master »

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

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

Сообщение Morroc »

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

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

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

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

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

Сообщение michael-yurov »

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

Я сначала делал по принципу ПИД регулятора, а потом нашелся способ дающий значительно лучший результат (но, блин, не простой для реализации).
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение sidor094 »

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

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

Сообщение tmr »

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

Что касается предсказания импульса - можно использовать sherline mode (1/2 скважности), хотя это не очень честно :)
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

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

Сообщение MX_Master »

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

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

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

Сообщение michael-yurov »

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

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

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

Сообщение MX_Master »

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

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

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

Сообщение michael-yurov »

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

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