Satura rādītājs:

Vienkāršs rotācijas dekodētājs: 4 soļi
Vienkāršs rotācijas dekodētājs: 4 soļi

Video: Vienkāršs rotācijas dekodētājs: 4 soļi

Video: Vienkāršs rotācijas dekodētājs: 4 soļi
Video: КОНЕЦ МУЧЕНИЯМ. Трава больше не проблема! 2024, Jūlijs
Anonim
Image
Image
Vienkāršs rotācijas dekodētājs
Vienkāršs rotācijas dekodētājs

Šajā pamācībā ir aprakstīta vienkārša secīga rotējošā kodētāja atšifrēšanas metode, izmantojot Arduino Uno R3.

Kompakta programmatūra tiek izmantota, lai saskaitītu pāreju skaitu, novērstu kontakta atlēcienu un noteiktu rotācijas virzienu. Papildu sastāvdaļas un uzmeklēšanas tabulas nav nepieciešamas.

Tiek piedāvātas koda versijas ar pārtraukumiem un nepārtraukumiem.

Koda pārtraukšanas versijai ir nepieciešama tikai viena pārtraukšanas tapa.

Attēli:

  • Sākuma fotoattēlā ir redzams samontētais kodētājs.
  • Ekrānuzņēmumā ir redzams pārtraukuma versijas kods un skaits, kad kodētāja vārpsta tiek pagriezta pulksteņrādītāja virzienā un pretēji pulksteņrādītāja virzienam.
  • Video parāda skaitu ātras rotācijas laikā.

1. darbība: shēmas shēma

Ķēdes diagramma
Ķēdes diagramma

Kodētāja elektroinstalācijas shēma ir parādīta 1. attēlā.

Džempera vadi ir pielodēti tieši pie kodētāja tapām.

Nomainiet abus zilos vadus, ja skaitīšanas virziens ir pretējs.

2. darbība: detaļu saraksts

Šādas daļas tika iegūtas vietnē

  • 1 tikai Arduino UNO R3 ar USB kabeli.
  • 1 tikai secīgs rotējošais kodētājs (EC11 vai līdzvērtīgs) ar slēdzi.
  • 1 tikai poga, kas piemērota vārpstai.
  • 3 tikai Arduino džemperi no vīriešiem līdz vīriešiem.

3. solis: teorija

Teorija
Teorija

Secīgi rotējošie kodētāji ģenerē divus kvadrātveida viļņus, no kuriem katrs ir pārvietots par 90 grādiem, kā parādīts 1. attēlā.

Loģikas modeļi kontaktā A un kontaktā B ir atšķirīgi, ja vārpstu rotē pulksteņrādītāja virzienā (CW) un pretēji pulksteņrādītāja virzienam (CCW) pozīcijās no 1 līdz 6.

Parastās rotācijas virziena noteikšanas metodes ietver:

  • aparatūra
  • dvīņi pārtrauc
  • modeļu uzmeklēšanas tabulas

Šajā projektā tiek izmantota programmatūras metode, kurai nav nepieciešamas uzmeklēšanas tabulas. [1]

Virziens

Tā vietā, lai aplūkotu kontaktpersonu A un kontakta B izvades modeļus, pievērsīsimies kontaktam A.

Ja pēc katras A kontakta pārejas mēs izvēlamies kontaktpersonu B, mēs atzīmējam, ka:

  • Kontaktam A un kontaktam B ir pretēji loģiskie stāvokļi, kad kodētājs tiek pagriezts CW
  • Kontaktam A un kontaktam B ir tāds pats loģiskais stāvoklis, kad kodētājs tiek pagriezts CCW

Faktiskais kods:

// ----- Skaitīt pārejas

CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); ja (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }

Šī metode piedāvā šādas priekšrocības:

  • uzmeklēšanas tabulas nav nepieciešamas
  • ir nepieciešama tikai viena pārtraukuma līnija

Atlekšana

Visi mehāniskie kodētāji cieš no “kontakta atlēciena”.

Ja slēdža kontakts neveidojas/nesadalās tīri, tā loģiskais stāvoklis strauji svārstīsies no HIGH uz LOW, līdz slēdža kontakts nostāsies. Tā rezultātā tiek iegūti nepatiesi skaitījumi.

Viena metode kontaktu atlēcienu novēršanai ir pievienot nelielu kondensatoru katram slēdža kontaktam. Kondensators un ar to saistītais pievilkšanas rezistors veido integratoru, kas efektīvi saīsina augstās frekvences un ļauj slēdža spriegumam graciozi paaugstināties/samazināties.

Šīs pieejas negatīvie aspekti ir tādi, ka pārejas var tikt izlaistas, ja kodētāja vārpsta tiek ātri pagriezta.

Programmatūras atcelšana

Šī metode izmanto divus skaitītājus (atvērts, slēgts), kas ir iestatīti uz nulli. [2]

Kad kontaktā A ir konstatēta pāreja:

  • Nepārtraukti aptauja Sazinieties ar A.
  • Palieliniet atvērto skaitītāju un atiestatiet slēgto skaitītāju, kad kontakts A ir HIGH.
  • Palieliniet slēgto skaitītāju un atiestatiet atvērto skaitītāju, kad kontakts A ir LOW.
  • Iziet no cilpas, kad viens no skaitītājiem sasniedz iepriekš noteiktu skaitu. Mēs efektīvi meklējam līdzsvara stāvokļa periodu pēc kontakta atlēciena.

Faktiskais kods:

// ----- Debounce Contact A

while (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Tukšs pretējs integrētājs Open ++; // Integrēt, ja (Open> MaxCount) atgriežas HIGH; } cits {// ----- ContactA is Closed Open = 0; // Tukšs pretējs integrētājs Slēgts ++; // Integrēt, ja (Closed> MaxCount) atgriežas LOW; }}

Nav nepieciešams atslēgt kontaktu B, jo kontakta A un kontakta B pārejas nesakrīt.

Skaitīšana

Mehānisks “aizturētājs” efektīvi dubulto jūsu skaitu, jo starp klikšķiem tiek reģistrēti divi skaitļi (sk. 1. attēlu).

“Aizturēto” skaitu var noteikt, izmantojot 2. moduļa aritmētiku, kā parādīts zemāk.

Faktiskais kods:

// ----- saskaitiet "aizturētos"

if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (Count / 2); }

Atsauces

Papildu informāciju var atrast:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

4. solis: programmatūra

Šim projektam ir nepieciešama jaunākā Ardino Uno R3 IDE versija (integrēta izstrādes vide), kas ir pieejama vietnē

Lejupielādējiet katru no šīm divām Arduino skicēm (pievienots)

  • rotary_encoder_1.ino (aptaujas versija)
  • rotary_encoder_2.no (pārtraukuma versija)

Veiciet dubultklikšķi uz vēlamās versijas un izpildiet ekrānā redzamos norādījumus.

Izbaudi …

Noklikšķiniet šeit, lai skatītu citus manus norādījumus.

Ieteicams: