Како ради Ротари Енцодер и повезује га са Ардуином

Kako Radi Rotari Encoder I Povezuje Ga Sa Arduinom



Ротари Енцодер је важан електромеханички уређај који има различите намене у области електронике. Овај чланак ће објаснити типове и рад ротационог енкодера заједно са његовим интерфејсом са Ардуином.

Шта је ротациони енкодер

Ротациони енкодер је дигитални улазни уређај који детектује угаону позицију окретног дугмета и шаље сигнале микроконтролеру или било ком другом уређају на који су повезани. Могу да се ротирају за 360° без заустављања. Такође се назива енкодер осовине. Користи се у штампачима, аудио електроници, моторима и контролерима.









Врсте ротационих енкодера

Постоје углавном две врсте ротационих енкодера за које се одлучује на основу излазног сигнала који они генеришу. Ови типови су названи:



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

Овај тип енкодера броји обртаје окретног дугмета у облику импулса. Када се дугме једном окрене, генерише се импулс. За сваки импулс, бројач се повећава да би показао угаону позицију осовине.





Апсолутни ротациони енкодер

Овај тип енкодера даје апсолутну угаону позицију осовине, јер има посебан код за сваку позицију осовине и мери угао кроз тај код. Није му потребан бројач да би дао излаз угаоне позиције. Чак и ако је апсолутни ротациони енкодер искључен, одговарајуће вредности за угаоне позиције се задржавају. Такође је јефтин кодер.



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

Ротациони енкодер се састоји од диска са подједнако распоређеним површинама повезаних на заједнички пин Ц који је уземљен. Друге две игле А и Б су контактне игле које остварују контакт са Ц када се окреће окретно дугме. Када се пин А или Б повеже са земљом, онда се генерише сигнал. Ови сигнали генерисани са излазних пинова су ван фазе за 90°. То је зато што се пин А повезује са уземљењем када се дугме окрене у смеру казаљке на сату, а пин Б се прво повезује са уземљењем када се дугме окрене у смеру супротном од казаљке на сату. Због тога се путем ових веза одређује смер ротације дугмета.

Ако држава на Б није једнако А , онда се дугме окренуло у смеру казаљке на сату.


Ако је стање Б једнако А, дугме се окренуло у смеру супротном од казаљке на сату.

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

Дијаграм дат у наставку даје пиноут ротационог енкодера који показује излазне пинове А и Б, ротирајући прекидач који се може користити као дугме и пинове за напајање.

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

Следи дат опис свих пинова ротационог енкодера.

Оут Б или ЦЛК

Овај пин даје излаз колико пута се дугме или ротациони енкодер ротирао. Сваки пут када се дугме окрене, ЦЛК завршава циклус ХИГХ и ЛОВ. Рачуна се као једна ротација.

Оут А или ДТ

Ово је други излазни пин ротационог енкодера који одређује смер ротације. Заостаје 90° за ЦЛК сигналом. Према томе, ако његово стање није једнако ЦЛК-овом стању, онда је смер ротације у смеру казаљке на сату, у супротном супротном смеру казаљке на сату.

Свитцх

Пин прекидача се користи за проверу да ли је дугме притиснуто или не.

ВЦЦ

Овај пин је повезан са напајањем од 5В

ГНД

Овај пин је повезан са уземљењем

Повезивање ротационог енкодера са Ардуином

Ротациони енкодер има пет пинова. ВЦЦ и ГНД ротационог енкодера су повезани са Ардуино. Преостали пинови ЦЛК, ДТ и СВ повезани су на дигиталне улазне пинове Ардуина.

Ардуино код за ротациони енкодер

// Улази ротационог енкодера
#дефине ЦЛК_ПИН 2
#дефине ДТ_ПИН 3
#дефине СВ_ПИН 4
инт цоунтер = 0 ;
инт цуррентЦЛКСтате;
инт ластЦЛКСтате;
Смер струје стринга = '' ;
унсигнед лонг ластБуттонПрессТиме = 0 ;
празнина подешавања ( ) {
// Поставите пинове кодера као инпутс
    пинМоде ( ЦЛК_ПИН, ИНПУТ ) ;
    пинМоде ( ДТ_ПИН, ИНПУТ ) ;
    пинМоде ( СВ_ПИН, ИНПУТ_ПУЛЛУП ) ;
// Подешавање серијског монитора
Сериал.бегин ( 9600 ) ;
// Прочитајте почетно стање ЦЛК-а
ластЦЛКСтате = дигиталРеад ( ЦЛК_ПИН ) ;
}
празнина петља ( ) {
// Прочитајте тренутно стање ЦЛК-а
цуррентЦЛКСтате = дигиталРеад ( ЦЛК_ПИН ) ;
// Ако је последњи а тренутно стање ЦЛК-а је другачије, онда појавио се пулс
// Реагујте само на 1 промена стања како би се избегло двоструко рачунање
ако ( цуррентЦЛКСтате ! = ластЦЛКСтате && цуррентЦЛКСтате == 1 ) {
// Ако се ДТ стање разликује од ЦЛК стања, онда
// Кодер се ротира у смеру супротном од казаљке на сату, тако да се смањује
ако ( дигиталРеад ( ДТ_ПИН ) ! = цуррентЦЛКСтате ) {
цоунтер--;
цуррентДирецтион = 'ЦЦВ' ;
} друго {
// Енкодер се ротира у смеру казаљке на сату, па повећавајте
цоунтер++;
цуррентДирецтион = 'ЦВ' ;
}
Сериал.принт ( 'Смер ротације: ' ) ;
Сериал.принт ( цуррентДирецтион ) ;
Сериал.принт ( ' | Протувредност: ' ) ;
Сериал.принтлн ( бројач ) ;
}
// Запамтите последњи ЦЛК стање
ластЦЛКСтате = цуррентЦЛКСтате;
// Прочитајте стање дугмета
инт буттонСтате = дигиталРеад ( СВ_ПИН ) ;
// Ако откријемо ЛОВ сигнал, дугме се притисне
ако ( буттонСтате == ЛОВ ) {
// Ако је прошло 50 мс од последњи НИСКИ пулс, то значи да је
// дугме је притиснуто, отпуштено и поново притиснуто
ако ( миллис ( ) - ластБуттонПрессТиме > педесет ) {
Сериал.принтлн ( „Дугме притиснуто!“ ) ;
}
// Запамтите последњи догађај притиска на дугме време
ластБуттонПрессТиме = миллис ( ) ;
}
// Ставити ин благо одлагање да помоћ дебоунце читање
кашњење ( 1 ) ;
}


У горе датом коду, стање ЦЛК пина се проверава у функцији лооп(). Ако није једнако свом претходном стању, то показује да се окретно дугме закренуло. Сада, да бисте проверили смер ротације дугмета, тренутно стање ЦЛК се упоређује са стањем ДТ. Ако су оба стања неједнака, то показује да је дугме ротирано у смеру казаљке на сату и да повећава своју вредност у супротном смеру да би се приказао положај окретног дугмета. У супротном случају, бројач се смањује.

Закључак

Ротациони енкодери су напредни сензори положаја који се могу непрекидно ротирати. Доступни су у два типа: инкрементални и апсолутни. Ротациони енкодер ради тако што броји импулсе који настају услед ротације дугмета. Има различите примене у свакодневном животу од електронике до индустријске аутоматизације.