Rotary Encoder


2016-08-16 09:22:45

Ellenállásalapú potméter? Ugyan, ki használ még ilyet? Ha már mindenhol ott a mikrovezérlő, miért ne használnánk digitális verziót?

A helyzet sajnos nem ilyen egyszerű, mivel nem helyettesítő termékekről beszélünk. A potméterrel jelszinteket tudunk beállítani, a rotary encoderrel viszont csak relatív elmozdulást. Ki/bekapcsolásnál is alapvetően nincs ami megjegyezze a kikapcsolási pozíciót, nehezebb feldolgozni a jelét, a javítása sem egy elfogadott, ráadásul az ára sem volt sokáig összehasonlítható a potméterével. Viszont mi tagadás egy eszköz menürendszere lényegesen átláthatóbb egyszerűbb tud lenni 1 tekerő használatával.

A lábait vizsgálva azt látjuk, hogy szintén 3 darab van belőle, mint a potinál, sőt az egyiket itt is földre kell kötni. Viszont a másik két lábat vizsgálgatva már nem analóg hanem digitális négyszögjeleket látunk (kondival pergésmentesítve):

rotary encoder jele

Egy jobbra-balra léptetéssel egy felfutó vagy lefutó élt generált az általam használt encoder (egy másikat tesztelve, már egy komplett négyszögimpulzust generált (lefutó+felfutó)). A két jel csupán  5-10ms elcsúszásban van egymáshoz képest. Ehhez bizony kódot kell írni. Ha az időzítésekre is figyelni szeretnénk, időzítőt is használni kell, elveszi a sok hasznos lábat annak a figyelése, hogy használjuk-e a tekerőt. Persze lehet tisztán logikai műveletekkel, de itt is ki kell hegyezni a hangsúlyt az élekre, nem elég a logikai jelszint. Azaz nem egyszerű mint a faék. Emiatt sokáig nem fektettem energiát ebbe a perifériába.
Most viszont egyik szakdolgozómtól eltanultam, hogy lehet ezt digitális IC-kkel támogatni. Így levesszük a terhet a mikrovezérlőről. Ráadásul a példakapcsolás 7473-as IC-vel lett szerelve, ami a jól ismert D tároló. Csak nem lehet ez olyan átláthatatlan. Íme:   

 rotary encoder működése

D tároló: Három csatlakozóval rendelkező adattároló. Memóriák alapját képző digitális elemek. Alapvetően 2 bemenete(CLK,D) és egy kimenete van (Q). A CLK bemenet felfutó élre érzékeny. Mikor felfutó él érkezik a CLK-ra, megnézi, hogy a D bemeneten milyen jelszint található és azt átmásolja a Q kimenetére (és nem kukimenet). Haszontalannak tűnhet első hallásra, de íme egy gyakorlati felhasználás:
Az órajel bemenetre a rotary egyik jelét, a D bemenetre a rotary másik jelét kötjük. Nézzük a bal oldali „jobbra” (zöld) esetet. Ekkor a B bemenet a CLK, az A bemenet a D. Mikor érkezik a órajel felfutó éle, megnézi a tároló, hogy mi található az A csatornán. Magas jelszint, tehát a tároló a kimenetén H jelenik meg. Ezt kéne tárolnia az órajel következő felfutó éléig. Igen ám, de a D bemenet össze van kötve a CLR inverzül működő bemenetével.  Ez azt csinálja, hogy ha a lábán alacsony jelszint található, mindegy mi található a D bemeneten, a tároló kimenetét L-re állítja be (reset-eli, törli…). Azaz, amint az A csatornán a jelszint alacsonnyá vált, a kimenet H-ból L-be vált. Így nem marad folyton egyes.
Mi történik, ha másik irányba forgatjuk az encodert? A kimenet folyton alacsony. Miért is? Mikor a tároló órajelére felfutó él érkezik, a D tárolón alacsony jelszint másolódik át a kimenetre. Így sosem fordul elő, hogy magas jelszint lesz a kimeneten.

Mit hoztunk így létre? Két kimenetünk van. Az egyik akkor ad négyszögjelet ha balra forgatjuk a gombot, a másik pedig akkor ad jelet, ha jobbra forgatjuk. Ezt a mikrovezérlőnek is sokkal barátságosabb feldolgozni és a hibajavítás is LED-ekkel megvalósítható.

Miért van a rotary encoderen az ellenállás-kondenzátor páros? Nemes egyszerűséggel a pergés elkerülése végett. Ha ezt kihagyjuk, csak annyit vesztünk, hogy az áramkör egyáltalán nem fog működni.

Íme egy gyors (kimondottan rossz minőségű) videó:







Hozzászólások:


Hozzászólás beküldése (nyisd le)