INHOUDSOPGAWE:
Video: Eenvoudige roterende dekodeerder: 4 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Hierdie instruksies beskryf 'n eenvoudige metode om 'n opeenvolgende roterende enkodeerder te ontsyfer met 'n Arduino Uno R3.
Kompakte sagteware -roetines word gebruik om die aantal oorgange te tel, kontakstoot uit te skakel en die draairigting te bepaal. Bykomende komponente en soektabelle is nie nodig nie.
Onderbroke en nie-onderbrekende weergawes van die kode word verskaf.
Die onderbrekingsweergawe van die kode benodig slegs 'n enkele onderbrekingspen.
Beelde:
- Die openingsfoto toon die saamgestelde encoder.
- Die skermkiekie toon die kode vir die onderbrekingsweergawe en die telling wanneer die encoder -as kloksgewys en linksom gedraai word.
- Die video toon die telling tydens vinnige rotasie.
Stap 1: Kringdiagram
Die bedradingsdiagram van die encoder word in figuur 1 getoon.
Die jumper drade word direk aan die encoder penne gesoldeer.
Verander die twee blou drade as die telrigting omgekeer word.
Stap 2: Onderdele lys
Die volgende onderdele is verkry vanaf
- 1 slegs Arduino UNO R3 met USB -kabel.
- 1 slegs opeenvolgende roterende encoder (EC11 of ekwivalent) met skakelaar.
- 1 knop slegs vir die as.
- 3 slegs Arduino man-tot-man trui.
Stap 3: Teorie
Opeenvolgende roterende enkoders genereer twee vierkantgolwe wat elk met 90 grade verplaas word, soos getoon in figuur 1.
Die logiese patrone by kontak A en kontak B verskil wanneer die as kloksgewys (CW) en linksom (CCW) deur posisies 1 tot 6 gedraai word.
Algemene metodes om die draairigting te bepaal, sluit in:
- hardeware
- tweeling onderbreek
- patrone opsoek tafels
Hierdie projek maak gebruik van 'n sagtewaremetode wat geen opzoektabelle benodig nie. [1]
Rigting
In plaas van na die uitvoerpatrone van Contact A en Contact B te kyk, fokus ons op Contact A.
As ons kontak B na elke kontak A -oorgang neem, let ons op dat:
- Kontak A en kontak B het teenoorgestelde logiese toestande wanneer die encoder CW gedraai word
- Kontak A en kontak B het dieselfde logiese toestand wanneer die encoder CCW gedraai word
Werklike kode:
// ----- Tel oorgange
CurrentStateA = stateContactA (); as (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); as (CurrentStateA == CurrentStateB) Tel ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Hierdie metode bied die volgende voordele:
- Soektabelle is nie nodig nie
- slegs 'n enkele onderbrekingslyn is nodig
Ontken
Alle meganiese encoders ly aan 'kontakstoot'.
As 'n skakelaarkontak nie skoon maak/breek nie, sal die logiese toestand vinnig ossilleer van HOOG na LAAG totdat die skakelaarkontak gaan lê. Dit lei tot vals tellings.
Een metode om kontakstoot te onderdruk, is om 'n klein kondensator by elke skakelkontak te voeg. Die kapasitor en gepaardgaande optrekweerstand vorm 'n integrator wat effektief hoë frekwensies kortmaak en die skakelaarspanning grasieus laat styg/daal.
Die nadeel van hierdie benadering is dat oorgange gemis kan word as die encoder -as vinnig gedraai word.
Sagteware -ontbinding
Hierdie metode gebruik twee tellers (oop, geslote) wat op nul gestel is. [2]
Sodra 'n oorgang op kontak A opgespoor is:
- Deurlopende peiling Kontak A.
- Verhoog die oop toonbank en stel die geslote toonbank terug wanneer kontak A HOOG is.
- Verhoog die geslote toonbank en stel die oop toonbank terug wanneer kontak A laag is.
- Verlaat die lus wanneer een van die tellers 'n voorafbepaalde telling bereik. Ons is effektief op soek na 'n bestendige toestand na kontakbotsing.
Werklike kode:
// ----- Ontbreek kontak A
terwyl (1) {if (digitalRead (ContactA)) {// ----- ContactA oop is gesluit = 0; // Leë teenoorstaande integrator Open ++; // Integreer as (Open> MaxCount) opbrengs HOOG; } anders {// ----- ContactA is gesluit oop = 0; // Leë teenoorgestelde integrator Geslote ++; // Integreer as (Geslote> MaxCount) opgawe LAAG is; }}
Dit is nie nodig om kontak B af te weer nie, aangesien die oorgang van kontak A en kontak B nie saamval nie.
Tel
'N Meganiese' detent 'verdubbel u telling effektief, aangesien twee tellings tussen kliks geregistreer word (sien fig. 1).
Die aantal "detents" kan bepaal word met behulp van rekenkundige modulo 2 soos hieronder getoon.
Werklike kode:
// ----- Tel "detensies"
if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (telling / 2); }
Verwysings
Verdere inligting kan gevind word by:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Stap 4: sagteware
Hierdie projek benodig 'n onlangse weergawe van die Ardino Uno R3 IDE (geïntegreerde ontwikkelingsomgewing) wat beskikbaar is by
Laai elk van die volgende twee Arduino -sketse af (aangeheg)
- rotary_encoder_1.ino (peilingsweergawe)
- rotary_encoder_2.no (onderbreek weergawe)
Dubbelklik op die weergawe wat u verkies en volg die instruksies op die skerm.
Geniet…
Klik hier om my ander instruksies te sien.
Aanbeveel:
Hoe om 'n eenvoudige DTMF (toon) telefoonlyn -dekodeerder te maak: 3 stappe
Hoe om 'n eenvoudige DTMF (toon) telefoonlyn -dekodeerder te maak: Dit is 'n eenvoudige projek waarmee u DTMF -seine op basies enige telefoonlyn kan dekodeer. In hierdie handleiding gebruik ons die dekodeerder MT8870D. Ons gebruik 'n voorafgeboude toondekodeerder, want glo my, dit is 'n pyn aan die agterkant om dit te probeer doen met die
RC5 afstandsbediening -protokol -dekodeerder sonder biblioteek: 4 stappe
RC5 afstandsbediening -protokol -dekodeerder sonder biblioteek: voordat ons rc5 dekodeer, bespreek ons eers wat rc5 -opdrag is en wat die struktuur daarvan is. dus basies rc5 -opdrag wat gebruik word in afstandsbedienings wat gebruik word in televisies, cd -spelers, d2h, huisteaterstelsels, ens., Dit bevat 13 of 14 bisse in 'n
Hoe om 'n IR-dekodeerder vir meervoudige wisselmotorbeheer te programmeer: 7 stappe
Hoe om 'n IR-dekodeerder vir meervoudige wisselstroommotorbeheer te programmeer: Enfasige wisselstroommotors word gewoonlik in huishoudelike items soos waaiers aangetref, en hul snelheid kan maklik beheer word wanneer 'n aantal diskrete wikkelinge vir vasgestelde snelhede gebruik word. In hierdie Instructable bou ons 'n digitale kontroleerder wat 'n
Arduino RF -sensor -dekodeerder: 5 stappe
Arduino RF Sensor Decoder: My vorige huis het 'n vooraf geïnstalleerde sekuriteitstelsel met deursensors, 'n bewegingsensor en 'n bedieningspaneel. Alles was vasgemaak aan 'n groot elektroniese boks in die kas en daar was instruksies vir die bedrading van 'n vaste telefoon om te outomatiseer
Hoe om die IR -ontvanger (iR -dekodeerder) te gebruik: 6 stappe
Hoe om IR -ontvanger (iR -dekodeerder) te gebruik: In hierdie handleiding sal ek u stap vir stap wys hoe u iR -ontvanger van arduino kan gebruik. sal jou wys hoe om die biblioteek te installeer, die TV -afstandsbedieningssein te ontvang en hierdie sein te dekodeer. Die iR-ontvanger kan gebruik word om 'n infrarooi kont