Použití rotačních enkodérů

   Co jsou to vlastě rotační enkodéry? Někdy jsou označované jako inkrementační čidla nebo prostě "točítka" a jistě se s nimi každý seznámil. Používají se již řadu let například v monitorech (v kombinaci s axiálním tlačítkem), v mikrovlnkách v hifi soustavách, transceiverech, měřících přístrojích a mnoha dalších. V průmyslových aplikacích se pak často používají jako zpětná vazba pohonů (právě zde pod názvem inkrementální čidla). Jistou modifikací je například i kolečko myši. Při otáčení rotačním enkodérem jsou generovány impulzy a pomocí logiky nebo MCU z nich lze snadno zjistit směr otáčení.
   Hlavním důvodem proč jsem se rozhodl pro tento článek je, že firma GME před lety začala prodávat mechanické enkodéry v několika provedeních a za rozumné ceny (kolem 50KČ), takže se tento ovládací prvek zdá být perspektivní. Navíc cena je srovnatelná se třemi kvalitnějšími tlačítky, které dokáže nahradit.
   Sehnat lze i optické inkrementační snímače s několika stovkami kroků na otáčku (za patříčně mastnou cenu). Pro aplikace jako je třeba ladění přijímačů, kde je třeba přelaďovat rychle v tisících krocích, jsou jak stvořené právě rychlé optické rotační enkodéry. Ideálním zdrojem těchto enkodérů jsou staré dobré kuličkové myšítka. Především starší typy lze pohodlně rozebrat a po doplnění hřídelí z potenciometru normálně zabudovat.


Princip funkce

   Celá finta spočívá v tom, že enkodér generuje 2 obdélníkové průběhy fázově posunuté o přibližne 90°. Pak jednoduše při jedné hraně jednoho průběhu čteme stav druhého signálu a podle toho, zda je v log.1 nebo log.0 přičítáme nebo odečítáme.


   Základní zapojení mechanických enkodérů můžete vidět na následujícím schématu. Zde nastává menší problém. Jelikož jde o mechanické kontakty, tak pochopitelně produkují zákmity. Proto jsou na zem zapojeny malé keramické kondenzátory. S jejich hodntou je třeba experimentovat a zvolit kompromis mezi potlačením zákmitů a maximální rychlostí otáčení. Pro vyšší odolnost proti rušení lze odpory zmenšit a konenzátory zvětšit, ale je třeba mít na paměti maximální proud kontakty! Jeho překročení značně zkracuje životnost, která se pohybuje od 10000 otočení výše.


   Pro optické enkodéry z myšítek je ješte velmi vhodné doplnit schmittovy klopné obvody, které zajistí úrovně vhodné pro danou logiku a užitečnou hysterezi.


   Při použití MCU (většiny) stačí zapnout interní zvedací odpory, takže se připojí jen kondenzátory. Jeden pin se připojuje na přerušovací vstup, druhý na libovolný I/O pin.


AVR - jednoduchá přesnost

   Jde o základní mód - inkrementace/dekrementace proměnné je zde prováděna jen při jedné hraně signálu. V demu jsem k tomuto účelu zvolil sestupnou hranu. Princip je snadný. Jeden pin je připojen na přerušovací vstup INT0, druhý na libovolný volný pin. Při vyvolání přerušení jednoduše přečteme stav druhého pinu a dle toho inkrementujeme nebo dekermentujeme proměnnou. Při opuštění rutiny ještě pro jistotu nulujeme přiznak přerušení, pokud náhodou došlo k zákmitům. Důležité je především zajistit, aby přerušení nebylo nikdy delší dobu zablokované, jinak by po odblokování mohlo dojít ke zpožděnému vyvolání přerušení a čtení pinu pro určení směru v době, kdy už je na něm dávno jiná úroveň! Pokud už se v programu vyskytuje takový úsek programu, či jiné delší přerušení, kde není možné povolit přerušení alespoň rotačnímu enkodéru, tak je alespoň nutné na konci tohoto úseku kódu nulovat příznak pulzu externího přerušení. Sice se ztratí ipulz, ale je to lepší než nejistota výsledku. Pro zobrazování je použit LCD s rozlišením alespoň 1x8 znaků. Inicializace je ale provedena do 2 řádkového módu, protože jiné LCD nemám. Stačí ale změnit jedno číslo v inicializaci a je po problému.
Zdrojáky


AVR - dvojitá přesnost

   Vzhledem k tomu, že lze vyvovolávat přerušení jak na vzestupnou tak na sestupnou hranu (pouze s opačným významem druhého výstupu enkodéru), tak samozřejmě není problém využít obě hrany najednou. Čili povolí se přerušení na obě hrany (pro AVR logical change) a v obsluze přerušení pak navíc musíme rozlišit zda šlo o přerušení sestupnou či vzestupnou hranou a podle toho v jednom z těchto případů obrátit funkci druhého výstupu (např. setupná při log.1 odečítat, vzestupná při log.1 přičítat). Dosáhne se tak 2x více pulzů na stejný úhel otočení. Tato metoda je ale použitelná jen pro optické enkodéry. Mechanické se netočí plynule, ale v krocích, takže by došlo vždy k dvojnásobnému přičtení.
Zdrojáky

AVR - čtyřnásobná přesnost

   Jak je asi zřejmé, výstupy enkodéru jsou plně zaměnitelné (opět pouze se změnou významu druhého výstupu), takže nám opět nic nebrání vyvolávat přerušení oběma výstupy enkodéru. Obsluha druhého výstupu enkodéru je pak naprosto stejná jako, obsluha prvního, ale s opačnou funkcí - všude je prohozené přičítání/odečítání. Čtyřnásobná přesnost je velmi výhodná pro již zmiňované ladění s jemným frekvenčním krokem.
Zdrojáky

AVR - jemná a hrubá regulace jedním ovládacím prvkem

   Tu a tam se vyskytne situace, kdy je třeba danou proměnnou měnit jak jemně v jednotkách, tak hrubě ve stovkách až tisících. Žádná z předchozích možností tomuto příliš nevyhovuje. Proto je třeba nějakým způsobem zajistit, aby při pomalém otáčení docházelo k přírůstku v jednotkách a od určité rychlosti otáčení se závislost velikosti přírůstku proměnné na rychlosti otáčení změní na třeba mocninnou. Múže to znít komplikovaně, ale je to vlastně velmi jednoduché. Stačí si vytvořit čítač s vhodnou periodou (třeba 1ms) a měřit pomocí něj kmitopčet pulzů. Do jisté periody pulzů přičítat po jedné a od této periody pak přičítat přírůstky dle vhodně sestavené tabulky perioda-přírůstek. Nastavení tabulky není zrovna nejjednodušší, ale po asi deseti pokusech lze obvykle dosáhnout tíženého výsledku. Musí se zde vzít v úvahu především maximální otáčky, jaké lze dosáhnout bez omezení vnějšimi kondenzátory.
Zdrojáky

Poslední aktualizace: 17.3.2007