Tartalomjegyzék:

Hogyan lehet értelmezni a forgásirányt egy digitális forgókapcsolóról egy PIC segítségével: 5 lépés
Hogyan lehet értelmezni a forgásirányt egy digitális forgókapcsolóról egy PIC segítségével: 5 lépés

Videó: Hogyan lehet értelmezni a forgásirányt egy digitális forgókapcsolóról egy PIC segítségével: 5 lépés

Videó: Hogyan lehet értelmezni a forgásirányt egy digitális forgókapcsolóról egy PIC segítségével: 5 lépés
Videó: Te is rutinból kötöd be a villanymotort? Hiba! - Nézzük! 2024, Július
Anonim
Hogyan lehet értelmezni a forgásirányt egy digitális forgókapcsolóval egy PIC segítségével
Hogyan lehet értelmezni a forgásirányt egy digitális forgókapcsolóval egy PIC segítségével

Ennek az utasításnak az a célja, hogy bemutassa, hogyan kapcsolható össze egy digitális (kvadratúrával kódolt) forgókapcsoló egy mikrokontrollerrel. Ne aggódjon, elmagyarázom, mit jelent számunkra a kódolt kvadratúra. Ez az interfész és a hozzá tartozó szoftver lehetővé teszi, hogy a mikrokontroller felismerje a forgás irányát minden egyes reteszről a másikra történő mozgás során. Nemrégiben használtam ezt a típusú kapcsolót egy mikrokontroller projektben, amelyhez egy nyomás alapértéket kellett megadni egy 16 -os gomb segítségével. retents a fel/le gombok helyett. Az ötlet az volt, hogy lehetővé tegye a felhasználó számára, hogy "betárcsázza" a kívánt nyomást. Ennek eredményeképpen egy szoftverrutinot kellett kidolgoznunk, hogy lekérjük a helyzetről a kapcsolót, és levezetjük a forgásirányt, hogy növeljük vagy csökkentsük a fő rendszer nyomáspontját. Ebben az utasításban kitérek a fizikai felületre a mikrokontrollernek, a forgókapcsoló működésének elmélete, a szoftver működési elmélete, valamint a levonási rutin. Végül megmutatom a levonási rutin alkalmazását. Ahogy haladunk, megpróbálom némileg általánosnak tartani a dolgokat, hogy az ötlet a lehető legtöbb platformon alkalmazható legyen, de azt is megosztom, amit tettem, hogy láthasson egy adott alkalmazást.

1. lépés: Alkatrészek

Alkatrészek
Alkatrészek

Ennek megvalósításához szüksége lesz: Forgó kapcsolóra (kvadratúra kódolású) Húzza fel az ellenállásokat Alkalmas mikrokontroller platformra A projektemhez Grayhill 61C22-01-04-02 optikai kódolót használtam. A forgókapcsoló adatlapja 8,2 k ohmos felhúzó ellenállást igényel a kapcsolóból érkező két adatvezetéken. Ellenőrizze a használni kívánt kódoló adatlapját. Az általam használt forgókapcsoló egy axiális nyomógombos kapcsolóval is megrendelhető. Ez egy hasznos funkció a tárcsázott kiválasztások végrehajtásához, stb., De itt nem tárgyalom a felületét. Van egy "megfelelő mikrokontroller platformom", mert (azt hiszem) ez több platformon is megvalósítható. Sok embert láttam más mikrovezérlővel az Instructables számára, ezért szeretném bemutatni az általános megközelítést is. Az összes kódot a PIC Basic Pro -ban írtam a PIC16F877A mikrochippel való használatra. Valójában a legfontosabb dolog, amire szüksége van a mikrokontrollerben, az a képesség, hogy megszakítsa, ha logikai változás történik mindkét tüske bármelyikén. A PIC16F877A készüléken ezt PORTB változás megszakításnak nevezik. Más vezérlőkön más elnevezések is lehetnek. Ez a mikrokontroller megszakítás funkció része annak, ami ezt a megvalósítást olyan elegánsá teszi.

2. lépés: Hardver interfész

Hardver interfész
Hardver interfész

Az "egyszerű" megoldás az lenne, ha egy "egypólusú 16-os" kapcsoló lenne, 16 csatlakozással a mikrokontrollerhez. Ezután minden kapcsoló kimenetet a mikrovezérlőn lévő tűhöz kötnek, hogy a mikrovezérlő minden tárcsázási pozíciót ellenőrizhessen. Ez az I/O érintkezők túlzott használata. A helyzet még rosszabb lesz, ha azt szeretnénk, hogy több mint 16 pozíció (visszatartás) álljon rendelkezésünkre a kapcsolón. A kapcsoló minden további pozíciója további bemenetet igényel a mikrokontroller számára. Ez gyorsan a mikrokontroller bemeneteinek nagyon nem hatékony használatává válik. Írja be a forgókapcsoló szépségét. A forgókapcsolónak csak két kimenete van az adatlap A és B jelű mikrokontrolleréhez. Ezeknek a soroknak csak négy lehetséges logikai szintje van: AB = 00, 01, 10 és 11. Ez nagymértékben csökkenti a bemeneti sorok számát, amelyet a kapcsolónak a mikrokontrollerhez való csatlakoztatásakor kell használnia. Tehát csak kettőre csökkentettük a beviteli sorok számát. Most mi? Úgy tűnik, valóban 16 különböző állapotra van szükségünk, de ennek az új kapcsolónak csak négy van. Lőttük magunkat lábon? Dehogy. Olvass tovább. Megmagyarázzuk egy kicsit a forgókapcsoló működése mögötti elméletet.

3. lépés: A hardver működésének elmélete

A hardver működésének elmélete
A hardver működésének elmélete
A hardver működésének elmélete
A hardver működésének elmélete
A hardver működésének elmélete
A hardver működésének elmélete

A forgásirány-érzékelés a fent említett "egypólusú 16-os" kapcsolóval lehetséges, de sok bemenetet igényel a mikrokontrollerről. A forgókapcsoló használata csökkenti a mikrokontroller bemeneteinek számát, de most értelmeznünk kell a kapcsolóból érkező jeleket, és azokat forgásirányba kell fordítanunk. Korábban említettem, hogy a kapcsoló kvadratúra kódolású volt. Ez a megoldás egyik legfontosabb eleganciája is. Ez azt jelenti, hogy van egy 2 bites kód, amelyet a kapcsoló ad, amely megfelel a kapcsoló helyzetének. Gondolhatod: "Ha kétbites bemenet van a mikrokontrollerbe, hogyan ábrázoljuk mind a 16 pozíciót?" Ez egy jó kérdés. Nem képviseljük mindegyiket. Csak ismernünk kell a gomb relatív helyzetét, hogy meg tudjuk határozni a forgás irányát. A gomb abszolút helyzete lényegtelen. Az óramutató járásával megegyező irányú elforgatás esetén a kapcsoló által megadott kód minden négy ütésnél megismétlődik, és szürke kódolású. A szürke kódolás azt jelenti, hogy minden pozícióváltáshoz csak egy bitváltozás van. Ahelyett, hogy az AB bemenet visszaszámlálna az óramutató járásával megegyező irányú bináris forgatáshoz, így: 00, 01, 10, 11, a következőképpen változik: 00, 10, 11, 01. Vegye figyelembe, hogy az utóbbi mintánál csak egy bemenet változik a készletek. A mikrokontroller AB bemenetének óramutató járásával ellentétes értékei így néznek ki: 00, 01, 11, 10. Ez egyszerűen az óramutató járásával megegyező irányú minta fordítottja, ahol az AB = 00 szerepel először. Nézze meg a diagramokat a vizuálisabb magyarázat érdekében.

4. lépés: A szoftver működésének elmélete

A szoftver működésének elmélete
A szoftver működésének elmélete

A forgásirányt levezető rutin megszakítás hajtott. A kiválasztott mikrokontrollernek képesnek kell lennie arra, hogy bármikor megszakítsa, ha a megszakítás engedélyezésekor (legalább) két érintkező bármelyike megváltozik. Ezt nevezik PORTB változás megszakításnak a PIC16F877A készüléken. Bármikor, amikor a kapcsolót elforgatják, a mikrokontroller megszakad, és a program végrehajtása a megszakítási szolgáltatási rutinba (ISR) kerül. Az ISR gyorsan kitalálja, hogy melyik irányba forgatta a kapcsolót, megfelelően beállít egy zászlót, és gyorsan visszatér a főprogramhoz. Szükségünk van rá, hogy ez gyorsan megtörténjen, ha a felhasználó nagyon gyorsan forgatja a kapcsolót. Tudjuk, hogy a szürke kódolású AB minta minden négy pozícióban megismétlődik, így ha rutinszerűen végezzük el a négy pozíció közötti átmenetet, akkor a többinél is működik. Vegye figyelembe, hogy egy négypozíciós ciklusban négy él van. Egy emelkedő és egy csökkenő él az A bemenethez és a B bemenethez. A mikroprocesszor megszakad minden alkalommal, amikor van egy él, ami azt jelenti, hogy a mikrovezérlő megszakad a gomb elfordításakor. Ennek eredményeképpen az ISR -nek ki kell derítenie, hogy a gombot melyik irányba fordították el. Annak érdekében, hogy kitaláljuk, hogyan kell ezt megtenni, az óramutató járásával megegyező irányú forgatáshoz fordulunk a hullámformahoz. Figyeljük meg, hogy bármikor, amikor A-nak van éle, az új értéke mindig különbözik a B-től. Amikor a gomb az 1-es pozícióból a 2-be kerül, A átáll a logika-0-ról a logika-1-re. B még mindig 0 ehhez az átmenethez, és nem egyezik az A új értékével. Amikor a gomb 3-ról 4-re áll, A-nak leeső éle van, míg B logikai-1-nél marad. Ismét vegye figyelembe, hogy B és A új értéke eltér egymástól. Jelenleg láthatjuk, hogy bármikor, amikor A a megszakítást okozza az óramutató járásával megegyező irányban, új értéke eltér a B értékétől. Ellenőrizzük B -t, hogy lássuk, mi történik. B -nek emelkedő éle van, amikor a kapcsoló 2 -ről 3 -ra áll. Itt a B új értéke megegyezik az A -val. Az óramutató járásával megegyező irányú forgás utolsó fennmaradó élét tekintve B leeső éle a 4 -es pozícióból 5 -be mozog. (Az 5. pozíció megegyezik az 1. pozícióval.) B új értéke itt is megegyezik A -val! Most levonhatunk néhányat! Ha A okozza a megszakítást, és A új értéke eltér a B értékétől, akkor a forgás az óramutató járásával megegyező irányban történt. Ezenkívül, ha B okozza a megszakítást, és B új értéke megegyezik A -val, akkor a forgás az óramutató járásával megegyező irányban történt. Vizsgáljuk meg gyorsan az óramutató járásával ellentétes forgás esetét. Az óramutató járásával megegyező irányú forgatáshoz hasonlóan az óramutató járásával ellentétes forgatás is négy megszakítást okoz egy ciklusban: kettőt az A bemenetnél és kettőt a B bemenetnél. Az A bemenetnek emelkedő éle van, amikor a gomb 4 -ről 3 -ra mozog, és egy leeső él 2 -ről 1 -re Amikor a gomb elmozdul a 4 -es pozícióból a 3 -ba, az A új értéke megegyezik a B értékével. Vegye figyelembe, hogy amikor A a 2 -es pozícióból 1 -be lép, az új értéke megegyezik a B értékével is. Most láthatjuk, hogy amikor A okozza a megszakítást, és új értéke megegyezik B értékével, az elforgatás az óramutató járásával ellentétes irányban történt. Gyorsan megvizsgáljuk a B bemenetet, hogy mindent ellenőrizhessünk. B megszakítást okoz, amikor a gomb az 5 -ös pozícióból (amely megegyezik az 1 -gyel) a 4 -be mozog, és amikor a gomb 3 -ról a 2 -re mozog. Mindkét esetben a B új értéke nem egyezik a meglévő értékkel A pontja ellentétes azokkal az esetekkel, amikor B okozza az óramutató járásával megegyező irányú megszakítást. Ez jó hír. Összefoglalva: ha A megszakítást okoz, és új értéke nem egyezik meg B értékével, vagy ha B okozza a megszakítást, és B új értéke megegyezik A értékével, tudjuk, hogy az óramutató járásával megegyező irányban forog. Ellenőrizhetjük a többi esetet az óramutató járásával ellentétes forgatás szempontjából a szoftverben, vagy feltételezhetjük, hogy mivel nem az óramutató járásával megegyező irányba forgatás volt, az óramutató járásával ellentétes irányú volt. A rutinom egyszerűen feltételezte.

5. lépés: Szoftver

Szoftver
Szoftver
Szoftver
Szoftver

Nem használtam a PIC Basic Pro beépített megszakításait. Pár fájlt használtam, amelyeket Darrel Taylor kódjában szerepeltettem, hogy vezessem a rutint. Ez az, ahol Darrelnek óriási elismerése van! A fájlok ingyenesek. Csak látogasson el a webhelyére további információkért, egyéb alkalmazásokért és a fájlok letöltéséhez. Ezt a részt kihagyhatja, ha nem PIC -t használ Darrel Taylor megszakításokkal. Csak állítsa be a megszakításokat szükség szerint az Ön által használt platformon. A Darrel Taylor (DT) megszakítások beállításához két dolgot kell tennie: 1.) Tartalmazza a DT_INTS-14.bas és ReEnterPBP.bas fájlokat code.2.) Másolja ki és illessze be ezt a kódjába. ASMINT_LIST makró; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _ISR, PBP, igen endm INT_CREATEENDASMI Helyezzen be füleket és szóközöket, például a grafikát az Instructable végén, hogy egy kicsit könnyebben láthassa a dolgokat a kódban. Kicsit módosítania kell az igényeinek megfelelően. A Címke alatt cserélje ki az ISR -t az ISR -hez tartozó alprogram nevére. Ne felejtsd el az aláhúzást! Szüksége van rá! A megszakítások működéséhez még két dolgot kell tennie: 1.) Írja be az ISR -t. Ezt úgy fogja írni, mint egy PBP alprogramot, kivéve, hogy a RETURN helyett a @ INT_RETURN értéket kell beírnia az alprogram végébe. Ez nyugtázza a megszakítást, és visszatér a program végrehajtásához, ahol abbahagyta a fő hurokban. Az ISR -en belül törölnie kell a megszakítás jelzőt, hogy a program ne kerüljön rekurzív megszakításba. Egyszerűen a PORTB olvasása elegendő a PIC16F877A megszakítási jelzőjének törléséhez. Minden egyes mikrokontrollernek más módja van a megszakítás jelzőinek törlésére. 2.) Amikor eléri a kód azon pontját, amelyben engedélyezni szeretné a megszakítást, használja ezt a kódsort:@ INT_ENABLE RBC_INT Ha meg szeretné tiltani a megszakítást, egyszerűen használja:@ INT_DISABLE RBC_INT Sok van az imént lefedett dolgokat, így gyorsan összefoglalom. Eddig a programodnak valahogy így kellene kinéznie:; Minden szükséges beállítás vagy kód INCLUDE "DT_INTS-14.bas" INCLUDE "ReEnterPBP.bas" ASMINT_LIST makró; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _myISR, PBP, igen endm INT_CREATEENDASM; Bármilyen egyéb szükséges beállítás vagy kód@ INT_ENABLE RBC_INT; Kód, amelynek tudnia kell, hogy a gomb milyen irányban forog@ INT_DISABLE RBC_INT; Egyéb codeEND; A programmyISR vége:; ISR -kód itt@ INT_RETURN (megszakításkezelő beállítási táblázat) Azt hiszem, itt csatlakozhat újra bárki, aki nem használ PIC vagy DT megszakításokat. Most meg kell írnunk az ISR -t, hogy a mikrokontroller tudja, melyik irányba forog a gomb. Emlékezzünk vissza a szoftverelmélet szakaszból, hogy a forgásirányra akkor következtethetünk, ha ismerjük a megszakítást okozó bemenetet, annak új értékét és a másik bemenet értékét. Itt a pszeudokód: Olvassa be a PORTB -t egy scratch változóba, hogy törölje a megszakítási jelzőt. Ellenőrizze, hogy A okozta -e a megszakítást. Ha igaz, hasonlítsa össze az A -t és a B -t. Ellenőrizze, hogy eltérnek -e, ha különböznek. Az óramutató járásával megegyező irányú forgatás volt, Másrészt az óramutató járásával ellentétes irányú EndifCheck, ha B okozta a megszakítást. Ha igaz, hasonlítsa össze az A -t és a B -t Ellenőrizze, hogy eltérnek -e, ha ugyanazok, az óramutató járásával megegyező irányú forgatás volt, Másrészt az óramutató járásával ellentétes irányú EndifReturn from interruptHonnan tudjuk, hogy az A vagy B változása okozta -e a megszakítást? A megváltozott bemenet és a másik (változatlan) bemenet új értékének felfedezése egyszerű, mert az ISR -ben olvashatjuk őket. Tudnunk kell, hogy mindegyik milyen állapotban volt, mielőtt a végrehajtást elküldték az ISR -nek. Ez a fő rutinban történik. A fő rutin ül és várja, hogy a CWflag nevű bájtváltozót 1 -re állítsuk, vagy az ISR 0 -ra törölje. A gomb minden nyugtázott cseréje után, vagy ha nincs gombtevékenység, a változó 5 -re van állítva, hogy tétlen állapotot jelezzen. Ha a zászló be van állítva vagy törlődik, a fő rutin azonnal megnöveli vagy csökkenti az előírt nyomást a forgás alapján, majd visszaállítja a CWflag változót 5 -re, mert a gomb ismét üresjáratban van. Mivel a fő rutin a CWflag ellenőrzése, az A és B forgókapcsoló értékeinek állapotát is dokumentálja. Ez tényleg egyszerű, és így néz ki: oldA = AoldB = BTényleg nincs itt semmi szuper. Csak írja be azt a két sort a ciklus elejére, amely ellenőrzi a CWflag forgatását. Csak frissítjük a bemenetek logikai értékeit a fő rutinban a növekmény/csökkenés hurokban lévő forgatógombról, hogy lássuk, milyen bemenet okozta a megszakítást az ISR végrehajtásakor. Íme az ISR -kód: ABchange: scratch = PORTB 'Olvassa el a PORTB -ot a megszakítási zászló törléséhez' Ha A megszakítást okoz, ellenőrizze a B forgásirányát IF oldA! = A THEN 'Ha A és B eltér, akkor az óramutató járásával megegyező irányú volt A! = B THEN GOTO CW 'Ellenkező esetben az óramutató járásával ellentétes irányban forog ELSE GOTO CCW ENDIF ENDIF' Ha B okozza a megszakítást, ellenőrizze A forgásirányát IF oldB! = B THEN 'Ha A és B ugyanaz, akkor az óramutató járásával megegyező forgás volt IF A == B THEN GOTO CW 'Ellenkező esetben az óramutató járásával ellentétes irányban forog ELSE GOTO CCW ENDIF ENDIFCW: CWflag = 1@ INT_RETURNCCW: CWflag = 0@ INT_RETURNI Az ISR kódot az AB_ISR.bas fájlban A kód lapjai nem úgy jelennek meg, ahogy kellene. Most, mivel az ISR rendelkezik az A és B bemenet régi értékeivel, meg tudja határozni, hogy melyik bemenet okozta a megszakítást, összehasonlíthatja azt a másik (változatlan) bemenettel és meghatározhatja az irányt forgatásról. A fő rutinnak mindössze annyit kell tennie, hogy ellenőrizze a CWflagot, hogy lássa, melyik irányba fordult a gomb (ha van), és növelje vagy csökkentse a számlálót, a beállított pontot vagy bármit, amit szeretne vagy amire szüksége van. Remélem, ez segít, és nem volt túl zavaró. Ez a fajta felület különösen akkor hasznos, ha a rendszere már használ megszakításokat, mivel ez csak egy további megszakítás. Élvezd!

Ajánlott: