Rotační enkodér ALPS
Moderátori: psichac, Moderátori
Rotační enkodér ALPS
Zdravím,
už si nevím rady, tak zkusím poprosit zdejší osazenstvo za nasměrování. Koupil jsem si tento rotační enkodér http://www.gme.cz/img/cache/doc/532/039 ... heet-1.pdf a mám problém z jeho zpracováním. Zkoušel jsem vícero možností detekce směru otáčeni. První z nich byla jeden z výstupů enkodéru na externí přerušení a v přerušení sledovat druhou hranu. Tento způsob fungoval, ale enkodér byl strašně citlivý a nepřesný (proto jsem jej zavrhl). Lépe co se týče stability se osvědčilo přerušení od timeru každých 252us. Teď vlastně k tomu na co nemůžu přijít. Ona jedna perioda je složená ze 4 pulzů (pro jeden směr je to výstup A: 0110 výstup B: 1100 a pro druhý směr je to A: 1100 a B: 0110) a já absolutně netuším jak ty 4 pulzy sejmout. Jedině jak mi to fungovalo bylo čekání na změnu stavů a když k ní došlo posunout se ve stavovém automatu. Takhle to fungovalo přesně podle mých představ, ale program je zacyklený na místě a nemůžu dělat nic jiného (což je nežádoucí stav ). Hledal jsem všude možně (i zde) a našel jen hotové konstrukce bez zdrojáků a nebo to lidi řešili přerušením. Předem díky za každou radu.
Jirka
už si nevím rady, tak zkusím poprosit zdejší osazenstvo za nasměrování. Koupil jsem si tento rotační enkodér http://www.gme.cz/img/cache/doc/532/039 ... heet-1.pdf a mám problém z jeho zpracováním. Zkoušel jsem vícero možností detekce směru otáčeni. První z nich byla jeden z výstupů enkodéru na externí přerušení a v přerušení sledovat druhou hranu. Tento způsob fungoval, ale enkodér byl strašně citlivý a nepřesný (proto jsem jej zavrhl). Lépe co se týče stability se osvědčilo přerušení od timeru každých 252us. Teď vlastně k tomu na co nemůžu přijít. Ona jedna perioda je složená ze 4 pulzů (pro jeden směr je to výstup A: 0110 výstup B: 1100 a pro druhý směr je to A: 1100 a B: 0110) a já absolutně netuším jak ty 4 pulzy sejmout. Jedině jak mi to fungovalo bylo čekání na změnu stavů a když k ní došlo posunout se ve stavovém automatu. Takhle to fungovalo přesně podle mých představ, ale program je zacyklený na místě a nemůžu dělat nic jiného (což je nežádoucí stav ). Hledal jsem všude možně (i zde) a našel jen hotové konstrukce bez zdrojáků a nebo to lidi řešili přerušením. Předem díky za každou radu.
Jirka
0
Re: Rotační enkodér ALPS
Skus to pre zaciatok urobit uplne primitivne - defakto to bude ekvivalent toho, co sa robi s prerusenim (ale bude to mat jasne a predvidatelne casovanie).
Teda pri kazdom preruseni si skontroluj, ci nastala hrana signalu - teda sa zmenila uroven na jednom zo vstupov, trebars A. Ak sa zmenila, pozri na pin B. Ak je jednotka, premennu zvysujes, ak je nula, znizujes. Toto by malo fungovat.
Mozes urobit jednoduchy debouncing - pamatas si posledne tri stavy vstupu A. Ak sa posledne dva zhoduju a uplne posledny je opacny, nastala hrana.
Mozno uz tato jednoducha verzia ti bude stacit.
Jo a hardware. Zvyknem davat za enkoder dolnopriepustny RC clen, tak aby odfikol rychle prekmity. Este lepsie je dat za to jedno hradlo so schmittovym vstupom, trebars 47HC14 alebo 40106. Nesmierne si tym zjednodusis pracu.
Treba mysliet na to, ze po roku-dvoch pouzivania ten enkoder nebude jazdit tak dobre ako zamlada a genrovat viac zakmitov, takze riesenie, ktore bolo "tak akurat", bude robit "hluposti".
Teda pri kazdom preruseni si skontroluj, ci nastala hrana signalu - teda sa zmenila uroven na jednom zo vstupov, trebars A. Ak sa zmenila, pozri na pin B. Ak je jednotka, premennu zvysujes, ak je nula, znizujes. Toto by malo fungovat.
Mozes urobit jednoduchy debouncing - pamatas si posledne tri stavy vstupu A. Ak sa posledne dva zhoduju a uplne posledny je opacny, nastala hrana.
Mozno uz tato jednoducha verzia ti bude stacit.
Jo a hardware. Zvyknem davat za enkoder dolnopriepustny RC clen, tak aby odfikol rychle prekmity. Este lepsie je dat za to jedno hradlo so schmittovym vstupom, trebars 47HC14 alebo 40106. Nesmierne si tym zjednodusis pracu.
Treba mysliet na to, ze po roku-dvoch pouzivania ten enkoder nebude jazdit tak dobre ako zamlada a genrovat viac zakmitov, takze riesenie, ktore bolo "tak akurat", bude robit "hluposti".
0
Re: Rotační enkodér ALPS
ano, sprav to ako pise jaromir, na zaciatok je to dobra volba
trebars pin A daj na ext prerusenie INTx, pin B daj na obycajny v/v pin, obidva piny mcu nastav ako vstup so zapnutymi internymi pull-upmi, dalej zakmity na pine A jednoducho zatlmis pridanim rc clena alebo len kondenzatora, mam odskusane 22n s dobrymi vysledkami.
v obsluhe extern. prerusenia hned na zaciatku obsluhy zakaz toto prerusenie, dalej testuj stav pinu B, na zaklade vysledku si inkrementuj/dekrementuj nejaku premennu, pred opustenim prerusenia znova povol toto prerusenie...
trebars pin A daj na ext prerusenie INTx, pin B daj na obycajny v/v pin, obidva piny mcu nastav ako vstup so zapnutymi internymi pull-upmi, dalej zakmity na pine A jednoducho zatlmis pridanim rc clena alebo len kondenzatora, mam odskusane 22n s dobrymi vysledkami.
v obsluhe extern. prerusenia hned na zaciatku obsluhy zakaz toto prerusenie, dalej testuj stav pinu B, na zaklade vysledku si inkrementuj/dekrementuj nejaku premennu, pred opustenim prerusenia znova povol toto prerusenie...
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html
predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154
http://www.jk-elektronika.info/index.html
predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154
Re: Rotační enkodér ALPS
V přerušení od hrany signálu A máš kontrolovat statický stav signálu B a né čekat na hranu Bčka.
Jeden drát dej prostě na přerušení, které se bude aktivovat hranou, a druhý drát vždy při vyvolání přerušení přečteš. Podle toho, jestli na druhém drátu bude 0 nebo 1 se rozhodne, na kterou stranu se točilo.
Nic víc, nic míň.
Jeden drát dej prostě na přerušení, které se bude aktivovat hranou, a druhý drát vždy při vyvolání přerušení přečteš. Podle toho, jestli na druhém drátu bude 0 nebo 1 se rozhodne, na kterou stranu se točilo.
Nic víc, nic míň.
Re: Rotační enkodér ALPS
ano, este som zabudol dodat, ze extern. prerusenie treba nastavit na zostupnu hranu "falling edge"
dalej ako pise kolega v obsluhe prerusenia zisti stav pinu B a na zaklade vysledku zistis smer otacania - treba overit pokusom
dalej ako pise kolega v obsluhe prerusenia zisti stav pinu B a na zaklade vysledku zistis smer otacania - treba overit pokusom
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html
predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154
http://www.jk-elektronika.info/index.html
predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154
Re: Rotační enkodér ALPS
Napad s externym prerusenim, aj ked je casto pouzivany, sa mi nepaci.
Enkoder moze (a bude) generovat kopu zakmitov, ktore budu prerusenie opakovane spustat po sebe - a so starnutim enkoderu sa to zhorsuje. Da sa tomu mierne pomoct kondikmi na vyvodoch enkoderu, ale tie kondiky sa vybijaju do jeho spinacich prvkov, co im moze zmensit zivotnost. Tusim som niekedy videl datasheet alebo AN vyrobcu, kde bol popisany vplyv kapacity kondiku na zivotnost kontaktov. Lepsie by bolo pouzit DP RC filter. Za takychto okolnosti (zvlast ak sa signal prezenie cez hradlo so schmittom) by som akceptoval aj externe prerusenie.
Ale stale je jednoduchsie na programatorsku pracu a ladenie programu (ano, program netreba len napisat, ale aj otestovat) pouzit prerusenie od timera s fixnou periodou, trebars tych +-250us a v nom kontrolovat stavy pinov A a B.
Enkoder moze (a bude) generovat kopu zakmitov, ktore budu prerusenie opakovane spustat po sebe - a so starnutim enkoderu sa to zhorsuje. Da sa tomu mierne pomoct kondikmi na vyvodoch enkoderu, ale tie kondiky sa vybijaju do jeho spinacich prvkov, co im moze zmensit zivotnost. Tusim som niekedy videl datasheet alebo AN vyrobcu, kde bol popisany vplyv kapacity kondiku na zivotnost kontaktov. Lepsie by bolo pouzit DP RC filter. Za takychto okolnosti (zvlast ak sa signal prezenie cez hradlo so schmittom) by som akceptoval aj externe prerusenie.
Ale stale je jednoduchsie na programatorsku pracu a ladenie programu (ano, program netreba len napisat, ale aj otestovat) pouzit prerusenie od timera s fixnou periodou, trebars tych +-250us a v nom kontrolovat stavy pinov A a B.
0
Re: Rotační enkodér ALPS
Já to špatně napsal dělal jsem to s tím přerušením jak píšete sestupná hrana a kontrolovat co je v Bčku, ale to bylo k ničemu. Jak píše jaromir, žilo si to vlastním životem . Zkusím to doplnit o to hradlo s DP. Zatím díky.
0
Naposledy upravil/-a StavJi v 23 Jan 2014, 22:14, upravené celkom 1 krát.
Re: Rotační enkodér ALPS
Na enkodér dej kapacity 22n, pullup odpory tak 20-30 kilo. Hradlo se zákmitama nic neudělá. Leda SKO hradlo, a to taky nebude nijak moc jistý si myslim.
Krom toho, zákmity lze velmi snadno ošetřit SW v procesoru.
//Bylo myšleno hradlo samostatně.
Krom toho, zákmity lze velmi snadno ošetřit SW v procesoru.
//Bylo myšleno hradlo samostatně.
Naposledy upravil/-a Hinsi v 23 Jan 2014, 22:35, upravené celkom 1 krát.
Re: Rotační enkodér ALPS
hinsi, o schmittovi som pisal uz predtym a radil som pred to zaradit DP filter. Prosim, citaj co pisem skor nez to zacnes spochybnovat
O odstranovani zakmitov - a vobec, sposobe ako sa to ma robit poriadne a nielen aby to "nejako" fungovalo, som pisal vyssie.
O odstranovani zakmitov - a vobec, sposobe ako sa to ma robit poriadne a nielen aby to "nejako" fungovalo, som pisal vyssie.
0
Re: Rotační enkodér ALPS
No ja to mam urobene cez prerusenie (INT) na hocijaku hranu. V preruseni skontrolujem druhy pin a podla lookup tabulky viem ktorym smerom tocim. Este je tam jden kondik (debounce) a slape to 100%
0
Re: Rotační enkodér ALPS
no to mne tiez . ale treba si tu uvedomit, ze konstrukcia mechanickeho enkoderu je az trapne primitivna. az sa s tych tenkych, neustale sa otierajucich materialov stanu lizatka, situacia sa rapidne zmeni k horsiemu. plne suhlasim s jaromirovym nazorom, cim lepsie to osetris pri stavbe, tym lepsie { a dlhsie } pre teba
0
Re: Rotační enkodér ALPS
Alebo som v jednej aplikacii pouzil enkoder zo starej mysi. Tam je optika. Pridal som najeky Schmidt a slapalo to (vlastne stale slape) bez problemou.
0
Re: Rotační enkodér ALPS
Opticky enkoder je ina kava, tam to so zakmitmi nie je az take zhave (hoci mozu byt a byvaju).
Ale priviest signal z mechanickeho kontaktu (je lahostajne ci enkoder alebo tlacidlo) do prerusovacieho vstupu MCU (alebo do akehokolvek logickeho obvodu citliveho na hranu signalu, trebars hodiny citaca atd...) je IMHO velmi zle. Moze to nejako fungovat, ale rozhodne si tak nepredstavujem spolahlivy system.
Ale priviest signal z mechanickeho kontaktu (je lahostajne ci enkoder alebo tlacidlo) do prerusovacieho vstupu MCU (alebo do akehokolvek logickeho obvodu citliveho na hranu signalu, trebars hodiny citaca atd...) je IMHO velmi zle. Moze to nejako fungovat, ale rozhodne si tak nepredstavujem spolahlivy system.
0
- Washu
- Power user
- Príspevky: 4521
- Dátum registrácie: 15 Apr 2010, 00:00
- Bydlisko: Multiverse
- Vek: -1998
- Kontaktovať používateľa:
Re: Rotační enkodér ALPS
jaromir: Niektore MCU maju shmitt uz integrovany
0
It doesn't matter how beautiful your theory is, it doesn't matter how smart you are. If it doesn't agree with experiment, it's wrong
(Richard Feynman)
(Richard Feynman)
Re: Rotační enkodér ALPS
washu: niektore MCU maju aj kompletnu periferiu pre rotacny enkoder aj s poriadne urobenym potlacenim zakmitov, ale snazil som sa byt vseobecny, aj pre tie MCU, ktore nemaju kde-ake fajnovosti
0
Re: Rotační enkodér ALPS
..nech si skusi obe varianty, aspon sa nauci...
v dvoch zariadeniach to mam spravene ako som pisal hore, prerusenie INTx pin A, zabite kondikom 22n voci gnd, pin B na iny v/v pin, obidva nastavene ako vstupy s pull-up-om. prerusenie nastavene na zostupnu hranu. V obsluhe hned zakazujem dane prerusenie, takze nemoze uz prist dalsie, po teste pinu B sa znova povoluje. 4rocny chalanisko stym toci denodenne (samozrejeme nie stale ) a bez problemov funguje, je tam osadeny plastovy APLS 24i/24ot. V dalsom zariadeni to mam cez casovac, ale tam mam 4 ennkodery
v dvoch zariadeniach to mam spravene ako som pisal hore, prerusenie INTx pin A, zabite kondikom 22n voci gnd, pin B na iny v/v pin, obidva nastavene ako vstupy s pull-up-om. prerusenie nastavene na zostupnu hranu. V obsluhe hned zakazujem dane prerusenie, takze nemoze uz prist dalsie, po teste pinu B sa znova povoluje. 4rocny chalanisko stym toci denodenne (samozrejeme nie stale ) a bez problemov funguje, je tam osadeny plastovy APLS 24i/24ot. V dalsom zariadeni to mam cez casovac, ale tam mam 4 ennkodery
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html
predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154
http://www.jk-elektronika.info/index.html
predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154
Re: Rotační enkodér ALPS
To jsem taky mohl napsat. Nejde o žádný high end procesor, jedná se atmegu88p, která takové vychytávky nemá .
To přerušení se mi nelíbí ještě v jedné věci. Potřebuju si měnit krok iterace a strop, což nevím jak bych v přerušení (externí) elegatně vyřešil. Zapojím to tedy podle schématu níže a uvidíme co z toho bude .
EDIT: upraveno schema dle rad jaromira
To přerušení se mi nelíbí ještě v jedné věci. Potřebuju si měnit krok iterace a strop, což nevím jak bych v přerušení (externí) elegatně vyřešil. Zapojím to tedy podle schématu níže a uvidíme co z toho bude .
EDIT: upraveno schema dle rad jaromira
0
Naposledy upravil/-a StavJi v 27 Jan 2014, 19:56, upravené celkom 2 krát.
Re: Rotační enkodér ALPS
100k/10n mi pride ako trochu velka casova konstanta, ja zvyknem pouzivat nieco okolo 10k/22n. Pull-up odpory na enkoder by som dal 4k7. Inak - takto aj ja ostrujem vystupy z enkoderu.
Pri tom externom preruseni by sa to dalo vyriesit pouzitim dalsieho timera - takze by si skoncil na kombinacii externe prerusenie, timer + trochu matematiky.
Ak pouzijes risenie, ktore tu dokola omielam ja (a nielen v tomto diskusnom vlakne), tak potrebujes len prerusenie od timera + trochu matematiky - teda jednoduchsie a okrem toho aj "systemovo" spravnejsie riesenie
Pri tom externom preruseni by sa to dalo vyriesit pouzitim dalsieho timera - takze by si skoncil na kombinacii externe prerusenie, timer + trochu matematiky.
Ak pouzijes risenie, ktore tu dokola omielam ja (a nielen v tomto diskusnom vlakne), tak potrebujes len prerusenie od timera + trochu matematiky - teda jednoduchsie a okrem toho aj "systemovo" spravnejsie riesenie
0
Re: Rotační enkodér ALPS
no a ked tie vystupy z enkodera zapojis na nejake dva piny vedla seba tak potom sa bude elegantne dat pouzit lookup tabulka na urcenie smeru.
0