Tartalomjegyzék:

Egyszerű rotációs dekódoló: 4 lépés
Egyszerű rotációs dekódoló: 4 lépés

Videó: Egyszerű rotációs dekódoló: 4 lépés

Videó: Egyszerű rotációs dekódoló: 4 lépés
Videó: 7. Kombinációs logikai áramkörök - 4. rész 2024, November
Anonim
Image
Image
Egyszerű rotációs dekóder
Egyszerű rotációs dekóder

Ez az utasítás egy egyszerű módszert ír le egy szekvenciális forgó kódoló dekódolására Arduino Uno R3 segítségével.

Kompakt szoftveres rutinokat használnak az átmenetek számolására, az érintkezés visszapattanásának kiküszöbölésére és a forgásirány meghatározására. További összetevők és keresési táblázatok nem szükségesek.

A kód megszakítás nélküli és megszakítás nélküli verziói rendelkezésre állnak.

A kód megszakítási verziójához csak egyetlen megszakító pin szükséges.

Képek:

  • A nyitóképen az összeszerelt kódoló látható.
  • A képernyőképen megjelenik a megszakítási verzió kódja és a számláló, amikor a jeladó tengelyét az óramutató járásával megegyező és az óramutató járásával ellentétes irányba forgatják.
  • A videó a gyors forgás közbeni számot mutatja.

1. lépés: Áramköri diagram

Kördiagramm
Kördiagramm

A jeladó kapcsolási rajza az 1. ábrán látható.

Az áthidaló vezetékek közvetlenül a jeladó csapjaihoz vannak forrasztva.

Cserélje fel a két kék vezetéket, ha a számlálási irány megfordul.

2. lépés: Alkatrészlista

A következő részeket a https://www.aliexpress.com/ webhelyről szerezték be

  • 1 csak Arduino UNO R3 USB kábellel.
  • 1 csak szekvenciális forgó jeladó (EC11 vagy azzal egyenértékű) kapcsolóval.
  • 1 csak a tengelynek megfelelő gomb.
  • Csak 3 Arduino férfi-férfi áthidaló vezeték.

3. lépés: Elmélet

Elmélet
Elmélet

A szekvenciális forgó jeladók két négyzethullámot generálnak, amelyek mindegyike 90 fokkal elmozdul, ahogy az 1. ábrán látható.

Az A és a B érintkező logikai mintázata eltérő, ha a tengelyt az óramutató járásával megegyező irányba (CW) és az óramutató járásával ellentétes irányba (CCW) forgatják az 1-6.

A forgásirány meghatározásának általános módszerei a következők:

  • hardver
  • - szól közbe az iker
  • minta keresési táblázatok

Ez a projekt olyan szoftveres módszert használ, amely nem igényel keresési táblázatokat. [1]

Irány

Ahelyett, hogy az A és a B kontaktus kimeneti mintáit nézegetnénk, koncentráljunk az A kapcsolattartóra.

Ha minden egyes A kapcsolatfelvétel után mintát veszünk a B kapcsolattartóból, akkor a következőket vesszük észre:

  • Az A érintkező és a B érintkező logikai állapota ellentétes, amikor a kódoló CW -el van forgatva
  • Az A és a B érintkezőnek ugyanaz a logikai állapota, amikor a kódolót CCW irányba forgatja

Valódi kód:

// ----- Átmenetek számlálása

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

Ez a módszer a következő előnyökkel jár:

  • keresési táblázatok nem szükségesek
  • csak egyetlen megszakító vonalra van szükség

Debounce

Minden mechanikus kódoló „érintkezési ugrálástól” szenved.

Ha a kapcsolóérintkező nem jön létre/törik meg tisztán, logikai állapota gyorsan ingadozik HIGH -ról LOW -ra, amíg a kapcsolóérintkező le nem rendeződik. Ez hamis számolást eredményez.

Az egyik módszer az érintkezők visszapattanásának visszaszorítására az, hogy egy kis kondenzátort kell hozzáadni minden kapcsolóérintkezőhöz. A kondenzátor és a hozzá tartozó felhúzó ellenállás egy integrátort képez, amely hatékonyan zárja rövidre a magas frekvenciákat, és lehetővé teszi a kapcsoló feszültségének kecses emelkedését/csökkenését.

Ennek a megközelítésnek az a hátránya, hogy az átmenetek elmaradhatnak, ha a jeladó tengelyét gyorsan forgatják.

Szoftver visszaállítása

Ez a módszer két számlálót (nyitott, zárt) használ, amelyek nullára vannak állítva. [2]

Ha átmenetet észlelt az A kapcsolattartón:

  • Folyamatos szavazás Kapcsolatfelvétel A.
  • Növelje a Nyitott számlálót, és állítsa vissza a Zárt számlálót, amikor az A érintkező HIGH.
  • Növelje a Zárt számlálót, és állítsa vissza a Nyitott számlálót, amikor az A érintkező alacsony.
  • Lépjen ki a ciklusból, amikor az egyik számláló eléri az előre meghatározott számot. Hatékonyan keressük az egyensúlyi állapotot az esetleges kapcsolatfelpattanást követően.

Valódi kód:

// ----- Visszakapcsolási kapcsolat A

while (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Üres ellentétes integrátor Open ++; // Integrálni, ha (Nyissa meg> MaxCount) return HIGH; } else {// ----- ContactA is Closed Open = 0; // Üres ellentétes integrátor Zárt ++; // Integrálni, ha (Zárt> MaxCount) return LOW; }}

Nincs szükség a B érintkező lekapcsolására, mivel az A és B érintkező átmenetek nem esnek egybe.

Számolás

A mechanikus „retent” gyakorlatilag megduplázza a számát, mivel a kattintások között két szám van regisztrálva (lásd 1. ábra).

A „visszatartások” számát a modulo 2 számtani módszerrel lehet meghatározni az alábbiak szerint.

Valódi kód:

// ----- "visszatartottak" számlálása

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

Hivatkozások

További információk a következő címen találhatók:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

4. lépés: Szoftver

A projekthez szükség van az Ardino Uno R3 IDE (integrált fejlesztői környezet) legújabb verziójára, amely elérhető a https://www.arduino.cc/en/main/software címen

Töltse le az alábbi két Arduino vázlatot (mellékelve)

  • rotary_encoder_1.ino (szavazási verzió)
  • rotary_encoder_2.no (megszakítási verzió)

Kattintson duplán a kívánt verzióra, és kövesse a képernyőn megjelenő utasításokat.

Élvezd …

Kattintson ide a többi utasításom megtekintéséhez.

Ajánlott: