Как работает Rotary Encoder и взаимодействует с Arduino

Kak Rabotaet Rotary Encoder I Vzaimodejstvuet S Arduino



Rotary Encoder — это важное электромеханическое устройство, которое имеет разнообразное применение в области электроники. В этой статье объясняются типы и принципы работы поворотного энкодера, а также его взаимодействие с Arduino.

Что такое поворотный энкодер

Поворотный энкодер — это цифровое устройство ввода, которое определяет угловое положение поворотной ручки и отправляет сигналы на микроконтроллер или любое другое устройство, к которому они подключены. Они могут вращаться на 360° без остановки. Его также называют датчиком вала. Он используется в принтерах, аудиоэлектронике, двигателях и контроллерах.









Типы поворотных энкодеров

В основном существует два типа поворотных энкодеров, которые выбираются на основе генерируемого ими выходного сигнала. Эти типы называются:



Инкрементальный поворотный энкодер

Этот тип энкодера считает обороты поворотной ручки в виде импульсов. При однократном вращении ручки генерируется импульс. Для каждого импульса счетчик увеличивает угловое положение вала.





Абсолютный поворотный энкодер

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



Работа поворотного энкодера

Энкодер состоит из диска с равноотстоящими друг от друга участками, соединенными с общим контактом С, который заземлен. Два других контакта A и B являются контактными штифтами, которые соприкасаются с C при вращении поворотной ручки. Когда контакт A или B подключается к земле, генерируется сигнал. Эти сигналы, генерируемые выходными контактами, сдвинуты по фазе на 90°. Это связано с тем, что контакт A подключается к земле при повороте ручки по часовой стрелке, а контакт B подключается к земле первым, когда ручка поворачивается против часовой стрелки. Таким образом, направление вращения ручки определяется через эти соединения.

Если состояние Б не равно А , то ручка повернулась по часовой стрелке.


Если состояние B равно A, ручка повернута против часовой стрелки.

Конфигурация контактов поворотного энкодера

На приведенной ниже диаграмме показана разводка поворотного энкодера, на которой показаны выходные контакты A и B, поворотный переключатель, который можно использовать в качестве кнопки, и контакты для подачи питания.

Контакт Описание поворотного энкодера

Ниже приведено описание всех контактов поворотного энкодера.

Выход B или CLK

Этот вывод показывает, сколько раз вращалась ручка или поворотный энкодер. Каждый раз, когда ручка вращается, CLK завершает цикл HIGH и LOW. Это считается за один оборот.

Выход A или DT

Это второй выходной контакт поворотного энкодера, который определяет направление вращения. Он отстает на 90° от сигнала CLK. Следовательно, если его состояние не равно состоянию CLK, то направление вращения — по часовой стрелке, в противном случае — против часовой стрелки.

Выключатель

Штифт переключателя используется для проверки того, нажата ли кнопка или нет.

ВКК

Этот контакт подключен к источнику питания 5 В.

ЗАЗЕМЛЕНИЕ

Этот контакт подключен к земле

Взаимодействие Rotary Encoder с Arduino

Вращающийся энкодер имеет пять контактов. VCC и GND поворотного энкодера подключены к Arduino. Остальные контакты CLK, DT и SW подключены к цифровым входным контактам Arduino.

Код Arduino для поворотного энкодера

// Входы поворотного энкодера
# определить CLK_PIN 2
# определить DT_PIN 3
# определить SW_PIN 4
счетчик счетчика = 0 ;
int текущееCLKState;
int lastCLKState;
Текущее направление строки = '' ;
беззнаковое длинное lastButtonPressTime = 0 ;
недействительная установка ( ) {
// Установите контакты энкодера как входы
    контактный режим ( CLK_PIN, ВХОД ) ;
    контактный режим ( DT_PIN, ВХОД ) ;
    контактный режим ( SW_PIN, INPUT_PULLUP ) ;
// Настройка последовательного монитора
Серийный.начало ( 9600 ) ;
// Чтение начального состояния CLK
lastCLKState = цифровое чтение ( CLK_PIN ) ;
}
пустая петля ( ) {
// Чтение текущего состояния CLK
currentCLKState = цифровое чтение ( CLK_PIN ) ;
// Если последний и текущее состояние CLK отличается, затем произошел импульс
// Реагировать только на 1 изменение состояния, чтобы избежать двойного счета
если ( текущееCLKState ! = последнееCLKSate && текущийCLKSate == 1 ) {
// Если состояние DT отличается от состояния CLK, затем
// Энкодер вращается против часовой стрелки, поэтому декремент
если ( цифровойЧитать ( DT_PIN ) ! = текущееCLKSate ) {
прилавок--;
текущее направление = 'против часовой стрелки' ;
} еще {
// Энкодер вращается по часовой стрелке, поэтому приращение
счетчик++;
текущее направление = 'КВ' ;
}
Серийный.печать ( 'Направление вращения:' ) ;
Серийный.печать ( текущее направление ) ;
Серийный.печать ( ' | Значение счетчика: ' ) ;
Серийный.println ( прилавок ) ;
}
// Помните последний состояние CLK
последнееCLKState = текущееCLKState;
// Чтение состояния кнопки
int buttonState = цифровое чтение ( SW_PIN ) ;
// Если мы обнаруживаем НИЗКИЙ сигнал, кнопка нажимается
если ( buttonState == НИЗКИЙ ) {
// Если с момента последний НИЗКИЙ импульс, это означает, что
// кнопка была нажата, отпущена и снова нажата
если ( миллис ( ) - lastButtonPressTime > пятьдесят ) {
Серийный.println ( 'Кнопка нажата!' ) ;
}
// Помните последний событие нажатия кнопки время
lastButtonPressTime = миллисекунды ( ) ;
}
// Помещать в небольшая задержка в помощь опровергнуть чтение
задерживать ( 1 ) ;
}


В приведенном выше коде состояние вывода CLK проверяется в функции loop(). Если оно не равно своему предыдущему состоянию, это показывает, что поворотная ручка повернулась. Теперь, чтобы проверить направление вращения ручки, текущее состояние CLK сравнивается с состоянием DT. Если оба состояния не равны, это показывает, что ручка вращалась по часовой стрелке, и счетчик увеличивает свое значение, чтобы показать положение поворотной ручки. В противном случае счетчик уменьшается.

Заключение

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