Sisällysluettelo:
- Vaihe 1: Osat
- Vaihe 2: Laitteiston käyttöliittymä
- Vaihe 3: Laitteiston käytön teoria
- Vaihe 4: Ohjelmistoteoria
- Vaihe 5: Ohjelmisto
Video: Pyörimissuunnan tulkinta digitaalisesta kiertokytkimestä PIC: n avulla: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:04
Tämän ohjeen tarkoitus on havainnollistaa, miten digitaalinen (kvadratuurikoodattu) kiertokytkin liitetään mikrokontrolleriin. Älä huoli, selitän mitä kvadratuurikoodattu merkitsee meille. Tämän käyttöliittymän ja mukana tulevan ohjelmiston avulla mikrokontrolleri voi tunnistaa pyörimissuunnan jokaisesta siirrosta yhdestä pidikkeestä toiseen. pidikkeet ylös/alas -painikkeiden sijasta. Ajatuksena oli antaa käyttäjälle mahdollisuus "soittaa" haluttu paine. Tämän seurauksena meidän oli kehitettävä ohjelmistorutiini, jotta saisimme sijaintitiedot kytkimestä ja päätämme pyörimissuunnan pääjärjestelmän painearvon lisäämiseksi tai vähentämiseksi. mikrokontrolleriin, kiertokytkimen toimintateoria, ohjelmiston toimintateoria ja vähennysrutiini. Lopuksi näytän teille, miten soveltan vähennysmenettelyä. Kun edistymme, yritän pitää asiat hieman yleisinä, jotta ideaa voidaan soveltaa mahdollisimman monille alustoille, mutta jaan myös tekemäni, jotta näet tietyn sovelluksen.
Vaihe 1: Osat
Tämän toteuttamiseksi tarvitset: Kiertokytkimen (kvadratuurikoodattu) Vedä vastukset ylös Sopiva mikro-ohjausalusta Projektissani käytin Grayhill 61C22-01-04-02 -optista kooderia. Kiertokytkimen tietolomake vaatii 8,2 k ohmin vetovastuksia kahdesta kytkimestä tulevasta datalinjasta. Haluat tarkistaa käyttämäsi kooderin tietolomakkeen. Käyttämäni kiertokytkimen voi tilata myös aksiaalisella painonapilla. Se on hyödyllinen ominaisuus valintojen tekemiseen, jotka on soitettu jne., Mutta en keskustele sen käyttöliittymästä täällä. Minulla on luettelossa "sopiva mikrokontrollerialusta", koska (mielestäni) tämä voidaan toteuttaa useammalla kuin yhdellä alustalla. Olen nähnyt paljon ihmisiä, jotka käyttävät muita mikro -ohjaimia Instructables -ohjelmaan, joten haluan näyttää myös yleisen lähestymistavan. Kirjoitin kaiken koodin PIC Basic Prossa käytettäväksi mikrosirun PIC16F877A kanssa. Todellakin, tärkein asia, jota tarvitset mikrokontrollerissa, on kyky keskeyttää, kun jossakin kahdesta nastasta tapahtuu logiikka. PIC16F877A: ssa tätä kutsutaan PORTB -muutoksen keskeytykseksi. Muilla ohjaimilla voi olla muita nimiä. Tämä mikro -ohjaimen keskeytysominaisuus on osa sitä, mikä tekee tästä toteutuksesta niin tyylikkään.
Vaihe 2: Laitteiston käyttöliittymä
"Yksinkertainen" ratkaisu olisi "yksinapainen 16" -kytkin, jossa on 16 liitäntää mikro-ohjaimeen. Jokainen kytkinlähtö sidottaisiin sitten mikro -ohjaimen nastaan, jotta mikro -ohjain voi tarkistaa jokaisen valitsimen asennon. Tämä on liiallista I/O -nastojen käyttöä. Asiat pahenevat entisestään, jos haluamme, että kytkimellä on enemmän kuin 16 paikkaa (pidätystä). Jokainen kytkimen lisäasento vaatisi ylimääräisen tulon mikrokontrolleriin. Tästä tulee nopeasti erittäin tehoton mikrokontrollerin tulojen käyttö Syötä kiertokytkimen kauneus. Kiertokytkimellä on vain kaksi lähtöä mikro -ohjaimeen, jotka on merkitty tietolomakkeella A ja B. Näillä linjoilla on vain neljä mahdollista logiikkatasoa: AB = 00, 01, 10 ja 11. Tämä vähentää suuresti tulolinjojen määrää, joita sinun on käytettävä kytkettäessä mikrokontrolleriin. Joten olemme vähentäneet syöttörivien määrää vain kahteen. Mitä nyt? Näyttää siltä, että tarvitsemme todella 16 eri tilaa, mutta tällä uudella kytkimellä on vain neljä. Olemmeko ampuneet itseämme jalkaan? Ei. Jatka lukemista. Selitämme hieman kiertokytkimen takana olevaa teoriaa selittääksemme.
Vaihe 3: Laitteiston käytön teoria
Pyörimissuunnan tunnistaminen on mahdollista käyttämällä edellä mainittua "yksinapainen 16-heitto" -kytkintä, mutta se kuluttaa paljon mikrokontrollerin tuloja. Kiertokytkimen käyttö vähentää tulojen määrää mikrokontrolleriin, mutta nyt meidän on tulkittava kytkimestä tulevat signaalit ja käännettävä ne pyörimissuuntaan. Mainitsin aiemmin, että kytkin oli kvadratuurikoodattu. Tämä on myös yksi tämän ratkaisun tärkeimmistä elegansseista. Tämä tarkoittaa, että kytkimellä on 2-bittinen koodi, joka vastaa kytkimen asentoa. Saatat ajatella: "Jos mikrokontrolleriin on syötetty kaksi bittiä, miten edustamme kaikkia 16 paikkaa?" Se on hyvä kysymys. Emme edusta heitä kaikkia. Meidän on vain tiedettävä nupin suhteelliset asennot, jotta voimme määrittää pyörimissuunnan. Nupin absoluuttisella asennolla ei ole merkitystä. Myötäpäivään pyörittämisen aikana kytkimen antama koodi toistuu neljän pidikkeen välein ja on harmaalla koodilla. Harmaa koodattu tarkoittaa, että jokaista sijainnin muutosta kohden on vain yksi bittimuutos. Sen sijaan, että AB -tulo laskee myötäpäivään pyörimistä binäärissä seuraavasti: 00, 01, 10, 11, se muuttuu näin: 00, 10, 11, 01. Huomaa, että jälkimmäisessä mallissa vain yksi tulo vaihtuu välillä sarjaa. Mikro -ohjaimen AB -tulon vastapäivän arvot näyttävät tältä: 00, 01, 11, 10. Tämä on yksinkertaisesti käänteinen myötäpäivään, jossa AB = 00 on ensin lueteltu..
Vaihe 4: Ohjelmistoteoria
Pyörimissuunnan päättävä rutiini on keskeytyskäyttöinen. Valitsemasi mikro -ohjaimen on pystyttävä keskeyttämään aina, kun jompikumpi (vähintään) kahdesta nastasta muuttuu, kun keskeytys on käytössä. Tätä kutsutaan PICB -muutoksen keskeytykseksi PIC16F877A: ssa. Aina kun kytkintä käännetään, mikro -ohjain keskeytyy ja ohjelman suoritus lähetetään keskeytyspalvelurutiinille (ISR). ISR selvittää nopeasti, mihin suuntaan kytkintä käännettiin, asettaa lipun asianmukaisesti ja palaa nopeasti pääohjelmaan. Tarvitsemme tämän tapahtua nopeasti, jos käyttäjä pyörii kytkintä erittäin nopeasti. Huomaa, että yhdessä neljän aseman jaksossa on neljä reunaa. Nouseva ja laskeva reuna A- ja B -tulolle. Mikroprosessori keskeytyy joka kerta, kun on reuna, mikä tarkoittaa, että mikro -ohjain keskeytyy aina, kun nuppia käännetään. Tämän seurauksena ISR: n on selvitettävä, mihin suuntaan nuppi on käännetty. Jotta voimme selvittää, miten tämä tehdään, käännymme aaltomuodon myötäpäivään kiertämiseksi. Huomaa, että milloin tahansa A: lla on reuna, sen uusi arvo on aina erilainen kuin B: n. Kun nuppi siirtyy asennosta 1 kohtaan 2, A siirtyy logiikasta-0 logiikkaan-1. B on edelleen 0 tässä siirtymässä eikä vastaa uutta arvoa A. Kun nuppi siirtyy asennosta 3 kohtaan 4, A: lla on laskeva reuna, kun taas B pysyy logiikassa-1. Huomaa jälleen, että B ja A: n uusi arvo ovat erilaisia. Tällä hetkellä voimme nähdä, että milloin tahansa A aiheuttaa keskeytyksen myötäpäivään pyörimisen aikana, sen uusi arvo on erilainen kuin B. Tarkistetaan B nähdäkseen mitä tapahtuu. B: llä on nouseva reuna, kun kytkin siirtyy asennosta 2 kohtaan 3. Tässä B: n uusi arvo on sama kuin A. Tarkasteltaessa myötäpäivään pyörimisen viimeistä jäljellä olevaa reunaa, B: n laskeva reuna siirtyy asennosta 4 kohtaan 5. (Asento 5 on sama kuin asema 1.) B: n uusi arvo on sama kuin A! Nyt voimme tehdä pieniä vähennyksiä! Jos A aiheuttaa keskeytyksen ja A: n uusi arvo poikkeaa B: n arvosta, kierto tapahtui myötäpäivään. Lisäksi jos B aiheuttaa keskeytyksen ja B: n uusi arvo on sama kuin A, niin kierto tapahtui myötäpäivään. Aivan kuten myötäpäivään pyöriminen, vastapäivään pyöriminen aiheuttaa neljä keskeytystä yhdessä jaksossa: kaksi tuloa A ja kaksi tuloa B. Tulossa A on nouseva reuna, kun nuppi liikkuu asennosta 4 kohtaan ja laskeva reuna siirtyy asennosta 2 kohtaan 1. Kun nuppi siirtyy paikasta 4 kohtaan 3, A: n uusi arvo on sama kuin B: n arvo. Huomaa, että kun A siirtyy paikasta 2 kohtaan 1, sen uusi arvo on sama kuin B: n arvo. Nyt voimme nähdä, että kun A aiheuttaa keskeytyksen ja sen uusi arvo vastaa B: n arvoa, kierto oli vastapäivään. Tarkistamme nopeasti tulon B varmistaaksemme kaiken. B aiheuttaa keskeytyksen, kun nuppi siirtyy asennosta 5 (joka on sama kuin 1) 4 ja kun nuppi siirtyy asennosta 3 kohtaan 2. Molemmissa tapauksissa B: n uusi arvo ei vastaa nykyistä arvoa joka on päinvastoin kuin tapaukset, joissa B aiheuttaa keskeytyksen myötäpäivään. Tämä on hyvä uutinen. Yhteenvetona voidaan todeta, että jos A aiheuttaa keskeytyksen ja sen uusi arvo ei vastaa B: n arvoa tai jos B aiheuttaa keskeytyksen ja B: n uusi arvo vastaa A: n arvoa, tiedämme, että kiertoa oli myötäpäivään. Voimme tarkistaa muut kotelot vastapäivään pyörimisen ohjelmistosta tai oletamme, että koska se ei ollut myötäpäivään, se oli vastapäivään. Rutiini yksinkertaisesti teki oletuksen.
Vaihe 5: Ohjelmisto
En käyttänyt sisäänrakennettuja keskeytyksiä PIC Basic Prossa. Käytin paria tiedostoa, jotka lisäsin koodiini Darrel Taylorista rutiinin ajamiseen. Tässä on Darrelille suuri kunnia! Tiedostot ovat ilmaisia. Käy vain hänen verkkosivustollaan saadaksesi lisätietoja, muita sovelluksia ja ladataksesi tiedostoja. Voit ohittaa tämän osan, jos et käytä PIC: tä Darrel Taylorin keskeytysten kanssa. Määritä keskeytykset tarpeen mukaan käyttämällesi alustalle. Darrel Taylorin (DT) keskeytysten määrittämiseksi on tehtävä kaksi asiaa: 1.) Sisällytä tiedostot DT_INTS-14.bas ja ReEnterPBP.bas code.2.) Kopioi ja liitä tämä koodiisi. ASMINT_LIST -makro; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _ISR, PBP, yes endm INT_CREATEENDASMI Lisää välilehtiä ja välilyöntejä, kuten grafiikka Instructable -ohjelman loppuun, jotta näet asiat hieman helpommin koodissasi. Sinun on muokattava sitä hieman tarpeidesi mukaan. Korvaa Tunniste -kohdassa ISR ISR -aliohjelman nimellä. Älä unohda alaviivaa! Tarvitset sitä! Jotta saat keskeytykset toimimaan, sinun on tehtävä vielä kaksi asiaa: 1.) Kirjoita ISR. Kirjoitat tämän aivan kuten aiot kirjoittaa PBP -aliohjelman, paitsi että sinun on lisättävä @ INT_RETURN aliohjelman loppuun RETURN -sijasta. Tämä kuittaa keskeytyksen ja palauttaa ohjelman suorituksen siihen kohtaan, jossa se keskeytyi pääsilmukassa. ISR: n sisällä sinun on poistettava keskeytyslippu, jotta ohjelma ei joudu rekursiiviseen keskeytykseen. PORTB: n lukeminen ei riitä, että PIC16F877A: n keskeytysmerkki poistetaan. Jokaisella eri mikrokontrollerilla on erilainen tapa poistaa keskeytysliput. Tarkista mikro -ohjaimesi tietolomake.2) Kun saavut koodisi kohtaan, jossa haluat ottaa keskeytyksen käyttöön, käytä tätä koodiriviä:@ INT_ENABLE RBC_INTKun haluat poistaa keskeytyksen käytöstä, käytä vain:@ INT_DISABLE RBC_INTTäitä on paljon asioita, jotka on pakattu juuri käsiteltäviini, joten teen yhteenvedon nopeasti. Toistaiseksi ohjelman pitäisi näyttää tältä:; Tarvittavat asetukset tai koodi INCLUDE "DT_INTS-14.bas" INCLUDE "ReEnterPBP.bas" ASMINT_LIST-makro; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _myISR, PBP, kyllä endm INT_CREATEENDASM; Kaikki muut tarvittavat asetukset tai koodi@ INT_ENABLE RBC_INT; Koodi, joka tarvitsee tietää, mihin suuntaan nuppi pyörii@ INT_DISABLE RBC_INT; Muu koodiEND; ProgrammyISR: n loppu:; ISR -koodi täällä@ INT_RETURN (Keskeytyskäsittelijän asetustaulukko) Luulen, että tähän voivat liittyä uudelleen kaikki, jotka eivät käytä PIC- tai DT -keskeytyksiä. Nyt meidän on todella kirjoitettava ISR, jotta mikro -ohjain tietää, mihin suuntaan nuppi pyörii. Muista ohjelmistoteorian osasta, että voimme päätellä pyörimissuunnan, jos tiedämme keskeytyksen aiheuttaneen tulon, sen uuden arvon ja muun syötteen arvon. Tässä on pseudokoodi: Lue PORTB raaputusmuuttujaan poistaaksesi keskeytyslipun Tarkista, aiheuttaako A keskeytyksen. Jos totta, vertaa A ja B. Tarkista, ovatko erilaiset, jos erilaiset, se oli myötäpäivään, muuten se oli vastapäivään EndifCheck, jos B aiheutti keskeytyksen. Jos totta, vertaa A ja B Tarkista, onko eri, jos sama, se oli myötäpäivään, muuten se oli vastapäivään EndifPalautus keskeytyksestä Mistä tiedämme, aiheuttaako A- tai B -muutos keskeytyksen? Muutetun tulon ja muun (muuttumattoman) tulon uuden arvon löytäminen on helppoa, koska voimme lukea ne ISR: n sisällä. Meidän on tiedettävä jokaisen tila ennen kuin teloitus lähetetään ISR: lle. Tämä tapahtuu päärutiinissa. Päärutiini istuu ja odottaa, että CWflag -niminen tavumuuttuja asetetaan 1: ksi tai ISR tyhjentää sen 0: ksi. Jokaisen kuittaetun nupin vaihdon jälkeen tai jos nuppitoimintaa ei tapahdu, muuttuja asetetaan arvoon 5 ilmaisemaan valmiustila. Jos lippu asetetaan tai poistetaan, päärutiini nostaa tai pienentää välittömästi asetuspistettä asianmukaisesti pyörimisen perusteella ja asettaa sitten CWflag -muuttujan takaisin 5: een, koska nuppi on nyt taas tyhjäkäynnillä. Koska päärutiini on CWflag -tarkistus, se dokumentoi myös A- ja B -kiertokytkinarvojen tilan. Tämä on todella yksinkertaista ja näyttää tältä: oldA = AoldB = BTässä ei todellakaan ole mitään hienoa. Sisällytä vain ne kaksi riviä silmukan alkuun, joka tarkistaa CW -lipun pyörimisen. Päivitämme vain tulojen logiikka -arvoja päärutiinin lisäys-/vähennyslenkin sisällä olevasta kiertonupista, jotta voimme nähdä, mikä tulo aiheutti keskeytyksen, kun ISR suoritetaan. Tässä on ISR -koodi: ABchange: scratch = PORTB 'Lue PORTB poistaaksesi keskeytyslipun' Jos A aiheuttaa keskeytyksen, tarkista B: n pyörimissuunta IF oldA! = A THEN 'Jos A ja B ovat erilaisia, se oli myötäpäivään A! = B THEN GOTO CW 'Muussa tapauksessa se pyörii vastapäivään ELSE GOTO CCW ENDIF ENDIF' Jos B aiheuttaa keskeytyksen, tarkista pyörimissuunta A, jos vanhaB! = B THEN oli myötäpäivään, jos A == B THEN GOTO CW 'Muussa tapauksessa se oli vastapäivään ELSE GOTO CCW ENDIF ENDIFCW: CWflag = 1@ INT_RETURNCCW: CWflag = 0@ INT_RETURNI sisällytin ISR -koodin AB_ISR.bas -tiedostoon, koska nyt, koska ISR: llä on tulojen A ja B vanhat arvot, se voi määrittää, mikä tulo aiheutti keskeytyksen, verrata sitä toiseen (muuttumaton) tuloon ja määrittää suunnan kierto. Kaikki tärkeimmät rutiinit on vain tarkistaa CWflag nähdäksesi mihin suuntaan nuppi on kääntynyt (jos on) ja lisätä tai pienentää laskuria, asetuspistettä tai mitä haluat tai tarvitset. Toivon, että tämä auttaa eikä ole ollut liian hämmentävä. Tämäntyyppinen käyttöliittymä on erityisen hyödyllinen, jos järjestelmäsi käyttää jo keskeytyksiä, koska tämä on vain yksi keskeytys lisättäväksi. Nauttia!
Suositeltava:
Hallitse talon valoja Google Assistantin avulla Arduinon avulla: 7 vaihetta
Hallitse talon valoja Google Assistantin avulla Arduinon avulla: (Päivitys 22.8.2020: Tämä ohje on 2 vuotta vanha ja perustuu joihinkin kolmansien osapuolien sovelluksiin. Kaikki heidän puolellaan tehdyt muutokset saattavat tehdä projektista toimimattoman. Se voi olla tai ei työskentele nyt, mutta voit seurata sitä viitteenä ja muokata sen mukaan
Useiden ESP-keskustelujen tekeminen ESP-NOW: n avulla ESP32: n ja ESP8266: n avulla: 8 vaihetta
Useiden ESP-keskustelujen tekeminen ESP-NYT: n avulla ESP32: n ja ESP8266: n avulla: Käynnissä olevassa projektissani tarvitsen useita ESP: itä puhuakseni keskenään ilman reititintä. Tätä varten käytän ESP-NOW-ohjelmaa langattoman viestinnän tekemiseen keskenään ilman ESP: n reititintä
Ihmisen ja tietokoneen käyttöliittymä: Function a Gripper (valmistaja Kirigami) ranneliikkeen avulla EMG: n avulla: 7 vaihetta
Ihmisen ja tietokoneen käyttöliittymä: Function a Gripper (valmistaja Kirigami) ranneliikkeen avulla EMG: n avulla: Joten tämä oli ensimmäinen kokeiluni ihmisen ja tietokoneen välisessä käyttöliittymässä. pythonin ja arduinon kautta ja käytti origamipohjaista tarttujaa
Suuntautumisen opiskelu Raspberry Pi: n ja MXC6226XU: n avulla Pythonin avulla: 6 vaihetta
Suuntautumisen opiskelu Raspberry Pi: n ja MXC6226XU: n avulla Pythonin avulla: Äänet ovat yksinkertaisesti osa ajoneuvon työskentelyä. Hyvin viritetyn ajoneuvomoottorin humina on upea ääni. Renkaiden kulutuspinnat nurisevat tietä vasten, tuuli huutaa peilien, muovikappaleiden ja kojelaudan kappaleiden ympäri
Hiekkalaatikkohanke: BAC -laskenta ja tulkinta: 6 vaihetta
Hiekkalaatikkoprojekti: BAC -laskenta ja tulkinta: Haarika Gogineni, Hana Schlosser ja Benedict Uiseco Tässä projektissa yritämme laskea veren alkoholipitoisuuden (BAC) aiheen juomien määrän, painon ja sukupuolen perusteella. Lasketun BAC -arvon antamisen jälkeen ilmoitamme