Как работи въртящият се енкодер и го свързва с Arduino

Kak Raboti V Rtasiat Se Enkoder I Go Sv Rzva S Arduino



Ротационният енкодер е важно електромеханично устройство, което има различни приложения в областта на електрониката. Тази статия ще обясни типовете и работата на въртящия се енкодер заедно с интерфейса му с Arduino.

Какво е ротационен енкодер

Ротационният енкодер е цифрово входно устройство, което усеща ъгловата позиция на въртящото се копче и изпраща сигнали към микроконтролера или всяко друго устройство, към което е свързано. Те могат да се въртят на 360° без спиране. Нарича се още енкодер на вала. Използва се в принтери, аудио електроника, двигатели и контролери.









Видове ротационни енкодери

Има основно два вида ротационни енкодери, които се определят въз основа на изходния сигнал, генериран от тях. Тези типове се наричат:



Инкрементален ротационен енкодер

Този тип енкодер отчита оборотите на въртящото се копче под формата на импулси. Когато копчето се завърти веднъж, се генерира импулс. За всеки импулс броячът нараства, за да покаже ъгловата позиция на вала.





Абсолютен ротационен енкодер

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



Работа на ротационен енкодер

Ротационният енкодер се състои от диск с еднакво раздалечени области, свързани към общ щифт C, който е заземен. Двата други щифта A и B са контактни щифтове, които влизат в контакт с C, когато въртящото се копче се завърти. Когато щифт A или B се свърже със земята, тогава се генерира сигнал. Тези сигнали, генерирани от изходните щифтове, са извън фазата на 90°. Това е така, защото щифт A се свързва със земята, когато копчето се завърти по посока на часовниковата стрелка, а щифт B се свързва първи със земята, когато копчето се завърти обратно на часовниковата стрелка. Следователно посоката на въртене на копчето се определя чрез тези връзки.

Ако състоянието на б не е равно на А , тогава копчето се е завъртяло по часовниковата стрелка.


Ако състоянието на B е равно на A, копчето се е завъртяло обратно на часовниковата стрелка.

Пин конфигурация на ротационен енкодер

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

Pin Описание на ротационен енкодер

Следва даденото описание на всички щифтове на ротационния енкодер.

Изход B или CLK

Този щифт дава изход за това колко пъти копчето или въртящият се енкодер са се завъртели. Всеки път, когато копчето се завърти, CLK завършва цикъл от HIGH и LOW. Отчита се като едно завъртане.

Изход A или DT

Това е вторият изходен щифт на ротационния енкодер, който определя посоката на въртене. Той изостава с 90° зад CLK сигнала. Следователно, ако състоянието му не е равно на състоянието на CLK, тогава посоката на въртене е по часовниковата стрелка, в противен случай обратно на часовниковата стрелка.

Превключване

Щифтът на превключвателя се използва за проверка дали бутонът е натиснат или не.

VCC

Този щифт е свързан към 5V захранване

GND

Този щифт е свързан към земята

Взаимодействие на ротационен енкодер с Arduino

Ротационният енкодер има пет пина. VCC и GND на ротационния енкодер са свързани с този на Arduino. Останалите щифтове CLK, DT и SW са свързани към цифровите входни щифтове на Arduino.

Arduino код за ротационен енкодер

// Входове за ротационен енкодер
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int counter = 0 ;
int currentCLKState;
int lastCLKState;
Посока на тока на низа = '' ;
unsigned long lastButtonPressTime = 0 ;
void настройка ( ) {
// Задайте щифтове на енкодера като входове
    pinMode ( CLK_PIN, ВХОД ) ;
    pinMode ( DT_PIN, INPUT ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Настройте сериен монитор
Serial.begin ( 9600 ) ;
// Прочетете първоначалното състояние на CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
празен цикъл ( ) {
// Прочетете текущото състояние на CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Ако последно и текущото състояние на CLK е различно, тогава се появи пулс
// Реагирайте само на 1 промяна на състоянието, за да се избегне двойно отчитане
ако ( текущо CLKсъстояние ! = последно CLKсъстояние && currentCLKState == 1 ) {
// Ако състоянието DT е различно от състоянието CLK, тогава
// Енкодерът се върти обратно на часовниковата стрелка, така че декрементът
ако ( digitalRead ( DT_ПИН ) ! = текущо CLKсъстояние ) {
брояч--;
currentDirection = 'CCW' ;
} друго {
// Енкодерът се върти по посока на часовниковата стрелка, така че увеличавайте
брояч++;
currentDirection = 'CW' ;
}
Сериен.печат ( 'Посока на въртене: ' ) ;
Сериен.печат ( currentDirection ) ;
Сериен.печат ( ' | Стойност на брояча: ' ) ;
Serial.println ( брояч ) ;
}
// Спомнете си последно CLK състояние
lastCLKState = currentCLKState;
// Прочетете състоянието на бутона
int buttonState = digitalRead ( SW_PIN ) ;
// Ако открием НИСък сигнал, бутонът се натиска
ако ( buttonState == LOW ) {
// Ако са изминали 50 ms от последно НИСЪК пулс, това означава, че
// бутонът е бил натиснат, освободен и натиснат отново
ако ( милис ( ) - lastButtonPressTime > петдесет ) {
Serial.println ( „Натиснат бутон!“ ) ;
}
// Спомнете си последно събитие за натискане на бутон време
lastButtonPressTime = милисекунди ( ) ;
}
// Слагам в леко забавяне на помогне разбийте четенето
забавяне ( 1 ) ;
}


В дадения по-горе код състоянието на пин CLK се проверява във функцията loop(). Ако не е равно на предишното си състояние, това показва, че въртящият се бутон се е завъртял. Сега, за да се провери посоката на въртене на копчето, настоящото състояние на CLK се сравнява със състоянието на DT. Ако и двете състояния са неравни, това показва, че копчето се е завъртяло по посока на часовниковата стрелка и броячът увеличава стойността си, за да покаже позицията на въртящото се копче. В обратния случай броячът намалява.

Заключение

Ротационните енкодери са усъвършенствани сензори за позиция, които могат да се въртят непрекъснато. Предлагат се в два вида: инкрементални и абсолютни. Ротационният енкодер работи, като брои импулси, генерирани поради въртенето на копчето. Има различни приложения в ежедневната електроника до промишлена автоматизация.