Enkoder a debounce v preruseni
Pavel Kutina
hw na prelude.cz
Čtvrtek Říjen 22 14:57:40 CEST 2015
Zdravim,
nemate nekdo nejaky vhodny algoritmus na likvidaci zakmitu pro enkoder? Mam
STM32F103, na nem na pinu PORT.B0 a B1 laciny, osklivy cinsky enkoder
(pull-upy 10k na 3V3, pull-upy zapnute i na procesoru, abych aspon trochu
zvetsil proud skrz kontakty), preruseni obe obe hrany na B0.
Zatim zkousim ten nejjednodussi algoritmus - hrana mi vygeneruje na B0
preruseni, ja se podivam, jaky je stav na druhem pinu a podle toho se
rozhodnu, jestli prictu nebo odectu z nejake globalni promenne.
V idealnim svete by to stacilo - samozrejme binec delaji ruzne zakmity.
Enkoder produkuje spoustu smeti, zatim jsem to "vyresil" tak, ze po spusteni
preruseni nactu stav pinu, pockam nejakou dobu (cca 300us), nactu stav
znovu, a pokud se stavy nelisi, popojedu ve zpracovani o kus dal. Totez u
druheho pinu. Idealni to neni, ty nejvetsi hruzy to sice odfiltruje, ale
prinasi to dalsi problemy, treba ze pri rychlem protoceni enkoderu to diky
zpozdeni misto pricteni zacne odecitat.
Nemate nekdo nejaky vyzkouseny algoritmus? (Nemluvim o kodu, protoze
nepredpokladam, ze by tu STM32 pod MikroE Pascalem krome me jeste nekdo
pouzival) Idealne nejak zdokumentovany, aby to pochopil i idiot?
S titmtez enkoderem na Arduinu (ovsem s pouzitim cizi knihovny - ze ktrere
to ovsem nejsem schopen pochopit a opsat - tusim, ze je to ona:
http://www.buxtronix.net/2011/10/rotary-encoders-done-properly.html) nemam
problem, co se tyka generovani falesnych pulsu ani rychlosti toceni -
evidentne to tedy odfiltrovat jde... V te zminene knihovne autor pozuiva
nejake stavove tabulky, ale evidentne nejsem "technologicky na vysi" a
nechapu to (pravda je, ze uz jsem taky tri dny prakticky nespal).
Diky za pomoc.
Pavel Kutina
Další informace o konferenci Hw-list