Video: Dekodues i thjeshtë rrotullues: 4 hapa
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Ky udhëzues përshkruan një metodë të thjeshtë të deshifrimit të një koduesi rrotullues vijues duke përdorur një Arduino Uno R3.
Rutinat kompakte të softuerit përdoren për të numëruar numrin e kalimeve, për të eleminuar kërcimin e kontaktit dhe për të përcaktuar drejtimin e rrotullimit. Komponentët shtesë dhe tabelat e kërkimit nuk kërkohen.
Ofrohen versione të ndërprera dhe pa ndërprerje të kodit.
Versioni i ndërprerjes së kodit kërkon vetëm një kunj të vetëm ndërprerjeje.
Imazhet:
- Fotografia e hapjes tregon koduesin e montuar.
- Pamja e ekranit tregon kodin për versionin e ndërprerë dhe numërimin kur boshti i koduesit rrotullohet në drejtim të akrepave të orës dhe në drejtim të kundërt.
- Video tregon numërimin gjatë rrotullimit të shpejtë.
Hapi 1: Diagrami i Qarkut
Diagrami i instalimeve të koduesit është treguar në fig.1.
Telat e kërcyesit ngjiten drejtpërdrejt në kunjat e koduesit.
Ndërroni dy telat blu nëse drejtimi i numërimit është i kundërt.
Hapi 2: Lista e Pjesëve
Pjesët e mëposhtme janë marrë nga
- 1 vetëm Arduino UNO R3 me kabllo USB.
- 1 vetëm kodifikues rrotullues vijues (EC11 ose ekuivalent) me ndërprerës.
- 1 çelës i vetëm që i përshtatet boshtit.
- 3 vetëm telat bluzë Arduino nga burra në meshkuj.
Hapi 3: Teoria
Koduesit rrotullues të njëpasnjëshëm gjenerojnë dy valë katrore secila prej të cilave zhvendosen me 90 gradë siç tregohet në Fig.1.
Modelet logjike në Kontaktin A dhe Kontaktin B janë të ndryshme kur boshti rrotullohet në drejtim të akrepave të orës (CW) dhe kundër akrepave të orës (CCW) përmes pozicioneve 1 deri në 6.
Metodat e zakonshme të përcaktimit të drejtimit të rrotullimit përfshijnë:
- harduer
- binjake ndërpret
- tabelat e kërkimit të modeleve
Ky projekt përdor një metodë softuerike që nuk kërkon tabela kërkimi. [1]
Drejtimi
Në vend që të shikojmë modelet e daljes nga Kontakti A dhe Kontakti B, le të përqëndrohemi në Kontaktin A.
Nëse marrim mostrën e Kontaktit B pas çdo kalimi të Kontaktit A vërejmë se:
- Kontakti A dhe Kontakti B kanë gjendje të kundërta logjike kur kodifikuesi rrotullohet CW
- Kontakti A dhe Kontakti B kanë të njëjtën gjendje logjike kur kodifikuesi rrotullohet CCW
Kodi aktual:
// ----- Numëroni kalimet
CurrentStateA = stateContactA (); nëse (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (KontaktB); nëse (CurrentStateA == CurrentStateB) Numëroni ++; nëse (CurrentStateA! = CurrentStateB) Numëroni--; LastStateA = CurrentStateA; }
Kjo metodë ofron përparësitë e mëposhtme:
- tabelat e kërkimit nuk janë të nevojshme
- kërkohet vetëm një linjë e vetme e ndërprerjes
Debounce
Të gjithë kodifikuesit mekanikë vuajnë nga "fryrja e kontaktit".
Nëse një kontakt ndërprerës nuk e bën/thyen pastër gjendja e tij logjike do të lëkundet me shpejtësi nga LART to në LOW derisa kontakti i kalimit të vendoset. Kjo rezulton në numërime të rreme.
Një metodë për të shtypur kërcimin e kontaktit është shtimi i një kondensatori të vogël në çdo kontakt ndërprerës. Kondensatori dhe rezistenca e lidhur tërheqëse formojnë një integrues i cili shkurton në mënyrë efektive frekuencat e larta dhe lejon që tensioni i ndërprerës të rritet/të bjerë me hijeshi.
Ana negative e kësaj qasjeje është se kalimet mund të humbasin nëse boshti i koduesit rrotullohet me shpejtësi.
Debouncing Software
Kjo metodë përdor dy numërues (të hapur, të mbyllur) që janë vendosur në zero. [2]
Pasi të zbulohet një kalim në Kontaktin A:
- Sondazh i vazhdueshëm Kontaktoni A.
- Rritni numëruesin e hapur dhe rivendosni numëruesin e mbyllur, sa herë që Kontakti A është i Lartë.
- Rritni numëruesin e mbyllur dhe rivendosni numëruesin e hapur, sa herë që Kontakti A është i ULT.
- Dilni nga laku kur një nga numëruesit arrin një numër të paracaktuar. Ne po kërkojmë në mënyrë efektive periudhën e gjendjes së qëndrueshme pas çdo kërcimi të kontaktit.
Kodi aktual:
// ----- Debounce Kontakti A
ndërsa (1) {nëse (digitalRead (ContactA)) {// ----- ContactA është e hapur e mbyllur = 0; // Integruesi i zbrazët përballë Open ++; // Integroni nëse (Open> MaxCount) kthehet HIGH; } else {// ----- ContactA është e mbyllur e hapur = 0; // Integruesi i zbrazët përballë Closed ++; // Integroni nëse (Mbyllur> MaxCount) kthehet LOW; }}
Nuk ka nevojë të anuloni Kontaktin B pasi kalimet e Kontaktit A dhe Kontaktit B nuk përkojnë.
Duke numëruar
Një "ndalim" mekanik në mënyrë efektive dyfishon numrin tuaj pasi dy akuza regjistrohen midis klikimeve (shiko fig. 1).
Numri i "ndaluesve" mund të përcaktohet duke përdorur aritmetikën modulo 2 siç tregohet më poshtë.
Kodi aktual:
// ----- Numëroni "të ndaluarit"
if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (Numërimi / 2); }
Referencat
Informacione të mëtejshme mund të gjenden në:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Hapi 4: Softuer
Ky projekt kërkon një version të fundit të Ardino Uno R3 IDE (mjedisi i integruar i zhvillimit) i cili është në dispozicion nga
Shkarkoni secilën nga dy skicat e mëposhtme Arduino (bashkangjitur)
- rotary_encoder_1.ino (versioni i sondazhit)
- rotary_encoder_2.no (versioni i ndërprerjes)
Klikoni dy herë në versionin tuaj të preferuar dhe ndiqni udhëzimet në ekran.
Shijoni…
Klikoni këtu për të parë udhëzimet e mia të tjera udhëzuese.