Перейти к содержанию
    

Обработчик сигнала от инкрементого энкодера

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делал в ПЛИС блок из 3 и 2 энкодеров. Был случай сигнал дребезжал - проявилялось как набор координаты от вибрации - сделал логическую обработку сигнала энкодера в ПЛИС. А на процессоре такие штуки вряд ли можно делать... Видимо проще убить неделю и сделать энкодер с интерфейсом в простенькой ПЛИС типа MAX3000, MAXII или заказать на сторону ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

А зачем вам аппаратные?Сделайте проект на нескольких процессорах.Проц на 1 или 2 датчика и по последовательным каналам к вашему основному процу :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программная обработка энкодера годится если у процессора есть ресурсы чтобы обрабатывать примерно раз в 20 большие частоты чем частота при максимальной скорости вращения энкодера. Или если допустимы пропуски единичных импульсов. В остальных случаях квадратурный декодер и счётчик должен быт аппаратный. Есть варианты - в процессорах заточенных под электропривод он есть внутри. Есть и специальные микросхемы например у Agilent, но дорогие и не особо доступные. Или проще всего сделать это например на CPLD MAXII. Примеры квадратурных счётчиков есть например у Atmel и Xilinx. Это не сложная и очень полезная задача.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем вам аппаратные?Сделайте проект на нескольких процессорах.Проц на 1 или 2 датчика и по последовательным каналам к вашему основному процу :)

ну да... на каждый энкодер по простенькому контроллеру типа tiny (с дребезгом легко разберетесь) и последовательный канал (I2C) на основной процессор

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну да... на каждый энкодер по простенькому контроллеру типа tiny (с дребезгом легко разберетесь) и последовательный канал (I2C) на основной процессор

именно так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Надежный вариант (ИМХО) - только аппаратный. Освоение работы с ПЛИС ("МАХ+" + изготовление байтбластера) - задача нескольких дней. А вообще ситуация до боли знакомая - я сам впервые приобщился к PLD в такой же ситуации с точно такой же задачей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надежный вариант (ИМХО) - только аппаратный. Освоение работы с ПЛИС ("МАХ+" + изготовление байтбластера) - задача нескольких дней. А вообще ситуация до боли знакомая - я сам впервые приобщился к PLD в такой же ситуации с точно такой же задачей.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответы.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Из тех соображений, что быстродействием можно гарантированно решить проблемы только на стендах. А в реальных механизмах - с вибрациями и неидеальными приводами, с программной реализацией проблемы гораздо вероятней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из тех соображений, что быстродействием можно гарантированно решить проблемы только на стендах. А в реальных механизмах - с вибрациями и неидеальными приводами, с программной реализацией проблемы гораздо вероятней.

это как? счетчик на ПЛИС в условиях вибраций надежнее программного? интересно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня (см. мой 1-й пост) всё вроде работало :) может я конечно что-то не замечал, но ПИД регулятор замечательно работал и всё нормально двигалось, как и было задумано.

 

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

 

Вспомнил, у меня по расчётамполучалось, что один такт энкодера - это где-то около 2 мкм =) хотя люфт можно было тактильно ощутить, если колёсико в руку взять и попробовать пошевелить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это как? счетчик на ПЛИС в условиях вибраций надежнее программного? интересно...

 

Эти утверждения основаны на личном опыте - в далекие 90-е годы я сделал около десятка проектов с инкрементальными датчиками (20 MHz Microchip'ы тогда тоже были известны - и любимы).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

Аппаратное решение все таки единственный правильный способ, если недопустимы пропуски импульсов, как например в системах позиционирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это как? счетчик на ПЛИС в условиях вибраций надежнее программного? интересно...

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

Естественно всё это относится к магнитным и оптическим преобразователям, которые насколько я понял и использует Pasha 111

Есть ещё контактные датчики, которые ставят например в автомагнитолы, цифровые осцилографы и т.д. - это совсем другое дело, совсем другой дребезг и совсем другие частоты.

 

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

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

 

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

 

Может хоть тип своего датчика укажите для ясности?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...