UART генератор импульсов

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

UART генератор импульсов

Сообщение Mamont »

А чтоб не скучно было зимой, задумал сделать генератор импульсов.
Данные поступают с компа по медленному UART (более чем достаточно скорости 115200), буфферизируются, делятся и выдуваются с помощью микроконтроллера в реальном масштабе времени.
Траекторию движения и ускорения рассчитывает комп, квантует отрезками по ~2 мс. Собирает в пакеты по 16 отрезков и закидывает в порт. Пакеты естественно пронумерованы и с контрольной суммой.

Контроллер дробит 2мс отрезок на 2(4), чтобы при ускорениях скорость изменялась поплавнее. С помощью своих таймеров достаточно точно отсчитывает временные отрезки.
Максимальная выходная частота импульсов до 64000/с, количество осей - 4 (потому что в выбранном контроллере только 5 таймеров).
Количество импульсов на отрезок предполагается не целое. Не будет такого что будут закидываться [-2-2-2-3-2-2-3-2-2-3-] , а будет 2_77/256 = 2,30078125 при теоретически требуемых 2.3

Очевидно что потребуется еще и программа для ПК, раскуривающая G коды и строящая траекторию. Сделаем и ее.

Выход сигналов с контроллера Step-dir или CW-CCW (мне он больше нравится), аппаратные входы в контролер - ептег, 4-хоума, общий лимит. После срабатывания ептега сразу все останавливается, сбросить состояние аварии через команду от компа. Хоумы и лимиты при подтверждении пакета передаются в ПК.
Контролер 16-битный PIC (нужна не битность, а чтоб таймеров было много)


Где апаратный RS-232, там и логический USB-UART. Т.е. можно в качестве панели задействовать планшет
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: UART генератор импульсов

Сообщение aftaev »

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

Re: UART генератор импульсов

Сообщение Mamont »

aftaev писал(а):Еще один PlanetCNC наметился :)
А мы сделаем свой Планет, с Блекджеком и Блэкшлюхами :hehehe:
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: UART генератор импульсов

Сообщение Duhas »

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

Re: UART генератор импульсов

Сообщение Mamont »

Е_стоп=ептег= ѣѣ (дабл "ять")
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: UART генератор импульсов

Сообщение Duhas »

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

Re: UART генератор импульсов

Сообщение AndyBig »

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

Re: UART генератор импульсов

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

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

Re: UART генератор импульсов

Сообщение Mamont »

AndyBig писал(а):
Mamont писал(а):Очевидно что потребуется еще и программа для ПК, раскуривающая G коды и строящая траекторию. Сделаем и ее.
Может быть проще сделать плагин к Мачу? :)
После некоторого знакомства с Мачой, такая теоритическая возможность прорисовалась: считывать координаты с DRO осей, разницу посчитать, сформировать пакет в удобоваримом формате, переслать по сериал-порту и отправить в паузу на 1...2мс.
Генератор пауз можно и внешний сделать, контроллер будет дергать пины, а пауза зацикливается пока пин не изменится.

Загвоздка в том, что Мач, когда занят обработкой траектории, не охотно обновляет данные в DRO, вроде раз в 5-10мс

Плугин я делал в виде программы на VB на кнопку.. т.е. кнопку нажали и прога начала выполнятся, работает в бесконечном цикле

Для мач имеет намного больший смысл для ЛПТ сделать фильтратор-разглаживатель импульсов. Но сам Мач далек от совершенства в плане надежности, уже пару раз зависал, одну заготовку испортил, когда поехал по странной траектории (после чего несколько раз прогонял по воздуху с той же УП, все нормально)
Последний раз редактировалось Mamont 07 дек 2016, 16:03, всего редактировалось 1 раз.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: UART генератор импульсов

Сообщение AndyBig »

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

Re: UART генератор импульсов

Сообщение Mamont »

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

Re: UART генератор импульсов

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

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

Re: UART генератор импульсов

Сообщение Mamont »

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

Re: UART генератор импульсов

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

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

Re: UART генератор импульсов

Сообщение AndyBig »

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

Re: UART генератор импульсов

Сообщение Mamont »

Вообщем математика вырисовывается такая:

Допустим надо сделать на данный квант времени (1мс) 4.7 импульса. Остаток с предыдущего кванта 0.8 импульса
(имеем в своем распоряжении пять 16-битных таймеров, которые с ядром работают на 32мгц)
В регистр автоперезагрузки таймера записываем 65535 - 32000/4.7 = 58726.
А в стартовое значение таймера = 65535-32000/4.7*(1-0.8) = 64173
Если в данный квант времени должно выполнится меньше одного шага, допустим 0.5 (т.е. ниодного полного), в таймер записывается 0. И прерывание от этого таймера не вызовется в этом кванте


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

Re: UART генератор импульсов

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

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

Re: UART генератор импульсов

Сообщение Mamont »

Мач точно не испльзует алгоритм Брезентхейма. Для шаговых двигателей он не покатит. Насколько я понял с педивикии, для рисования отрезков используется ведущая переменная (с наибольшей дельтой и ведомая).
Изменение ведущей происходит кратно интервалу времени, а ведомой - по мере накопления ошибки, но синхронно с ведущей:
_____Х_____Х_____Х_____Х_____Х_____Х_____Х_____Х_____Х_____Х_____Х_____Х_____Х_____Х
_____Х_____Х_____Х___________Х_____Х_____Х___________Х_____Х___________Х_____Х_____Х
3-3-2-3... такие неравномерности движения прокатят для шаговых движков только на невысоких скоростях. Когда требуется постоении линии близкой к 45 градусов на предельных скоростях, ведомая ось застопорится.

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

Re: UART генератор импульсов

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

Mamont писал(а):Мач точно не испльзует алгоритм Брезентхейма.
Про mach3 - не знаю. А контроллеры - очень даже используют.
Mamont писал(а):такие неравномерности движения прокатят для шаговых движков только на невысоких скоростях.
+/- 0,5 шага не смертельны.
Mamont писал(а):ведомая ось застопорится.
Ну, во первых - с чего бы?
А во вторых - речь не про "ведомую" и "ведущую" ось, а про несущую частоту и генерацию шагов при накоплении ошибки более 1 (0,5) шага.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: UART генератор импульсов

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

Модификаций алгоритма Брезенхема много. Не знаю, как в Маче, а в LCNC он активно применяется как в аппаратных, так и в программных реализациях шагогенераторов. Нет там понятия "ведущей" и ведомой" осей, тем более, что осей там может быть до 9 и более. Используется он для генерации частот. Заметная неравномерность импульсов появляется только на частотах, близких к базовой (для программных реализаций на PC - десятки кГц, для реализаций на МК и ПМЛ - сотни кГц и выше). При работе с микрошагом такая неравномерность совершенно не заметна.
Чудес не бывает. Бывают фокусы.
Ответить

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