Страница 3 из 20

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

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

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

Это я к тому, что задачка с множителем не из простых.

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

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

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

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

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

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

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

Добавлено: 07 дек 2016, 11:14
Serg
sidor094 писал(а):Во всех микросхемах где есть поддержка внешнего озу оно находится в адресном пространстве процессора.
Эти все слова я давно знаю, а документом является файл .ld для этой платы. :)

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

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

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


INPUT  ______________|""|______________________

TIME                 |  X  |

OUTPUT ______________|"|___|"|_________________

Т.к. вывод для всех осей синхронизирован, ждать пока для одной оси придёт второй шаг для расчётов - как-то неправильно.

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

Добавлено: 07 дек 2016, 12:06
Mamont
После первого импульса через базовое время пуляется второй. Базовое время прописано в константах, в епроме.
После первого импульса обнуляется таймер. Если произошло переполнение таймера, а второго импульса нет, считается что следующий импульс тоже первый. Иначе время таймера делится пополам и после второго импульса посылается через это время
А базовое время будеш периодически кооректировать: после первого импульса с длительным простоем по всем осям. Определишь время до второго. Если оно меньше чем прописано в константах, перезапишиваешь. Главное что плата компа но пьяни не выдала импульсов с места в карьер, которые пропишутся в константы умножителя

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

Добавлено: 07 дек 2016, 12:30
MX_Master
Понятно. Значит надо добавить макс. время ожидания.

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

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

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

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

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

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

Добавлено: 08 дек 2016, 10:17
Morroc
Учитывая цену всяких микроардуин может проще взять по ардуине на ось ? И места займет тоже немного.

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

Добавлено: 08 дек 2016, 10:57
MX_Master
Morroc писал(а):Учитывая цену всяких микроардуин может проще взять по ардуине на ось ? И места займет тоже немного.
С большой вероятностью получится разсинхрон. У нас все оси играют в команде и наш фильтр должен за этим внимательно следить, а иначе кто-то убежит вперед, а кто-то отстанет.

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

Добавлено: 08 дек 2016, 12:30
Morroc
Так ли это важно внутри заданного интервала ? А от фронта исходных сигналов все равно далеко не разбегутся. Ну вот разве что ситуации типа "последнего импульса" - тут непонятно.

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

Добавлено: 08 дек 2016, 12:37
Сергей Саныч
MX_Master писал(а):С большой вероятностью получится разсинхрон.
У Степмастера два независимых МК обслуживают 4 оси и сколько-нибудь заметного рассинхрона не наблюдается. Хотя там алгоритмы гораздо сложнее, чем пока обсуждавшиеся в этой теме.

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

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

Я сначала делал по принципу ПИД регулятора, а потом нашелся способ дающий значительно лучший результат (но, блин, не простой для реализации).

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

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

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

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

Что касается предсказания импульса - можно использовать sherline mode (1/2 скважности), хотя это не очень честно :)

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

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

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

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

Завтра доделаю вариант с равномерным распределением умноженных STEP/DIR на выходе. Но опять-таки, надо всё тестировать вживую и на разных контроллерах, желательно. А мой наборчик юного МКшника, видимо, надолго застрял в Китае. Может, чтоб не терять время, надо заказать какую-ньть макетку на Кортексе М3 или М4? Заодно подучиться АРМу (:

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

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

К слову, умножение частоты в СтепМастере - это так, побочная возможность.
Просто потому что легко было добавить ее к функционалу. А штука вполне полезная.

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

Добавлено: 08 дек 2016, 17:10
MX_Master
А, кстати, на каком МК у пуриков сделано? На фотках не видно ничего, разве что примерно.

Я, кстати, безпаяльниковый вариант делаю - только прошивка для конкретной макетки.

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

Добавлено: 08 дек 2016, 17:58
michael-yurov
MX_Master писал(а):А, кстати, на каком МК у пуриков сделано? На фотках не видно ничего, разве что примерно.
Пурики, наверное, затирают маркировку.