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