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í. 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. 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í. 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. 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. Poslední aktualizace: 17.3.2007 |