Innehållsförteckning:
Video: Enkel roterande avkodare: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Denna instruerbara beskriver en enkel metod för att avkoda en sekventiell roterande kodare med en Arduino Uno R3.
Kompakta programvarurutiner används för att räkna antalet övergångar, eliminera kontaktstopp och bestämma rotationsriktningen. Ytterligare komponenter och uppslagstabeller krävs inte.
Avbrotts- och icke-avbrottsversioner av koden tillhandahålls.
Avbrottsversionen av koden kräver bara en enda avbrottsstift.
Bilder:
- Öppningsfotot visar den monterade kodaren.
- Skärmbilden visar koden för avbrottsversionen och räkningen när givaraxeln vrids medurs och moturs.
- Videon visar räkningen under snabb rotation.
Steg 1: Kretsdiagram
Kodarens kopplingsschema visas i fig.1.
Bygeltrådarna löds direkt på pinnarna.
Byt ut de två blå ledningarna om räkningsriktningen är omvänd.
Steg 2: Dellista
Följande delar erhölls från
- 1 endast Arduino UNO R3 med USB -kabel.
- 1 endast sekventiell roterande givare (EC11 eller motsvarande) med switch.
- 1 ratt som passar axeln.
- 3 endast Arduino man-till-han-bygelkablar.
Steg 3: Teori
Sekventiella roterande kodare genererar två kvadratvågor som var och en är förskjutna med 90 grader som visas i figur 1.
Logikmönstren vid kontakt A och kontakt B är olika när axeln vrids medurs (CW) och moturs (CCW) genom positionerna 1 till 6.
Vanliga metoder för att bestämma rotationsriktningen inkluderar:
- hårdvara
- tvillingavbrott
- mönsteruppslagstabeller
Detta projekt använder en mjukvarumetod som inte kräver uppslagstabeller. [1]
Riktning
Istället för att titta på utmatningsmönstren från Kontakt A och Kontakt B, låt oss fokusera på Kontakt A.
Om vi provar kontakt B efter varje kontakt A -övergång noterar vi att:
- Kontakt A och kontakt B har motsatta logiska tillstånd när kodaren vrids CW
- Kontakt A och kontakt B har samma logiska tillstånd när kodaren vrids CCW
Faktisk kod:
// ----- Räkna övergångar
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Denna metod erbjuder följande fördelar:
- uppslagstabeller krävs inte
- endast en enda avbrottslinje krävs
Debounce
Alla mekaniska givare lider av "kontaktstopp".
Om en omkopplare inte bryter/bryts rent kommer dess logiska tillstånd att pendla snabbt från HÖG till LÅG tills omkopplarkontakten löser sig. Detta resulterar i falska räkningar.
En metod för att undertrycka kontaktstopp är att lägga till en liten kondensator över varje switchkontakt. Kondensatorn och tillhörande uppdragningsmotstånd bildar en integrator som effektivt kortar höga frekvenser och låter omkopplingsspänningen stiga/falla graciöst.
Nackdelen med detta tillvägagångssätt är att övergångar kan missas om kodaraxeln roteras snabbt.
Programvarubankning
Denna metod använder två räknare (öppen, stängd) som har satts till noll. [2]
När en övergång detekteras på kontakt A:
- Kontinuerlig omröstning Kontakta A.
- Öka den öppna räknaren och återställ den stängda räknaren när kontakt A är HÖG.
- Öka den stängda räknaren och återställ den öppna räknaren när kontakt A är LÅG.
- Avsluta slingan när en av räknarna når ett förutbestämt antal. Vi letar effektivt efter steady state -perioden efter varje kontaktstopp.
Faktisk kod:
// ----- Avsluta kontakt A
medan (1) {if (digitalRead (ContactA)) {// ----- ContactA är öppen stängd = 0; // Tom motsatt integrator Open ++; // Integrera om (Open> MaxCount) returnerar HIGH; } annat {// ----- ContactA är stängd öppen = 0; // Tom motsatt integrator Stängd ++; // Integrera if (Closed> MaxCount) return LOW; }}
Det är inte nödvändigt att avbryta kontakt B eftersom kontakt A och kontakt B övergångar inte sammanfaller.
Räkning
Ett mekaniskt "spärr" fördubblar effektivt ditt antal eftersom två räkningar registreras mellan klick (se fig 1).
Antalet”spärrar” kan bestämmas med hjälp av modulo 2 -aritmetik enligt nedan.
Faktisk kod:
// ----- Räkna "spärrar"
if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (Count / 2); }
Referenser
Mer information finns på:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Steg 4: Programvara
Detta projekt kräver en ny version av Ardino Uno R3 IDE (integrerad utvecklingsmiljö) som är tillgänglig från
Ladda ner var och en av följande två Arduino -skisser (bifogade)
- rotary_encoder_1.ino (pollingversion)
- rotary_encoder_2.no (avbrottsversion)
Dubbelklicka på din önskade version och följ instruktionerna på skärmen.
Njut av …
Klicka här för att se mina andra instruktioner.
Rekommenderad:
RC5 fjärrkontrolls avkodare utan bibliotek: 4 steg
RC5 Remote Control Protocol Decoder Without Library: innan vi avkodar rc5 diskuterar vi först vad som är rc5 -kommando och vad det är för struktur. så i princip rc5 -kommando som används i fjärrkontroller som används i tv -apparater, cd -spelare, d2h, hemmabiosystem etc. har 13 eller 14 bitar arrangerade i en
Hur man programmerar IR-avkodare för flerväxlad AC-motorstyrning: 7 steg
Hur man programmerar IR-avkodare för flerväxlad växelströmsmotorstyrning: Enfas växelströmsmotorer finns vanligtvis i hushållsartiklar som fläktar, och deras hastighet kan enkelt kontrolleras när man använder ett antal diskreta lindningar för inställda hastigheter. I denna instruktionsbok bygger vi en digital controller som en
Hur man använder stegmotor som roterande kodare och OLED -display för steg: 6 steg
Så här använder du stegmotor som roterande kodare och OLED -skärm för steg: I denna handledning lär vi oss hur du spårar stegmotorstegen på OLED -skärmen. Titta på en demonstrationsvideo. Kredit för den ursprungliga handledningen går till YouTube -användaren " sky4fly "
Hur man använder IR -mottagare (iR -avkodare): 6 steg
Hur man använder IR -mottagare (iR -avkodare): I denna handledning kommer jag att visa dig steg för steg hur du använder iR -mottagare från arduino. kommer att visa dig hur du installerar biblioteket, ta emot TV: ns fjärrkontrollsignal och avkoda denna signal. IR-mottagaren kan användas för att bygga en infraröd kont
Basys 3 Morse -avkodare: 11 steg
Basys 3 Morse Decoder: Detta är ett projekt för en högskoleklass. Detta projekt är skrivet i VHDL i ett program som heter Vivado. Uppgifterna för att skapa alla moduler som är nödvändiga för att implementera en Morse -avkodare med Basys 3 -kortet. Brädan används för att ta in morse -kod från en swi