- Rotációs kódoló és típusai
- KY-040 Rotary Encoder Pinout és leírás
- Hogyan működik a Rotary Encoder
- Szükséges alkatrészek
- PIC16F877A Rotary Encoder Interfacing Circuit Diagram
- Kód Magyarázat
A forgókódoló egy olyan beviteli eszköz, amely segíti a felhasználót a rendszerrel való interakcióban. Inkább úgy néz ki, mint egy rádió potenciométer, de impulzusokat ad ki, ami egyedivé teszi az alkalmazását. Az encoder gombjának elforgatásakor az apró lépések formájában forog, ami segíti a léptető / szervo motor vezérlésében, a menü sorrendjének navigálásában és egy szám értékének növelésében / csökkentésében és még sok másban.
Ebben a cikkben megtudhatjuk a Rotary Encoderek különféle típusait és működését. Ezenkívül összekapcsoljuk a PIC16F877A PIC mikrovezérlővel, és az Encoder forgatásával vezérelhetjük egy egész szám értékét, és annak értékét 16 * 2-es LCD képernyőn jeleníthetjük meg. A bemutató végén Ön kényelmesen használhatja a Rotary Encodert a projektjeihez. Tehát kezdjük…
Rotációs kódoló és típusai
A forgó kódolót gyakran tengelykódolónak hívják. Ez egy elektromechanikus jelátalakító, vagyis a mechanikus mozgásokat elektronikus impulzusokká alakítja, vagy más szavakkal átalakítja a szöget, mozgást vagy tengely helyzetét digitális vagy analóg jellé. Ez egy gombból áll, amely forogva lépésről lépésre mozog, és minden lépéshez előre meghatározott szélességű impulzus vonatokat állít elő.
A piacon sokféle rotációs kódoló létezik, amelyet a tervező választhat az alkalmazása szerint. Az alábbiakban felsoroljuk a leggyakoribb típusokat
- Inkrementális kódoló
- Abszolút kódoló
- Mágneses kódoló
- Optikai kódoló
- Lézerkódoló
Ezeket a kódolókat a kimeneti jel és érzékelő technológia alapján, az inkrementális kódolót és az abszolút kódolókat a kimeneti jel alapján, a mágneses, optikai és lézeres kódolókat pedig az érzékelési technológiák alapján osztályozzuk. Az itt használt kódoló egy inkrementális típusú kódoló.
Az abszolút kódoló a tápellátás kikapcsolása után is tárolja a helyzetinformációkat, és a helyzetinformációk akkor lesznek elérhetők, ha ismét energiát alkalmazunk rá.
A másik alaptípus, az Inkrementális kódoló akkor szolgáltat adatokat, amikor a kódoló megváltoztatja a helyzetét. Nem tudta tárolni a helyzet adatait.
KY-040 Rotary Encoder Pinout és leírás
Az alábbiakban látható a KY-040 növekményes típusú forgójeladó kivezetései. Ebben a projektben összekapcsoljuk ezt a Rotary Encoder-t a mikrochipből származó népszerű PIC16F877A mikrovezérlővel.
Az első két csap (Ground és Vcc) a kódoló áramellátására szolgál, általában + 5 V tápellátást használnak. A jeladónak az óramutató járásával ellentétes és az óramutató járásával ellentétes irányú forgatása mellett van egy kapcsolója (Aktív alacsony), amelyet a belső gomb megnyomásával lehet megnyomni. Ennek a kapcsolónak a jele a 3 csapon (SW) keresztül érkezik. Végül megvan a két kimeneti csap (DT és CLK), amelyek előállítják a hullámformákat, amint azt az alábbiakban már tárgyaltuk. Ezt a Rotary Encodert már korábban összekapcsoltuk az Arduino-val.
Hogyan működik a Rotary Encoder
A kimenet teljes mértékben attól a belső rézbetétektől függ, amelyek biztosítják a kapcsolatot a GND-vel és a VCC-vel a tengellyel.
A Rotary Encoder két részből áll. Tengely kerék, amely össze van kötve a tengellyel, és óramutató járásával megegyező, vagy az óramutató járásával függően a tengely forgását, és a bázis, ahol a villamos csatlakozás történik. Az alapnak vannak olyan portjai vagy pontjai, amelyek a DT-hez vagy a CLK-hoz vannak csatlakoztatva oly módon, hogy amikor a tengely kerék forog, akkor összekapcsolja az alappontokat és négyzethullámot biztosít mind a DT, mind a CLK porton.
A kimenet olyan lesz, mint amikor a tengely forog-
Két port adja meg a négyzethullámot, de az időzítésben kicsi a különbség. Emiatt, ha elfogadjuk a kimenetet 1-nek és 0-nak, akkor csak négy állapot lehet: 0 0, 1 0, 1 1, 0 1. A bináris kimenet sorrendje határozza meg az óramutató járásával megegyező vagy az óramutató járásával ellentétes irányú fordulatot. Például, ha a forgókódoló 1 0-t ad alapjáraton, és utána 1 1-et biztosít, ez azt jelenti, hogy a kódoló egyetlen lépést változtat az óramutató járásával megegyező irányba, de ha 0 0-t ad az alapjárati 1 0 után, azt jelenti, hogy a tengely egy lépéssel az óramutató járásával ellentétes irányban változik.
Szükséges alkatrészek
Itt az ideje, hogy meghatározzuk, mire van szükségünk a Rotary Encoder és a PIC mikrovezérlő összekapcsolásához,
- PIC16F877A
- 4.7k ellenállás
- 1k ellenállás
- 10 ezer fazék
- 33pF kerámia tárcsa kondenzátor - 2db
- 20Mhz kristály
- 16x2 kijelző
- Rotációs kódoló
- 5 V-os adapter.
- Kenyérlap
- Összekötő vezetékek.
PIC16F877A Rotary Encoder Interfacing Circuit Diagram
Az alábbiakban látható a végső beállítás képe az alkatrészek áramköri ábra szerinti csatlakoztatása után:
Az LCD kontrasztjához egyetlen 1K-os ellenállást használtunk a potenciométer helyett. Ezenkívül ellenőrizze a végén megadott teljes videót.
Kód Magyarázat
A teljes PIC-kódot a projekt végén egy bemutató videóval adjuk meg, itt elmagyarázzuk a kód néhány fontos részét. Ha még nem ismeri a PIC mikrokontrollert, kövesse a PIC oktatóanyagainkat a kezdetektől fogva.
Ahogy korábban megbeszéltük, ellenőriznünk kell a kimenetet és meg kell különböztetnünk a bináris kimenetet mind a DT, mind a CLK esetében, ezért létrehoztunk egy if-else részt a művelethez.
if (Encoder_CLK! = pozíció) { if (Encoder_DT! = pozíció) { // lcd_com (0x01); számláló ++; // Növelje az lcd- re nyomtatandó számlálót lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, számláló); } else { // lcd_com (0x01); lcd_com (0xC0); számláló--; // csökkenti a számlálót lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, számláló); // lcd_puts ("Balra"); } }
Ezenkívül minden lépésnél tárolnunk kell a helyzetet. Ehhez egy változó „pozíciót” használtunk, amely az aktuális pozíciót tárolja.
pozíció = kódoló_CLK; // A kódoló órapozíciójának tárolása a változón. Lehet 0 vagy 1.
Ezen kívül lehetőség van az LCD-n lévő kapcsolónyomásról való értesítésre.
if (Encoder_SW == 0) { sw_delayms (20); // visszavonási késleltetés if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("kapcsoló megnyomva"); // itoa (számláló, érték, 10); // lcd_puts (érték);
A system_init funkciót a tű I / O művelet, az LCD inicializálására és a forgókódoló pozíciójának tárolására használják.
void system_init () { TRISB = 0x00; // B PORT kimenetként, Ezt a portot az LCD TRISDbit-ekhez használják. TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Ez inicializálja az LCD- pozíciót = Encoder_CLK; // A CLK pozícióját felvette a rendszerindításra, a while ciklus kezdete előtt. }
Az LCD funkció fel van írva az lcd.c és az lcd.h könyvtárba, ahol az lcd_ output (), lcd_cmd () deklarált.
A változó deklarációhoz, a konfigurációs bitekhez és más kódrészletekhez kérjük, keresse meg az alábbi teljes kódot.