Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обработчик сигнала от инкрементого энкодера
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
Pasha 111
Есть инкрементный энкодер (каналы А и Б). Делал проект для управления 2-мя двигателями на проце AT91SAM7S64 (ARM, 48 MHz). Прерывание ставил только на изменение канала А. В итоге проц мог обрабатывать 2 энкодера с общей частотой вызовов прерываний около 200 КГц. Реально частота при работе ниже, но в нормальном режиме загруженность проца доходила до 70% только при обратобке энкодеров.

Сейчас датчиков уже 4. Соответственно процессор уже не справится. Существуют ли аппаратные счётчики энкодеров в виде отдельного устройства, подключаемого к процу по последовательному нтерфейсу?

Искал решения на этом форуме - встречал темы, где частоты были менее 10 КГц, там всё решалось программно. Поставить ПЛИС или DSP (например от TI - TMS320F2801 - там встроенный аппаратный счётчик есть) не могу, так как дела с ними раньше не имел, а на изучение нет времени.

Буду очень рад любому совету!
Stas
Я делал в ПЛИС блок из 3 и 2 энкодеров. Был случай сигнал дребезжал - проявилялось как набор координаты от вибрации - сделал логическую обработку сигнала энкодера в ПЛИС. А на процессоре такие штуки вряд ли можно делать... Видимо проще убить неделю и сделать энкодер с интерфейсом в простенькой ПЛИС типа MAX3000, MAXII или заказать на сторону wink.gif
Евгений Германович
Цитата(Pasha 111 @ Jul 6 2008, 02:30) *
Есть инкрементный энкодер (каналы А и Б). Делал проект для управления 2-мя двигателями на проце AT91SAM7S64 (ARM, 48 MHz). Прерывание ставил только на изменение канала А. В итоге проц мог обрабатывать 2 энкодера с общей частотой вызовов прерываний около 200 КГц. Реально частота при работе ниже, но в нормальном режиме загруженность проца доходила до 70% только при обратобке энкодеров.

Сейчас датчиков уже 4. Соответственно процессор уже не справится. Существуют ли аппаратные счётчики энкодеров в виде отдельного устройства, подключаемого к процу по последовательному нтерфейсу?

Искал решения на этом форуме - встречал темы, где частоты были менее 10 КГц, там всё решалось программно. Поставить ПЛИС или DSP (например от TI - TMS320F2801 - там встроенный аппаратный счётчик есть) не могу, так как дела с ними раньше не имел, а на изучение нет времени.

Буду очень рад любому совету!

А зачем вам аппаратные?Сделайте проект на нескольких процессорах.Проц на 1 или 2 датчика и по последовательным каналам к вашему основному процу smile.gif
slog
Программная обработка энкодера годится если у процессора есть ресурсы чтобы обрабатывать примерно раз в 20 большие частоты чем частота при максимальной скорости вращения энкодера. Или если допустимы пропуски единичных импульсов. В остальных случаях квадратурный декодер и счётчик должен быт аппаратный. Есть варианты - в процессорах заточенных под электропривод он есть внутри. Есть и специальные микросхемы например у Agilent, но дорогие и не особо доступные. Или проще всего сделать это например на CPLD MAXII. Примеры квадратурных счётчиков есть например у Atmel и Xilinx. Это не сложная и очень полезная задача.
stells
Цитата(Евгений Германович @ Jul 6 2008, 07:54) *
А зачем вам аппаратные?Сделайте проект на нескольких процессорах.Проц на 1 или 2 датчика и по последовательным каналам к вашему основному процу smile.gif

ну да... на каждый энкодер по простенькому контроллеру типа tiny (с дребезгом легко разберетесь) и последовательный канал (I2C) на основной процессор
Евгений Германович
Цитата(stells @ Jul 6 2008, 09:47) *
ну да... на каждый энкодер по простенькому контроллеру типа tiny (с дребезгом легко разберетесь) и последовательный канал (I2C) на основной процессор

именно так
Axel
Цитата(Pasha 111 @ Jul 6 2008, 03:30) *
Поставить ПЛИС или DSP (например от TI - TMS320F2801 - там встроенный аппаратный счётчик есть) не могу, так как дела с ними раньше не имел, а на изучение нет времени.

Буду очень рад любому совету!


Надежный вариант (ИМХО) - только аппаратный. Освоение работы с ПЛИС ("МАХ+" + изготовление байтбластера) - задача нескольких дней. А вообще ситуация до боли знакомая - я сам впервые приобщился к PLD в такой же ситуации с точно такой же задачей.
stells
Цитата(Axel @ Jul 6 2008, 14:17) *
Надежный вариант (ИМХО) - только аппаратный. Освоение работы с ПЛИС ("МАХ+" + изготовление байтбластера) - задача нескольких дней. А вообще ситуация до боли знакомая - я сам впервые приобщился к PLD в такой же ситуации с точно такой же задачей.

это из каких соображений вы утверждаете, что надежный вариант только аппаратный? аппаратный вариант становится лучше только тогда, когда программному быстродействия не хвататет или жесткая синхронизация нужна... больше никаких плюсов нет...
Pasha 111
Спасибо за ответы.

В общем, как я вижу, есть 2 варианта: либо ставить что-то вроде EPM3032A (PLD, 35 рублей), либо, например, ATMega48 (27 рублей). Последняя имеет частоту 20 МГц и все интерфейсы (uart, spi и т.д.).

А что с EPM3032A? Кто мне расскажет, что такое Usable Gates и Macrocells? smile.gif Я просто боюсь, что из-за ошибки готовое спаянное устройство не заработает (а вот с мегой-то всё ясно). И как, кстати, этот pld соединять с процессором? Сколько энкодеров потянет одна такая микросхема, если нужно обрабатывать каналы А и Б с частотой 100 КГц каждый? И потянет ли вообще?
Axel
Цитата(stells @ Jul 6 2008, 16:48) *
это из каких соображений вы утверждаете, что надежный вариант только аппаратный? аппаратный вариант становится лучше только тогда, когда программному быстродействия не хвататет или жесткая синхронизация нужна... больше никаких плюсов нет...


Из тех соображений, что быстродействием можно гарантированно решить проблемы только на стендах. А в реальных механизмах - с вибрациями и неидеальными приводами, с программной реализацией проблемы гораздо вероятней.
stells
Цитата(Axel @ Jul 6 2008, 19:00) *
Из тех соображений, что быстродействием можно гарантированно решить проблемы только на стендах. А в реальных механизмах - с вибрациями и неидеальными приводами, с программной реализацией проблемы гораздо вероятней.

это как? счетчик на ПЛИС в условиях вибраций надежнее программного? интересно...
Pasha 111
У меня (см. мой 1-й пост) всё вроде работало smile.gif может я конечно что-то не замечал, но ПИД регулятор замечательно работал и всё нормально двигалось, как и было задумано.

В конце концов, при частоте 100 КГц +/- пару тактов в подсчётах не принципиальны. БОльшую погрешность вносит то, что ШИМ имеет 2000 градаций "всего" при частоте 24 КГц smile.gif

Вспомнил, у меня по расчётамполучалось, что один такт энкодера - это где-то около 2 мкм =) хотя люфт можно было тактильно ощутить, если колёсико в руку взять и попробовать пошевелить...
Axel
Цитата(stells @ Jul 6 2008, 19:15) *
это как? счетчик на ПЛИС в условиях вибраций надежнее программного? интересно...


Эти утверждения основаны на личном опыте - в далекие 90-е годы я сделал около десятка проектов с инкрементальными датчиками (20 MHz Microchip'ы тогда тоже были известны - и любимы).
slog
Цитата(Pasha 111 @ Jul 6 2008, 18:01) *
В общем, как я вижу, есть 2 варианта: либо ставить что-то вроде EPM3032A (PLD, 35 рублей), либо, например, ATMega48 (27 рублей). Последняя имеет частоту 20 МГц и все интерфейсы (uart, spi и т.д.).

А что с EPM3032A? Кто мне расскажет, что такое Usable Gates и Macrocells? smile.gif Я просто боюсь, что из-за ошибки готовое спаянное устройство не заработает (а вот с мегой-то всё ясно). И как, кстати, этот pld соединять с процессором? Сколько энкодеров потянет одна такая микросхема, если нужно обрабатывать каналы А и Б с частотой 100 КГц каждый? И потянет ли вообще?


В EPM3032A всего 32 триггера, (это и есть Usable Gates и Macrocells). Если надо счётчик разрядов на 16 то уже не влезет. Я бы взял EPM240, это уже более современная вещь. В неё влезет примерно десяток полноценных декодеров со счётчиками, в зависимости от требуемой разрядности. С частотой проблем нет, ПЛИС работают и на сотнях мегагерц. К процу удобно подключить по SPI на максимальной скорости, хотя можно и 8-ми разрядную шину сделать. Я уже говорил где есть готовые примеры декодеров. Там все по настоящему, цифровой фильтр на входе, потом правильный декодер, который и пропущенные импульсы обнаруживает, далее реверсивный счётчик, дальше интерфейс к процу.

Аппаратное решение все таки единственный правильный способ, если недопустимы пропуски импульсов, как например в системах позиционирования.
_Sam_
Цитата
это как? счетчик на ПЛИС в условиях вибраций надежнее программного? интересно...

У любого инкрементного преобразователя одна из характеристик - минимальное время между двумя ближайшими фронтами. И какие бы вибрации не были, это время не будет меньше! Макс. выходная частота может достигать нескольких МГц. Соотвественно, чтобы не было пропусков и насчётов, опрос должен производится как минимум с удвоенной частотой и поэтому использовать для этих целей контроллер без аппаратного модуля обработки квадратурных сигналов не совсем целесообразно! Кстати наиболее распространнёная ошибка - скорости небольшие, поэтому такой частоты быть не может. На самом деле может, если преобразователь остановится на границе дискреты, тогда любая вибрация, приведёт к "дребезгу".
Естественно всё это относится к магнитным и оптическим преобразователям, которые насколько я понял и использует Pasha 111
Есть ещё контактные датчики, которые ставят например в автомагнитолы, цифровые осцилографы и т.д. - это совсем другое дело, совсем другой дребезг и совсем другие частоты.

Цитата
всё нормально двигалось, как и было задумано.

Возможно, однако если вы делаете позиционную систему, как только вы поставите её на станок вам сразу выкатят притензии.

Цитата
хотя люфт можно было тактильно ощутить, если колёсико в руку взять и попробовать пошевелить...
Что это за колёсико? smile.gif

Может хоть тип своего датчика укажите для ясности?
evgeny_ch
32-BIT QUADRATURE COUNTER WITH SERIAL INTERFACE
stells
1.если преобразователь остановится на границе дискреты, то и цифровой фильтр не поможет - частота дребезга будет определяться частотой вибрации... и какая она будет?
2.энкодер наверняка не контактный, контактный на 100кГц в принципе работать не должен
3.для подавления дребезга любого контактора нужно знать параметры этого дребезга, а если они известны, то неважно, как вы сделаете эту фильтрацию, программно или аппаратно
evgeny_ch
Цитата(stells @ Jul 7 2008, 10:32) *
1.если преобразователь остановится на границе дискреты, то и цифровой фильтр не поможет - частота дребезга будет определяться частотой вибрации... и какая она будет?
2.энкодер наверняка не контактный, контактный на 100кГц в принципе работать не должен
3.для подавления дребезга любого контактора нужно знать параметры этого дребезга, а если они известны, то неважно, как вы сделаете эту фильтрацию, программно или аппаратно

В энкодерах имеется несимметрия каналов.
Аппаратные счётчики работают по фронтам импульсов и могут быть с достаточной точностью привязаны к синхрочастоте.
В случае "интерполяции" сигнала энкодера "дребезжит" направление, что очень хорошо заводит привод, а это добавляет "вибраций".
stells
Цитата(evgeny_ch @ Jul 7 2008, 11:40) *
В случае "интерполяции" сигнала энкодера "дребезжит" направление, что очень хорошо заводит привод, а это добавляет "вибраций".

ну а это уж тем более проще программно решить
evgeny_ch
Цитата(stells @ Jul 7 2008, 10:57) *
ну а это уж тем более проще программно решить

В случае фильтрации вы потеряете в быстродействии. Привод будет перемещаться очень торжественно.
Можно сказать как в трауре.
stells
Цитата(evgeny_ch @ Jul 7 2008, 12:06) *
В случае фильтрации вы потеряете в быстродействии. Привод будет перемещаться очень торжественно.
Можно сказать как в трауре.

вот те раз! интересно, как он у него сейчас вообще работает?
о программной фильтрации речь не идет, я имею ввиду обычный метод подавления дребезга, в том числе и дребезга направления... а вот аппаратное решение как раз и может привести к тому, что привод "заведется" при дребезге направления...
в общем, мне почему-то кажется, что проблем только автор наживет, если посмотрит в сторону применения ПЛИС... я не говорю о том, что это вообще неправильно, но проблем будет гораздо больше... а при применении контроллеров (скорее всего не одного, а по одному на каждый энкодер, зато простому) все понятно, прогнозируемо и поддается оперативному изменению в процессе отладки
evgeny_ch
Цитата(stells @ Jul 7 2008, 11:24) *
вот те раз! интересно, как он у него сейчас вообще работает?
о программной фильтрации речь не идет, я имею ввиду обычный метод подавления дребезга, в том числе и дребезга направления... а вот аппаратное решение как раз и может привести к тому, что привод "заведется" при дребезге направления...
в общем, мне почему-то кажется, что проблем только автор наживет, если посмотрит в сторону применения ПЛИС... я не говорю о том, что это вообще неправильно, но проблем будет гораздо больше... а при применении контроллеров (скорее всего не одного, а по одному на каждый энкодер, зато простому) все понятно, прогнозируемо и поддается оперативному изменению в процессе отладки

Согласен, если частота дискретизации на порядок выше частоты следования импульсов энкодера.
stells
Цитата(evgeny_ch @ Jul 7 2008, 12:27) *
Согласен, если частота дискретизации на порядок выше частоты следования импульсов энкодера.

думается, что даже при использовании встроенного RC-генератора с частотой 8МГц (будем иметь 80 команд при максимальной частоте сигнала энкодера), скорости контроллера хватит, чтобы провести простые операции обработки сигнала энкодера, проинкрементировать счетчик и отдать его значение на центральный процессор (я так понимаю, что это нечасто надо делать)
evgeny_ch
Цитата(stells @ Jul 7 2008, 11:35) *
думается, что даже при использовании встроенного RC-генератора с частотой 8МГц (будем иметь 80 команд при максимальной частоте сигнала энкодера), скорости контроллера хватит, чтобы провести простые операции обработки сигнала энкодера, проинкрементировать счетчик и отдать его значение на центральный процессор (я так понимаю, что это нечасто надо делать)

Добавьте интерполяцию.
stells
Цитата(evgeny_ch @ Jul 7 2008, 12:58) *
Добавьте интерполяцию.

это понятно... решаемая задача, если аккуратно написать обработку
evgeny_ch
Цитата(stells @ Jul 7 2008, 12:35) *
это понятно... решаемая задача, если аккуратно написать обработку

А теперь представьте, что ваш электродвигатель работает в режиме автокоммутации от энкодера, т. е. любое запаздывание коммутации ведет в потере момента, и как следствие, к потере синхронизации на больших частотах.
_Sam_
Цитата
1.если преобразователь остановится на границе дискреты, то и цифровой фильтр не поможет - частота дребезга будет определяться частотой вибрации... и какая она будет?

Я же писал уже. Частота будет не более той, которая указана в параметре преобразователя. При опросе квадратурных сигналов с частотой хотя бы в два раза меньше погрешность считанной с преобразователя информации станет +- [фиг знает сколько]smile.gif.


Цитата
для подавления дребезга любого контактора нужно знать параметры этого дребезга, а если они известны, то неважно, как вы сделаете эту фильтрацию, программно или аппаратно

Правильно, но в оптических и магнитных преобразователя нет дребезга, подобного механическому!


Цитата
32-BIT QUADRATURE COUNTER WITH SERIAL INTERFACE

Оно как бы есть, но его как бы нетsmile.gif То бишь купить эту цацу затруднительно + на неё ещё clk надо заводить, а если их 4 штуки ставить, то и места они займут нормально + ценник на них чувствую будет неадекватен.

Кстати можно взять преобразователь с SSI, тогда все проблемы самоустронятся.
evgeny_ch
Цитата(_Sam_ @ Jul 7 2008, 12:49) *
...
Оно как бы есть, но его как бы нетsmile.gif То бишь купить эту цацу затруднительно + на неё ещё clk надо заводить, а если их 4 штуки ставить, то и места они займут нормально + ценник на них чувствую будет неадекватен.

Кстати можно взять преобразователь с SSI, тогда все проблемы самоустронятся.

В Петербурге СКБ ИС работает с такого типа схемами, (как правильно заметили, заказные) если хорошо попросить, то возможно дадут.
stells
Цитата(evgeny_ch @ Jul 7 2008, 13:46) *
А теперь представьте, что ваш электродвигатель работает в режиме автокоммутации от энкодера, т. е. любое запаздывание коммутации ведет в потере момента, и как следствие, к потере синхронизации на больших частотах.

Вы хотите сказать, что тут все в реальном времени работает? и нет никакой инерционности? это что же за двигатель и привод такой?
как знаете... на мой взгляд красивое было бы решение: 4 отдельные платки драйверов энкодеров с контроллерами (8 пинов хватит, tiny25), изолированными источниками питания для каждого энкодера (механизм все-таки), опторазвязками сигналов от него и интерфейсом I2C на плату центрального процессора. завтра заказчик, как та старуха в золотой рыбке, скажет, что хочет не 4 канала, а 8 - пожалуйста! добавит автор еще 4 драйвера и не будет опять мучиться в поисках схемотехнического решения
evgeny_ch
Цитата(stells @ Jul 7 2008, 18:25) *
Вы хотите сказать, что тут все в реальном времени работает? и нет никакой инерционности? это что же за двигатель и привод такой?
как знаете... на мой взгляд красивое было бы решение: 4 отдельные платки драйверов энкодеров с контроллерами (8 пинов хватит, tiny25), изолированными источниками питания для каждого энкодера (механизм все-таки), опторазвязками сигналов от него и интерфейсом I2C на плату центрального процессора. завтра заказчик, как та старуха в золотой рыбке, скажет, что хочет не 4 канала, а 8 - пожалуйста! добавит автор еще 4 драйвера и не будет опять мучиться в поисках схемотехнического решения

Реальный привод - ЛШД, Тстатора=0,64 мм (512 микрошагов на период) , Тэнкодера=10мкм, V=1м/сек.
Частота следования импульсов коммутации 800кГц.
stells
Цитата(evgeny_ch @ Jul 8 2008, 09:42) *
Реальный привод - ЛШД, Тстатора=0,64 мм (512 микрошагов на период) , Тэнкодера=10мкм, V=1м/сек.
Частота следования импульсов коммутации 800кГц.

ну так ведь не всегда такие привода используются... у нас, например, в лебедках каротажных станций(для проведения скважинных исследований) стоит "нормальный" синхронный 3-фазный двигатель, энкодер с частотой следования 250 импульсов на оборот (в секунду) и т.д.
так какой привод "реальный"?
ни о чем говорим... принимать решение автору топика
Pasha 111
slog
Спасибо за разъяснение, пойду читать литературу по плисам...
EPM240 (QFP 100 который) стоит как 4 авр-ки кстати smile.gif ...

_Sam_
Цитата
Возможно, однако если вы делаете позиционную систему, как только вы поставите её на станок вам сразу выкатят притензии.

Нет, режущим инструментом станка никто не двигает smile.gif
Цитата
Что это за колёсико?

Это колёсико одной из частей мобильного робота smile.gif Точность тут до 1 мм только нужна, а при большом коэффициенте редукции этот 1мм выливается в несколько сотен тактов энкодера.

В задаче с 2-мя двигателями использовались магнитные энкодеры, встроенные в двигатель Faulhaber (не помню точно модель). Сейчас скорее всего будут оптические энкодеры от bourns (или другие отические/магнитные).

Частота импульсов зависит от выбранного редуктора и максимальной скорости. В принципе, для текущей задачи хватит и порядка 10000 тактов энкодера/с, но хочется сделать с запасом...

evgeny_ch
Цитата
32-BIT QUADRATURE COUNTER WITH SERIAL INTERFACE

В условия нехватки времени для меня - идеальный вариант, но вот нигде не продаётся. Нашёл ещё один вариант - HCTL-2020 от HP, но в продаже также нет...

Цитата
Привод будет перемещаться очень торжественно. Можно сказать как в трауре.

Ну П, И, Д и апериодические звенья ещё никто не отменял smile.gif при частоте работы регулятора порядка 1 КГц, задержка будет измеряться в мс, что может быть даже меньше, чем, скажем, механическая постоянная, связанная в моментом инерции механизма.

Ох... даже не знаю как делать. Почитаю литературу про ПЛИСы, но думаю, что всё-таки склонюсь в сторону 4-х авр-ок, задачка с плисом на порядок сложнее для меня получается.
_Sam_
Цитата
Это колёсико одной из частей мобильного робота Точность тут до 1 мм только нужна, а при большом коэффициенте редукции этот 1мм выливается в несколько сотен тактов энкодера.

А, ну тогда всё понятноsmile.gif

Всё же вы упустили ещё один вариант. Взять датчики с SSI интерфейсом, тем более, что всё равно менять собираетесь. В этом случае масштабируемость - количество драйверов RS422 ну и конечно свободных ножек микроконтроллера! Опрос всех датчиков можно будет производить синхронно, подавая ssi_clk одновременно на все датчики и, считывая ssi_data с одного или нескольких портов. 8-битного порта хватит для опроса 7 датчиков:1(ssi_clk) + 7(ssi_data). Если расстояния небольшие, то можно и без RS422 драйверов обойтись!
Например: 8мм магнитный датчик.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.