Indholdsfortegnelse:
Video: Enkel roterende dekoder: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Denne instruerbare beskriver en enkel metode til afkodning af en sekventiel roterende encoder ved hjælp af en Arduino Uno R3.
Kompakte softwarerutiner bruges til at tælle antallet af overgange, eliminere kontaktpresning og bestemme rotationsretningen. Yderligere komponenter og opslagstabeller er ikke påkrævet.
Afbrudte og ikke-afbrydende versioner af koden leveres.
Afbrydelsesversionen af koden kræver kun en enkelt afbrydelsesnål.
Billeder:
- Åbningsfotoet viser den samlede encoder.
- Skærmbilledet viser koden for interrupt -versionen og tællingen, når encoderakslen drejes med og mod uret.
- Videoen viser optællingen under hurtig rotation.
Trin 1: Kredsløbsdiagram
Koderens ledningsdiagram er vist i fig.1.
Jumpertrådene er loddet direkte til encoderboltene.
Skift de to blå ledninger, hvis tælleretningen er omvendt.
Trin 2: Deleliste
Følgende dele blev hentet fra
- 1 kun Arduino UNO R3 med USB -kabel.
- 1 kun sekventiel roterende encoder (EC11 eller tilsvarende) med switch.
- 1 drejeknap, der passer til akslen.
- 3 kun Arduino han-til-han trøjer.
Trin 3: Teori
Sekventielle roterende encodere genererer to firkantbølger, der hver er forskudt 90 grader som vist i figur 1.
Logikmønstrene ved kontakt A og kontakt B er forskellige, når akslen drejes med uret (CW) og mod uret (CCW) gennem position 1 til 6.
Almindelige metoder til at bestemme rotationsretningen omfatter:
- hardware
- tvilling afbryder
- opslagstabeller med mønster
Dette projekt bruger en softwaremetode, der ikke kræver opslagstabeller. [1]
Retning
I stedet for at se på outputmønstrene fra kontakt A og kontakt B lad os fokusere på kontakt A.
Hvis vi prøver kontakt B efter hver kontakt A -overgang, bemærker vi, at:
- Kontakt A og kontakt B har modsatte logiske tilstande, når encoderen drejes CW
- Kontakt A og kontakt B har den samme logiske tilstand, når encoderen drejes CCW
Faktisk kode:
// ----- Tæl overgange
CurrentStateA = stateContactA (); hvis (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); hvis (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Denne metode giver følgende fordele:
- opslagstabeller er ikke påkrævet
- kun en enkelt afbrydelseslinje er påkrævet
Afkald
Alle mekaniske encodere lider af "kontakt -bounce".
Hvis en kontaktkontakt ikke gør/bryder rent, vil dens logiske tilstand svinge hurtigt fra HIGH til LOW, indtil switchkontakten sætter sig. Dette resulterer i falske tal.
En metode til at undertrykke kontaktpresning er at tilføje en lille kondensator på tværs af hver kontaktkontakt. Kondensatoren og tilhørende pull-up-modstand danner en integrator, der effektivt kortslutter høje frekvenser og tillader switch-spændingen at stige/falde yndefuldt.
Ulempen ved denne tilgang er, at overgange kan gå glip af, hvis encoderakslen roteres hurtigt.
Software -debouncing
Denne metode anvender to tællere (åben, lukket), der er sat til nul. [2]
Når en overgang er registreret på kontakt A:
- Kontinuerlig afstemning Kontakt A.
- Forøg den åbne tæller, og nulstil den lukkede tæller, når kontakt A er HØJ.
- Forøg den lukkede tæller, og nulstil den åbne tæller, når kontakt A er lav.
- Afslut sløjfen, når en af tællerne når et forudbestemt antal. Vi leder effektivt efter steady state -perioden efter enhver kontaktpresning.
Faktisk kode:
// ----- Afbryd kontakt A
mens (1) {if (digitalRead (ContactA)) {// ----- KontaktA er åben lukket = 0; // Tom modsat integrator Open ++; // Integrer hvis (Åbn> MaxCount) returnerer HIGH; } ellers {// ----- KontaktA er lukket åben = 0; // Tom modsat integrator Lukket ++; // Integrer hvis (Closed> MaxCount) returnerer LOW; }}
Det er ikke nødvendigt at afbinde kontakt B, da kontakt A- og kontakt B -overgangene ikke falder sammen.
Tæller
En mekanisk "tilbageholdelse" fordobler effektivt din optælling, da to tællinger registreres mellem klik (se fig 1).
Antallet af "spærre" kan bestemmes ved hjælp af modulo 2 -aritmetik som vist nedenfor.
Faktisk kode:
// ----- Tæl "tilbageholdelser"
if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (Count / 2); }
Referencer
Yderligere oplysninger kan findes på:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Trin 4: Software
Dette projekt kræver en nylig version af Ardino Uno R3 IDE (integreret udviklingsmiljø), som er tilgængelig fra
Download hver af de følgende to Arduino -skitser (vedhæftet)
- rotary_encoder_1.ino (polling version)
- rotary_encoder_2.no (afbryd version)
Dobbeltklik på din foretrukne version, og følg vejledningen på skærmen.
God fornøjelse …
Klik her for at se mine andre instruktioner.
Anbefalede:
Sådan dekoder du køretøjets CAN -busdata: 8 trin
Sådan dekoder du køretøjets CAN -busdata: I denne instruks vil vi registrere en CAN -busdata for en bil eller en lastbil og konvertere de registrerede CAN -buslogdata til læsbare værdier. Til afkodning vil vi bruge can2sky.com cloud service, som er gratis. Vi kan registrere loggen ved hjælp af CAN-USB-adaptere, men betale atte
Sådan programmeres IR-dekoder til multi-speed vekselstrømsmotorstyring: 7 trin
Sådan programmeres IR-dekoder til multi-speed vekselstrømsmotorstyring: Enfasede vekselstrømsmotorer findes typisk i husholdningsartikler som f.eks. Ventilatorer, og deres hastighed kan let kontrolleres, når der bruges et antal diskrete viklinger til indstillede hastigheder. I denne Instructable bygger vi en digital controller, som en
Sådan bruges trinmotor som roterende encoder og OLED -display til trin: 6 trin
Sådan bruges trinmotor som roterende encoder og OLED -skærm til trin: I denne vejledning lærer vi, hvordan du sporer trinmotortrinene på OLED -skærmen. Se en demonstrationsvideo. Kredit for den originale vejledning går til youtube -bruger " sky4fly "
IR fjernbetjening dekoder ved hjælp af Arduino: 7 trin
IR -fjernbetjeningsdekoder ved hjælp af Arduino: Hello Makers, Dette er en komplet tutorial om, hvordan man afkoder enhver IR -fjernbetjening. Følg bare mine trin herunder
Sådan bruges IR -modtager (iR -dekoder): 6 trin
Sådan bruges IR -modtager (iR -dekoder): I denne vejledning viser jeg dig trin for trin, hvordan du bruger iR -modtager fra arduino. viser dig, hvordan du installerer biblioteket, modtager fjernsynets fjernbetjeningssignal og afkoder dette signal. IR-modtageren kan bruges til at bygge en infrarød kont