Innholdsfortegnelse:
Video: Enkel roterende dekoder: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Denne instruksen beskriver en enkel metode for å dekode en sekvensiell roterende encoder ved hjelp av en Arduino Uno R3.
Kompakte programvarerutiner brukes til å telle antall overganger, eliminere kontaktstopp og bestemme rotasjonsretningen. Ytterligere komponenter og oppslagstabeller er ikke nødvendig.
Avbrudds- og ikke-avbruddsversjoner av koden er gitt.
Avbruddsversjonen av koden krever bare en enkelt avbruddsnål.
Bilder:
- Åpningsbildet viser den monterte encoderen.
- Skjermbildet viser koden for interrupt -versjonen og tellingen når encoder -akselen roteres med og mot klokken.
- Videoen viser tellingen under rask rotasjon.
Trinn 1: Kretsdiagram
Koderens koblingsskjema er vist i fig.1.
Hoppetrådene er loddet direkte til koderne.
Bytt ut de to blå ledningene hvis telleretningen er omvendt.
Trinn 2: Deleliste
Følgende deler ble hentet fra
- 1 bare Arduino UNO R3 med USB -kabel.
- 1 bare sekvensiell roterende encoder (EC11 eller tilsvarende) med bryter.
- 1 eneste ratt som passer til akselen.
- 3 bare Arduino mann-til-mann-jumperledninger.
Trinn 3: Teori
Sekvensielle roterende kodere genererer to kvadratbølger som hver er forskjøvet 90 grader som vist på figur 1.
Logikkmønstrene ved kontakt A og kontakt B er forskjellige når akselen roteres med klokken (CW) og mot klokken (CCW) gjennom posisjonene 1 til 6.
Vanlige metoder for å bestemme rotasjonsretningen inkluderer:
- maskinvare
- tvilling avbryter
- mønsteroppslagstabeller
Dette prosjektet bruker en programvaremetode som ikke krever oppslagstabeller. [1]
Retning
I stedet for å se på utskriftsmønstrene fra kontakt A og kontakt B, la oss fokusere på kontakt A.
Hvis vi prøver kontakt B etter hver kontakt A -overgang, merker vi at:
- Kontakt A og kontakt B har motsatte logiske tilstander når koderen roteres CW
- Kontakt A og kontakt B har samme logiske tilstand når koderen roteres motsatt
Faktisk kode:
// ----- Telle overganger
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Denne metoden gir følgende fordeler:
- oppslagstabeller er ikke nødvendig
- bare en enkelt avbruddslinje kreves
Debounce
Alle mekaniske kodere lider av "kontaktstopp".
Hvis en bryterkontakt ikke gjør/bryter rent, vil dens logiske tilstand svinge raskt fra HØY til LAV til bryterkontakten setter seg. Dette resulterer i falske tellinger.
En metode for å undertrykke kontaktstopp er å legge til en liten kondensator på tvers av hver bryterkontakt. Kondensatoren og tilhørende pull-up-motstand danner en integrator som effektivt kortslutter høye frekvenser og lar bryterspenningen stige/falle grasiøst.
Ulempen med denne tilnærmingen er at overganger kan gå glipp av hvis koderakselen roteres raskt.
Debonnering av programvare
Denne metoden bruker to tellere (åpen, lukket) som er satt til null. [2]
Når en overgang er oppdaget på kontakt A:
- Kontinuerlig avstemning Kontakt A.
- Øk den åpne telleren, og tilbakestill den lukkede telleren når kontakt A er HØY.
- Øk den lukkede telleren, og tilbakestill den åpne telleren når kontakt A er lav.
- Gå ut av sløyfen når en av tellerne når et forhåndsbestemt antall. Vi leter effektivt etter steady state -perioden etter kontaktstopp.
Faktisk kode:
// ----- Avslutt kontakt A
mens (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Tom motsatt integrator Open ++; // Integrer hvis (Open> MaxCount) returnerer HIGH; } annet {// ----- ContactA is Closed Open = 0; // Tom motsatt integrator Closed ++; // Integrer hvis (Closed> MaxCount) returnerer LOW; }}
Det er ikke nødvendig å avbryte kontakt B, ettersom kontakt A- og kontakt B -overgangene ikke er sammenfallende.
Teller
En mekanisk "sperring" dobler effektivt tellingen din da to tellinger registreres mellom klikk (se fig 1).
Antall "sperrer" kan bestemmes ved bruk av modulo 2 -aritmetikk som vist nedenfor.
Faktisk kode:
// ----- Count "detents"
if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (Count / 2); }
Referanser
Mer informasjon finner du på:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Trinn 4: Programvare
Dette prosjektet krever en ny versjon av Ardino Uno R3 IDE (integrert utviklingsmiljø) som er tilgjengelig fra
Last ned hver av de to følgende Arduino -skissene (vedlagt)
- rotary_encoder_1.ino (avstemningsversjon)
- rotary_encoder_2.no (avbryt versjon)
Dobbeltklikk på din foretrukne versjon og følg instruksjonene på skjermen.
Nyt …
Klikk her for å se mine andre instrukser.
Anbefalt:
Enkel og enkel Spider-Man Web-Shooter: 12 trinn
Enkel og enkel Spider-Man Web-Shooter: Har du sett en Spider-Man-film? En Spider-Man-tegneserie? Noe uklart Spider-Man-relatert? Spider-Man er tilsynelatende overalt. Hvorfor ikke lage en enkel web-shooter? Etter litt øvelse laget jeg et design av husmaterialer som kunne lages
(Enkel) enkel måte å få analog/pwm -lyd fra Raspberry PI Zero og også tilkobling til Crt TV: 4 trinn
(Enkel) enkel måte å få analog/pwm -lyd fra Raspberry PI Zero og også tilkobling til Crt TV: Her har jeg brukt en enkleste metode for å mate lyd til en tv sammen med video fra en annen side
En virkelig enkel/enkel/ikke komplisert måte å få mennesker/mennesker/dyr/roboter til å se ut som om de har en veldig kul/lys varmesyn (farge du velger) ved hjelp av GIMP: 4 trinn
En virkelig enkel/enkel/ikke komplisert måte å få mennesker/mennesker/dyr/roboter til å se ut som om de har en veldig kul/lys varmesyn (farge du velger) Ved å bruke GIMP: Les … tittelen
Guitar Amp Tilt Stand - "African Chair" Design - Enkel, liten, sterk, enkel, gratis eller ekte billig: 9 trinn
Guitar Amp Tilt Stand - "African Chair" Design - Enkel, liten, sterk, enkel, gratis eller ekte billig: Guitar Amp Tilt Stand - For lett - enkel, liten, sterk, gratis eller skikkelig billig. For alle forsterkere, til og med store skap med separat hode. Bare lag brett og rør i størrelsen, og du trenger for nesten alt utstyr du ønsker
En enkel å lage, billig og enkel LED-blinkende krets med CMOS 74C14: 5 trinn
En enkel å lage, billig og enkel LED-blinkende krets med CMOS 74C14: Noen ganger trenger du ganske enkelt noen blinkende lysdioder, for dekorasjon av chrismas, blinkende kunstverk eller bare for å ha det gøy med blink blink blink. Jeg skal vise deg hvordan du lager en billig og enkel krets med opptil 6 blinkende lysdioder. Merk: Dette er min første instuctable og