Позволю себе процитировать, оригинал статьи находится здесь
Подключение Энкодера
Автор Белов А. В.
В связи с тотальным переходом к микропроцессорному управлению бытовыми и другими электронными приборами изменились и органы регулировки, применяемые в этих приборах. Если раньше для того, что бы отрегулировать громкость радиоприемника или телевизора вы должны были просто покрутить соответствующую ручку, то теперь вы зачастую вынуждены пользоваться двумя кнопками: "Громкость +" и "Громкость -". А если нужно регулировать не только громкость? Для многих пользователей это просто не удобно. К тому же страдает оперативность регулировки. Нажав кнопку уменьшения громкости нужно еще подождать какое то время, пока громкость доползет до нужного уровня. И все это время приходится страдать от громкого звука. Совместить преимущества традиционных регуляторов и при этом не потерять новые возможности, которые нам дают микроконтроллеры призвано новое устройство ввода информации, которое получило название Энкодер. По внешнему виду и установочным размерам энкодер очень похож на обычный переменный резистор, который использовался в традиционных аналоговых устройствах. Но по внутреннему устройству он кардинально отличается. Энкодер так же, как и резистор имеет выступающую вперед ось, на которую можно надеть такую же самую ручку, какую обычно одевают на резистор. Вращение рукоятки энкодера приводит к вырабатыванию им последовательности импульсов, которые затем поступают на микроконтроллер и дают ему информацию о том, на сколько нужно уменьшить либо увеличить то либо иное значение. Например, насколько нужно увеличить или уменьшить громкость сигнала и т.п. Причем устройство энкодера таково, что микроконтроллер может различать не только величину, на которую нужно изменить параметр, но и направление этого изменения. Это позволяет, например, при вращении оси энкодера в одну сторону увеличивать громкость, а при вращении в другую - уменьшать.
Рис. 1. Принцип работы энкодера
Рассмотрим, как же устроен энкодер. На рисунке 1 показано устройство простого механического энкодера. Как видно из рисунка, основой энкодера является диск из изоляционного материалла закрепленный на оси, на которую и насаживается рукоятка для ее вращения. По периметру диска равномерно расположены специальные прорези. Прорези делят всю окружность на несколько (обычно 6-8) равных секторов. Причем ширина прорезей равна ширине промежутков между ними. Кроме того, имеется две группы контактов, которые установлены таким образом, что при вращении диска они то замыкаются попав в прорезь, то размыкаются в промежутке между прорезями. Очень важно расположение этих пар контактов относительно прорезей. Контакты расположены таким образом, что в тот момент, когда одна пара находится на краю какой либо прорези, вторая пара контактов находится ровно посредине между двумя соседними прорезями. Именно такое расположение и показано на рисунке. В результате реализуется следующий порядок замыкания/размыкания контактов:
Замыкается первая группа контактов
Замыкается вторая группа контактов
Размыкается первая группа контактов
Размыкается вторая группа контактов
5. Все повторяется сначала.
Рис. 2. Схема энкодера
Рис. 3. Диаграмма работы
На рисунке 2 приведена внутренняя электрическая схема простого механического энкодера. Энкодер имеет всего три вывода (что делает его еще больше похожим на переменный резистор). Нижний по схеме вывод - общий для обеих пар контактов. В результате, при вращении рукоятки энкодера на выходе мы получим две последовательности импульсов. При равномерном вращении в одну сторону это будут два меандра, сдвинутых по фазе на 90 градусов. Для наглядности этот процесс показан на рисунке 3. Как микроконтроллер определяет угол поворота оси энкодера надеюсь понятно. Он просто подсчитывает число импульсов. Причем можно считать импульсы приходящие от любй из группы контактов. Основной фокус - как определить направления вращения. Как раз тут и помогает последовательность замыкания и размыкания контактов. При вращении оси энкодера в одну из сторон каждый раз, когда первая группа контактов переходит из замкнутого состояния в разомкнутое, вторая группа контактов оказывается замкнута. Причем момент перехода первой группы приходится как раз на середину отрезка времени, когда вторая группа замкнута. То есть, дребезг уже закончился и все переходные процессы улеглись. При вращении в другую сторону порядок размыканий и замыканий сменяется на обратный. Поэтому в момент, когда первая группа контактов переходит из замкнутого состояния в разомкнутое, вторая группа всегда оказывается разомкнута. Именно по этому факту микроконтроллер и определяет направление вращения.
-------------------------
Для пользователя - это две кнопки, которые нажимаются в зависимости от направления вращения ручки и соотвественно количество нажатий зависит от скорости вращения ручки. Энкодер имеет достаточно ощутимый клик, чтобы определить один шаг. Кстати на мышах колесо - это энкодер. Причем с нажатием - это просто дополнительная кнопка. Применительно к Njoy32 - её можно использовать как обычную кнопку, а можно назначить модификатор SHIFT1/SHIFT2 - тогда назначив в дополнение к физическому виртуальный энкодер, можно получить комбинацию двух энкодеров на одном физическом - в ненажатом состоянии будет работать первый, в нажатом - второй. Это может быть интересно для настройки частоты приемников в симах - грубо/точно.
На один физический можно "повесить" еще два виртуальных, всего система может поддерживать до 64 энкодеров - физических и виртуальных.
В крайних версиях прошивки энкодер(физический или виртуальный) можно использовать для организации виртуальной аналоговой оси, либо для триммирования одной из физических осей, либо эмулировать колесо мыши или даже оси мыши.
Ещё как пример применения - "ручной" выпуск шасси в ишаке (ИЛ2). К энкодеру можно сделать аутентичную ручку - и процесс будет вполне адекватен реалу.
Впрочем для выпуска/уборки шасси есть более "ленивый" ' элемент управления - кнопка Автогенератор. Задаем число нажатий, период повторения , один раз нажимаем - и вуаля, шасси выпущено.
PS
Конструктивно энкодеры могут быть с разным числом фазовых переходов на детенд (клик). Обычно - это 4/4 (4 фазовых перехода на один клик), но бывают и 1/4 или 2/4. Энкодер, котороый стоит на колесе в мышах - как раз 2/4 - с половинным циклом.
К примеру, если поставить энкодер 2/4 в систему, котороая понимает только "полные" энкодеры 4/4 - то придется делать два "клика" чтобы получить выходное нажатие кнопки - что тактильно имеет некоторое неудобство.
Эти особенности учитываются при конфигурировании - Njoy32 поддерживает энкодеры типов 4/4 и 2/4.