Rotační enkodér ALPS

C,C++,C#

Moderátori: psichac, Moderátori

StavJi
Okoloidúci
Okoloidúci
Príspevky: 42
Dátum registrácie: 22 Jan 2014, 14:01
Bydlisko: Olomouc

Rotační enkodér ALPS

Príspevok od používateľa StavJi » 23 Jan 2014, 21:00

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
0

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa jaromir » 23 Jan 2014, 21:12

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".
0

Používateľov profilový obrázok
tom666
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1344
Dátum registrácie: 05 Máj 2009, 00:00
Bydlisko: NR

Re: Rotační enkodér ALPS

Príspevok od používateľa tom666 » 23 Jan 2014, 21:18

0

Používateľov profilový obrázok
Kado
Power user
Power user
Príspevky: 1625
Dátum registrácie: 02 Sep 2007, 00:00
Bydlisko: PB
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa Kado » 23 Jan 2014, 21:32

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...
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

Hinsi

Re: Rotační enkodér ALPS

Príspevok od používateľa Hinsi » 23 Jan 2014, 21:40

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íň.

Používateľov profilový obrázok
Kado
Power user
Power user
Príspevky: 1625
Dátum registrácie: 02 Sep 2007, 00:00
Bydlisko: PB
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa Kado » 23 Jan 2014, 21:53

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
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

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa jaromir » 23 Jan 2014, 22:01

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.
0

StavJi
Okoloidúci
Okoloidúci
Príspevky: 42
Dátum registrácie: 22 Jan 2014, 14:01
Bydlisko: Olomouc

Re: Rotační enkodér ALPS

Príspevok od používateľa StavJi » 23 Jan 2014, 22:09

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.

Hinsi

Re: Rotační enkodér ALPS

Príspevok od používateľa Hinsi » 23 Jan 2014, 22:14

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ě.
Naposledy upravil/-a Hinsi v 23 Jan 2014, 22:35, upravené celkom 1 krát.

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa jaromir » 23 Jan 2014, 22:17

hinsi, o schmittovi som pisal uz predtym a radil som pred to zaradit DP filter. Prosim, citaj co pisem skor nez to zacnes spochybnovat :roll:
O odstranovani zakmitov - a vobec, sposobe ako sa to ma robit poriadne a nielen aby to "nejako" fungovalo, som pisal vyssie.
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: Rotační enkodér ALPS

Príspevok od používateľa dan21 » 23 Jan 2014, 22:28

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

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: Rotační enkodér ALPS

Príspevok od používateľa petersno » 23 Jan 2014, 22:40

no to mne tiez :D . 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 :wink:
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: Rotační enkodér ALPS

Príspevok od používateľa dan21 » 23 Jan 2014, 22:53

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

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa jaromir » 23 Jan 2014, 23:02

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.
0

Používateľov profilový obrázok
Washu
Power user
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

Príspevok od používateľa Washu » 24 Jan 2014, 00:06

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)

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa jaromir » 24 Jan 2014, 08:12

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

Používateľov profilový obrázok
Kado
Power user
Power user
Príspevky: 1625
Dátum registrácie: 02 Sep 2007, 00:00
Bydlisko: PB
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa Kado » 24 Jan 2014, 10:44

..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 :D) 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

StavJi
Okoloidúci
Okoloidúci
Príspevky: 42
Dátum registrácie: 22 Jan 2014, 14:01
Bydlisko: Olomouc

Re: Rotační enkodér ALPS

Príspevok od používateľa StavJi » 24 Jan 2014, 21:04

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
Prílohy
enkoder.png
0
Naposledy upravil/-a StavJi v 27 Jan 2014, 19:56, upravené celkom 2 krát.

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: Rotační enkodér ALPS

Príspevok od používateľa jaromir » 24 Jan 2014, 21:15

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 :)
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: Rotační enkodér ALPS

Príspevok od používateľa dan21 » 24 Jan 2014, 22:22

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

Napísať odpoveď