Debounce af knapper og andet (Læst 5355x)

Offline kjoller

  • U=I*R
  • ***
  • Indlæg: 45
  • Antal brugbare Indlæg: 8
    • Vis profil
    • The Electronic Map Room
Debounce af knapper og andet
« Dato: Januar 31, 2014, 07:57:23 »
Hej folkens

Hermed min første post på Dansk Elektronik Forum :-)

Jeg ville høre hvad folk normalt gør ift. at undgå støj på knapper, primært ifb. microcontrollere. Ind til videre har jeg brugt software debounce (sådan noget med et delay, og tjek om den virkeligt mener det).

Den længere historie:
Jeg ville se på rotary encoders, som i virkeligheden er to knapper/kontakter, der skifter som man drejer på håndtaget. I datasheet på en tilfældig sådan én er der beskrevet et kredsløb ala dette:



Altså, hvor der per kontakt er 2x10k modstand og 1x10nF kondensator. Den éne modstand er en almindelig pull-up, men hvad er den anden til? Jeg har set andre kredsløb hvor man bare bruger én pull-up-modstand og en kondensator. Tilfældigt google-resultat:



Hvis jeg skulle gætte, så handler det om at man bruger modstanden til at give mere mere tid til kondesatoren, så man kan nøjes med en mindre dims? Hvis jeg estimerer tidskonstanten for en 10k-modstand + 10nF-kondensator (R*C=T), så giver det 10.000ohm*0,00001F ~= 0,1s, hvilket vel lyder meget rimeligt for en debounce?

Men kan jeg spare en modstand væk? Jeg tænker at lave en mini-printkort, hvor jeg kan sætte en Rotary Encoder på, og så har jeg et anvendeligt standard-modul jeg kan bruge.

Som en advarsel, så bruger jeg hvad jeg husker fra elektronik i ungdomsskolen (15 år siden), fysik i gymnasiet (12 år siden) og hvad jeg har kunnet læse mig til i diverse elektronik-bøger fra biblioteket. Så bær venligst over med mig :-)


 

Offline gerd

  • Administrator
  • µProcessoren
  • *****
  • Indlæg: 915
  • Antal brugbare Indlæg: 97
    • Vis profil
    • Hjemmeside med nogle af mine projekter
Sv: Debounce af knapper og andet
« Svar #1 Dato: Januar 31, 2014, 20:18:46 »
Hej Niels,

Forslag 1 (ENCODER):
med 2x 10k modstande og en 10nF kondensator er tidskonstanten:  2 x 10k x 10nF = 200µs.
Hvis du lukker kontakten: 1 x 10k x 10nF = 100µs.

Forslag 2 (ikalogic.com):
Med en 10k modstand og en 10nF kondensator:  1 x 10k x 10nF = 100µs.
Og hvis du lukker kontakten: 1 x 0R x 10nF = 0µs!!
Hvis C1 er stort ( mere en 1µF) , du hat også en høj kortslutningsstrøm.

Der er forskellige encoder algoritmer. Den bedste (synes jeg) er en med en state tabel. Denne behøver ingen debouncing.

gerd

 

Offline kjoller

  • U=I*R
  • ***
  • Indlæg: 45
  • Antal brugbare Indlæg: 8
    • Vis profil
    • The Electronic Map Room
Sv: Debounce af knapper og andet
« Svar #2 Dato: Januar 31, 2014, 20:59:19 »
Ah, det giver mening - jeg havde lige glemt at tænke at der jo er to modstande når kontakten er åben (mod positiv), og kun én når den er lukket (mod jord).

Så vidt jeg kan læse mig til, så er gør en state table (tilstandstabel?)-algoritme at man ikke kommer til at skifte retning. Men det kan vel godt betyde at man kan misse et klik (eller måske også få et klik for meget, men så skal man vist være uheldig, eller hvordan - jeg er lidt træt :-)

Det ligner lidt, at hvis jeg gerne vil lave debounce, så er det bedst at lave det med to modstande.

Nå, men i hvertfald, så har jeg lavet følgende print, som jeg har bestilt et par prototyper på:





Jeg har naturligvis sørget for at der er 2,54mm mellemrum mellem pins, så de kan placeres på et breadboard.

Jeg vil glæde mig til de dukker op :-)

 

Offline janengelbrecht

  • Op-amp
  • ***
  • Indlæg: 211
  • Antal brugbare Indlæg: 23
    • Vis profil
    • Personlig hjemmeside
Sv: Debounce af knapper og andet
« Svar #3 Dato: Februar 01, 2014, 03:29:21 »