Энкодер используется как переключающее устройство для навигации по меню, для переключения режимов работы того или иного устройства.
Энкодер — устройство, предназначенное для преобразования угла поворота вращающегося объекта (вала) в электрические сигналы, позволяющие определить угол его поворота.
Проще говоря вращая ручку энкодера мы периодически замыкаем и размыкаем группу контактов. Таким образом получаем импульс. Ручку энкодера можно вращать бесконечно с любой скоростью, у него нет крайнего положения как у переменного резистора. Это значительный плюс, так как мы можем регулировать чувствительность программно, а не аппаратно.
Такой прибор ввода стоит, например, в современных автомагнитолах в качестве регулятора громкости. Кроме регулировки громкости он может быть использован как поворотная кнопка для перемещения по меню.
Рассмотрим принцип работы на примере четырехтактного энкодера.
На рисунке схематично изображена конструкция четырехтактного энкодера. Из него видно, что якорь энкодера соединен с землей (общим проводом), а значит имеет потенциал LOW.
Также в корпусе расположены две группы контактных площадок, изображенные в виде дуг красного (канал A) и синего (канал B) цвета.
Заметьте, что синие и красные контактные площадки смещены друг относительно друга ровно на половину.
Все красные контактные площадки соединены между собой и подключены к шине +5 Вольт через подтягивающий резистор. Аналогично соединены и синие контактные площадки.
Якорь механически соединен с ручкой энкодера и вращается вместе с ней, скользя по контактным площадкам. Когда якорь касается контактной площадки, ее потенциал меняется с HIGH на LOW. В этом энкодер похож на кнопку.
Теперь рассмотрим, что произойдет, если мы будем вращать ручку энкодера вместе с якорем. Для большей наглядности сигналы, получаемые на выходе обоих каналов, изображены на графике ниже:
Предположим, якорь находится в исходном положении, обозначенном цифрой «0». На обоих каналах A и B в этот момент установился высокий уровень HIGH.
Когда ручка вращается по часовой стрелке, соединенный с ней якорь, сначала касается контакта красного цвета, в результате чего контакты группы A оказываются соединенными с землей и на канале А устанавливается уровень LOW. Контакт синего цвета по прежнему имеет потенциал HIGH, так как он еще не коснулся якоря. На рисунках этот момент обозначен цифрой «1».
Продолжая свое движение, ровно на половине длины красного контакта, якорь «встречается» с контактом синего цвета — точка «2». Теперь уже на обеих группах контактов установится низкий уровень LOW.
При дальнейшем вращении ручки, якорь соскальзывает с красного контакта и продолжает скользить только по синему — точка «3». В этот момент в канале A снова устанавливается высокий уровень HIGH, а в канале B все еще низкий уровень LOW.
Двигаясь дальше, якорь завершает цикл, попадая на изолированную площадку — точка «4». В этом положении на обоих каналах снова устанавливается высокий уровень HIGH.
Очевидно, что при вращении против часовой стрелки, те же самые события происходят в обратном порядке.
Снова обратимся к графику. Если посмотреть на него внимательно, то мы увидим одну закономерность. При вращении якоря по часовой стрелке, в момент, когда потенциал канала A меняется с HIGH на LOW, канал B всегда имеет полный потенциал - HIGH. А при вращении против часовой стрелки, в момент, когда потенциал канала A меняется с HIGH на LOW, канал B всегда имеет низкий потенциал - LOW. Это свойство энкодера позволяет нам легко определить направление вращения якоря.
Для удобства и простоты использования мы разместили всю схему с необходимой обвязкой на одной плате, к модулю необходимо подключить только питание и выводы контроллера при помощи четырехконтактного разъема.
Тип: инкрементный
Количество шагов на оборот: 24
Диаметр вала: 6 мм
Напряжение питания: 3.3–5 В
Габариты: 22×29 мм
Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:
VCC - питание (+5V)
DO - цифровой выход
AO - аналоговый выход
GND - земля (общий)
Чтобы начать работу с модулем его необходимо подключить к микроконтроллеру по схеме ниже. Для быстрого и надежного подключения используйте QuatroPort A050.
Программа
Далее в микроконтроллер необходимо загрузить следующую программу.
//Канал А #define ENC_A 1 //Канал В #define ENC_B 5 //Предыдущее состояние канала А volatile int aPresState = -1; //Текущее значение ШИМ volatile int value = 120; void setup() { //Открытие соединения на скорости 9600 Serial.begin(9600); //Инициализация входов pinMode(ENC_A, INPUT); pinMode(ENC_B, INPUT); } void loop() { //Запоминаем текущее состояние канала А во //временную переменную int aCurrentState = digitalRead(ENC_A); //Проверяем направление вращения if (aPresState >-1 && aPresState != aCurrentState && aCurrentState == LOW ) { //Проверяем состояние порта В, чтобы //определить направление вращения if (digitalRead(ENC_B) == HIGH) { //Сюда попадаем если по часовой стрелке if (value <= 245) { value = value+1; Serial.println("-->"); } } else { //Сюда попадаем если против часовой стрелки if (value >= 0) { value = value-1; Serial.println("<--"); } } } //Сохраняем текущее значение порта А aPresState = aCurrentState; }
При нейтральном положении ручки с энкодера будут считываться нули. Скетч считывает значения с энкодера и показывает направление вращения в монитор порта.
Схема электрическая принципиальная