Инкрементальные энкодеры (Накапливающие ДУП), на выходе формируют импульсы, по которым принимающее устройство определяет текущее положение вала путём подсчёта числа импульсов счётчиком.
Из картинки видим, что инкрементальный энкодер формирует последовательность импульсов на двух каналах. При вращении вала в одну сторону импульсы первого канала будут немного опережать импульсы второго канала. При вращении в обратную сторону наоборот импульсы второго канала будут опережать импульсы первого канала. Разумеется, эти каналы выдают импульсы относительно некой общий точки, обычно земли. Также обычно энкодер имеет в своём составе обычную кнопку, нажатие на которую производится надавливанием на вал.
На картинке слева инкрементальный энкодер, справа модуль с инкрементальным энкодером. Модуль помимо самого энкодера имеет подтягивающие резисторы, и RC цепи на выходах каналов. Конечно, применение готового модуля более удобно, тем более цена очень доступна.
Обычно энкодеры подключаются к микроконтроллерам. И позволяют очень удобно управлять различными устройствами. В среде Arduino IDE очень легко подключается при помощи готовых библиотек. На эту тему есть много информации на различных сайтах, например на сайте Алекса Гайвера (схему модуля позаимствовал оттуда, график из википедии).
Я же решил попробовать подключить энкодер без микроконтроллера. Очевидно, что в этом случае потребуется реверсивный счётчик, который будет считать импульсы вперёд/назад. Сразу пришла на ум CD4029 (К561ИЕ14).
Как ни странно, CD4029 в «Чип и Дип» в Самаре только под заказ из Москвы, зато в нашем местном «Вольтмастер» были советские аналоги К561ИЕ14, причём за смешную цену, рублей 15, точно не помню.
CD4029 – это реверсивный, двоичный / двоично-десятичный счётчик с предустановкой значений. Причём счётные импульсы подаются на один вход (15, CLOC) независимо от направления, а направление счёта определяется пином 10 (up/down), при единице счёт вверх, при нуле вниз. Пин 9 определяет модуль счёта (16/10). Предустановка Jam1- Jam4 мне не нужна, и будет посажана на землю. 5 пин - разрешение счёта, считает при нуле. 7 пин - перенос / заём – там всегда 1, а при достижении крайних значений появляется 0, и возвращается 1, при переходе через крайние значения. 1 пин – установка начальных значений, в моём случае просто сброс. Q1-Q4 соответственно выход.
Приходит закономерная мысль почему бы не подключит энкодер непосредственно к этому счётчику. Один канал на счёт, другой на направление счёта, ну дребезг ещё побороть триггером Шмитта. Но оказалось так работать не будет, временной сдвиг между сигналами каналов энкодера очень мал, а пин направления счётчика асинхронных, и требует стабильного сигнала.
Для корректной работы счётчика с энкодером требуется квадратичный декодер – устройство, которое преобразует сигналы A и B энкодера (которые сдвинуты на 90 градусов) в два сигнала, которые "поймет" счётчик.
Проще и надёжнее использовать специализированные микросхемы, например LS7184N или устаревший аналог LS7084N. Эти микросхемы обрабатывают сигналы энкодера и на выходе выдают стабильные сигнал направления и сигнал счёта. Причём содержат встроенный фильтр, подавляющий дребезг контактов. Но эти микросхемы достаточно проблематично приобрести в России. Можно заказать из Китая, но цена будет от 300 рублей за штуку. Поэтому квадратичный декодер придётся делать самостоятельно.
Использовал один D триггер из микросхемы 74HC74 (содержит 2 D триггера) для формирования сигнала направления. Для подавления дребезга контактов использовал триггеры Шмитта из микросхемы 74HC14 (содержит 6 триггеров Шмитта ). RC цепь уже имеется на модуле энкодера. Счётные импульсы берутся с канала В, дополнительно инвертированные относительно сигнала направления (именно так у меня заработало).
Обведена карандашом та часть схемы, что находится на модуле энкодера. Счётчик работает в двоично/десятичном режиме (Пин 9 на земле), то есть считает до 10 в двоичной форме, и идёт на следующий круг. У разных производителей модулей могут отличаться каналы, то есть для тог, чтобы добиться приращения по часовой стрелке, убывания против, возможно придётся поменять местами каналы с энкодера. На R2, C3 сделана RC цепочка формирующая сигнал сброса счётчика в момент включения питания. Кнопку энкодера пока не задействовал.
На выход счётчика подключил дешифратор CD4028 (К561ИД1), и на его выход 10 светодиодов, через резисторы.
Таким образом при включении схемы горит светодиод D1, при вращении
энкодера по часовой стрелке он гаснет и загорается следующий, против часовой, наоборот.
По идее такую схему можно использовать для управления нагрузками. Можно подключить, например аналоговый мультиплексор/демультиплексор CD4051, позволяющий коммутировать 8 каналов относительно одного входа/выхода, или CD4052, позволяющий коммутировать 4 сдвоенных каналов (как коммутации аудио входа, при условии двухполярного питания). Так же стоит помнить, что в запасе остался второй D триггер из 74HC74, 3 триггера Шмитта из микросхемы 74HC14, которые тоже можно использовать.
Для подключения семисегментного светодиодного индикатора дешифратор нужно заменить на CD4511.
Теперь вращая энкодер, можно изменять цифры на индикаторе. Здесь также изменил управление сбросом, вместо отдельной кнопки сброс использовал кнопку энкодера, подключив её через инвертор, так как в модуле она подтянута к питанию.
При необходимости счётчики CD4029 можно объединять в каскад. Но здесь есть нюанс CD4029, в отличие, например от знакомых CD40110, CD4026, CD4017 они соединяются не последовательно, а параллельно. Входы счёта и направлений объединяемых микросхем соединяются вместе, то есть сигнал приходит одновременно на весь каскад. Пин 7 (перенос / заём) микросхемы младшего разряда подключается к пину 5 (разрешение счёта) микросхемы старшего разряда. Таким образом младший разряд будет считать постоянно, а старший только при переходе через крайние положения младшего….
При желании можно запретить счёт ниже нуля и выше 10. Для этого потребуются дополнительные логические элементы, так как у CD4029 один общий выход перенос / заём, то нужно добиться запрета в случае: нуль на пине 7 (заимствование) при направление вниз (нуль на 10 пине); нуль на пине 7 (перенос) при направление вверх (единица на 10 пине); Во всех остальных случаях счёт должен продолжаться. Я добился этого применением элементов 2И-не и ИЛИ, а также инверторов, но схема получилась слишком громоздкой, поэтому решил не публиковать подобные усложнения.
Конечно, на безпаечных макетных платах подобные схемы не очень хорошо собирать, возможны некоторые глюки, так как требуются хорошие контакты и блокировочные конденсаторы, по питанию каждой микросхемы. Спаять надёжнее всегда.
Спасибо за внимание, подписывайтесь на канал, участвуйте в обсуждениях!