Как стать автором
Обновить

Инкрементальный энкодер: подключение и обработка его с помощью AVR (ATmega8/16/32/168/328)

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров14K
Всего голосов 13: ↑10 и ↓3+9
Комментарии9

Комментарии 9

перевод статьи как закрутить лампочку... с помощью домкрата...

вместо кучи условий можно сделать таблицу размером 16 и состояниями +1, -1, 0 и fault - на вход подаются 4 бита: предыдущее состояние и новое, ну и логичнее считать переменную внутри, а не слать в уарт

fault тоже желательно обрабатывать, потому как ошибка счетчика - выдача неверного положения с кучей проблем типа поломка контуров foc, ПИД регуляторов и исполнительных устройств в принципе

Есть же магнитные еще энкодеры. Линейные стоят тоже несколько долларов. С кольцевыми сложнее. Но кольцевые оптические можно найти надорогие, или просто сделать из пары датчиков концевых и кружка с дырками, что стоит меньше доллара в сумме.

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

Если необходимо обрабатывать квадратурные сигналы с какого-нибудь датчика вращения или станочного энкодера с разрешением 2500 имп/оборот, скорости микроконтроллера может и не хватить и он начнет пропускать импульсы или же будет заниматься только этим.

Аппаратный декодер можно собрать также на нескольких микросхемах ттлш логики.

Аппаратный декодер есть во всех микроконтроллерах типа STM32, скорости его таймера хватит для любого механического энкодера.

Сделать диодное ИЛИ, и пустить выход на прерывание - будет любой фронт. На обычный входной порт пустить выход любого из каналов до диода. Итого - пришло прерывание - значит обнаружен любой фронт. Смотрим потенциал - если там 1, значит фронт был с CW (или CCW - в зависимости от того, как подключили) вывода. Этой информации достаточно, чтобы раскодировать направление вращения.

Не получится, переходы с 10 или 01 на 11 не будут детектироваться.

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

PS - если бы мог - сам бы себе поставил за предыдущий коммент минус

Второй метод использует код Грея. В этом случае нам не нужны никакие прерывания вообще.

чтобы запускать эту процедуру в прерывании каждый раз, когда счётчик переполняется

Метод без прерываний требует прерываний ?

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

Уж лучше в прерывании от ноги все это делать

Очень смело использовать внутренние подтягивающие резисторы.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории