- Tarvittavat materiaalit:
- Nopeuden ja kuljetun matkan laskeminen:
- Piirikaavio ja laitteiston asennus:
- Simulointi:
- PIC16F877A: n ohjelmointi:
- Työselitys:
Ajoneuvon tai moottorin nopeuden / kierroksen mittaaminen on aina ollut kiehtova projekti. Joten tässä projektissa aiomme rakentaa sellaisen käyttämällä teollisuusvalmiita PIC-mikrokontrollereita. Käytämme magneetinpalaa ja Hall-anturia nopeuden mittaamiseen. Nopeuden mittaamiseen on muitakin tapoja / antureita, mutta hall-anturin käyttö on halpaa ja sitä voidaan käyttää myös kaiken tyyppisessä moottorissa / ajoneuvossa. Tekemällä tämän projektin parannamme myös taitojamme PIC16F877A: n oppimisessa, koska projektissa käytetään keskeytyksiä ja ajastimia. Tämän projektin lopussa voit laskea minkä tahansa pyörivän kohteen nopeuden ja etäisyydet ja näyttää ne 16x2 LCD-näytöllä. Aloitetaan tästä digitaalisesta nopeusmittarista ja matkamittaripiiristä, jossa on PIC.
Tarvittavat materiaalit:
- PIC16F877A
- 7805 Jännitesäädin
- Hall-efektianturi (US1881 / 04E)
- 16 * 2 LCD-näyttö
- Pieni pala magneettia
- Johtojen liittäminen
- Kondensaattorit
- Leipälauta.
- Virtalähde
Nopeuden ja kuljetun matkan laskeminen:
Ennen kuin aloitamme virtapiirin rakentamisen, ymmärretään, miten käytämme Hall-anturia ja magneettia pyörän nopeuden laskemiseen. Aikaisemmin olemme käyttäneet samaa tekniikkaa rakentaaksemme Arduino-nopeusmittarin, joka näyttää lukemat Android-älypuhelimessa.
Hall-anturi on laite, joka voi havaita magneetin läsnäolon sen napaisuuden perusteella. Kiinnitämme pienen palan magneetin pyörään ja asetamme hallianturin lähelle sitä siten, että joka kerta, kun pyörä pyörii, salassensori havaitsee sen. Sitten käytämme ajastimien ja keskeytysten apua PIC-mikrokontrollerissamme laskeaksesi pyörän täydelle pyörimiselle kuluvan ajan.
Kun käytetty aika on tiedossa, voimme laskea kierrosluvun käyttämällä seuraavia kaavoja: Missä 1000 / käytetty aika antaa meille RPS: n ja kertomalla se 60: llä saat RPM
rpm = (1000 / otettu) * 60;
Missä (1000 / käytetty aika) antaa kierrosluvut (kierrokset sekunnissa) ja se kerrotaan 60: llä, jotta muunnetaan kierrosluvut kierroksiksi (kierrokset minuutissa).
Nyt ajoneuvon nopeuden laskemiseksi meidän on tiedettävä pyörän säde. Projektissamme olemme käyttäneet pientä lelupyörää, jonka säde on vain 3 cm. Oletimme kuitenkin, että pyörän säteen on oltava 30 cm (0,3 m), jotta voimme visualisoida lukemat.
Arvo kerrotaan myös 0,37699: llä, koska tiedämme, että nopeus = (RPM (halkaisija * Pi) / 60). Kaavat on yksinkertaistettu alaspäin
v = pyörän säde * rpm * 0,37699;
Kun laskemme nopeuden, voimme myös laskea kuljetun matkan käyttämällä samanlaista menetelmää. Hall- ja magneettijärjestelmällämme tiedämme, kuinka monta kertaa pyörä on pyöriä. Tiedämme myös pyörän säteen, jonka avulla voimme löytää pyörän kehän olettaen, että pyörän säde on 0,3 m (R), ympyrän Pi * R * R arvot ovat 0,2827. Tämä tarkoittaa, että joka kerta, kun hallianturi kohtaa magneetin, pyörä peittää 0,2827 metrin etäisyyden.
Kantama etäisyys = katettu matka + ympyrän ympärysmitta
Koska nyt tiedämme kuinka tämä projekti toimii, voimme siirtyä piirikaavioon ja aloittaa sen rakentamisen.
Piirikaavio ja laitteiston asennus:
Tämän nopeusmittarin ja matkamittariprojektin piirikaavio on hyvin yksinkertainen ja se voidaan rakentaa leipälaudalle. Jos olet seurannut PIC-oppaita, voit myös käyttää laitteistoa, jota käytimme PIC-mikrokontrollerien oppimiseen. Tässä olemme käyttäneet samaa perf-korttia, jonka olemme rakentaneet LED-vilkkumiseen PIC-mikrokontrollerilla, kuten alla on esitetty:
PIC16F877A MCU: n nastaliitännät on esitetty alla olevassa taulukossa.
S. ei: |
Pin koodi |
PIN-nimi |
Yhdistetty |
1 |
21 |
RD2 |
LCD: n RS |
2 |
22 |
RD3 |
LCD-näytön E-osa |
3 |
27 |
RD4 |
LCD-näytön D4 |
4 |
28 |
RD5 |
LCD-näytön D5 |
5 |
29 |
RD6 |
LCD-näytön D6 |
6 |
30 |
RD7 |
LCD-näytön D7 |
7 |
33 |
RB0 / INT |
3 rd pin Hall-anturin |
Kun rakennat projektisi, sen pitäisi näyttää tältä tältä alla olevassa kuvassa
Kuten näette, olen käyttänyt kahta laatikkoa moottorin ja hallianturin sijoittamiseen lähiasentoon. Voit kiinnittää magneetin pyörivään esineeseesi ja vahingoittaa sen lähellä olevaa salisensoria siten, että se tunnistaa magneetin.
Huomaa: Hall-anturissa on napaisuuksia, joten varmista, minkä navan se havaitsee, ja aseta se vastaavasti.
Varmista myös, että käytät pull-up-vastusta hallianturin ulostulotapin kanssa.
Simulointi:
Tämän projektin simulointi tehdään Proteus-sovelluksella. Koska projekti sisältää liikkuvia esineitä, koko projektia ei voida osoittaa simulaatiolla, mutta nestekidenäytön toiminta voidaan varmistaa. Yksinkertaisesti lataa heksatiedosto simulaatioon ja simuloi se. Voit huomata nestekidenäytön toimivan alla esitetyllä tavalla.
Nopeusmittarin ja matkamittarin toimivuuden tarkistamiseksi olen korvannut Hall-anturin Logic-tilalaitteella. Simulaation aikana voit napsauttaa logiikkatilapainiketta käynnistääksesi keskeytyksen ja tarkistaa, päivittyvätkö nopeus ja etäisyys edellä esitetyllä tavalla.
PIC16F877A: n ohjelmointi:
Kuten aiemmin mainittiin, käytämme ajastimien ja keskeytysten apua PIC16F877A-mikro-ohjaimessa pyörän täydelliseen pyörimiseen kuluvan ajan laskemiseksi. Olemme jo oppineet käyttämään ajastimia peräkkäisessä opetusohjelmassa. Olen antanut projektin täydellisen koodin tämän artikkelin lopussa. Lisäksi olen selittänyt muutaman tärkeän rivin alla.
Seuraavat koodirivit alustavat portin D lähtöliittimiksi LCD-liitäntää varten ja RB0: n tulotappina sen käyttämiseksi ulkoisena nastana. Lisäksi olemme ottaneet käyttöön sisäisen vetovastuksen OPTION_REG: n avulla ja asettaneet myös 64 esiasetukseksi. Sitten otamme käyttöön yleisen ja perifeerisen keskeytyksen, jotta ajastin ja ulkoinen keskeytys voidaan ottaa käyttöön. RB0: n määrittelemiseksi ulkoiseksi keskeytysbitiksi INTE: n tulisi olla korkea. Ylivuoto-arvon arvoksi on asetettu 100 niin, että jokaista 1 millisekuntia kohden ajastimen keskeytyslippu TMR0IF laukeaa. Tämä auttaa käyttämään millisekunnin ajastinta millisekunnissa käytetyn ajan määrittämiseksi:
TRISD = 0x00; // PORTD ilmoitettu LCD TRISB0 -liitännän lähtöliitännäksi = 1; // DEMääritä RB0-nasta sisääntuloksi käytettäväksi keskeytystapina OPTION_REG = 0b00000101; // Ajastin0 64 esiarvona // Mahdollistaa myös PULL UPs TMR0 = 100; // Lataa aika-arvo 1 ms; delayValue voi olla välillä 0-256 vain TMR0IE = 1; // Ota ajastimen keskeytysbitti käyttöön PIE1-rekisterissä GIE = 1; // Ota globaali keskeytys käyttöön PEIE = 1; // Ota perifeerinen keskeytys INTE = 1; // Ota RB0 käyttöön ulkoisena keskeytystapina
Alla oleva toiminto suoritetaan aina, kun keskeytys havaitaan. Voimme nimetä funktion toiveemme mukaan, joten olen nimennyt sen nimellä speed_isr (). Tämä ohjelma käsittelee kahta keskeytystä, joista toinen on Ajastinkeskeytys ja toinen Ulkoinen keskeytys. Aina, kun ajastinkeskeytys tapahtuu, lippu TMR0IF nousee korkealle, jotta keskeytys voidaan tyhjentää ja nollata, meidän on tehtävä se matalaksi määrittelemällä TMR0IF = 0 alla olevan koodin mukaisesti.
void keskeytä speed_isr () {if (TMR0IF == 1) // Ajastin on ylittänyt {TMR0IF = 0; // Tyhjennä ajastimen keskeytyslippu milli_sec ++; } if (INTF == 1) {rpm = (1000 / milli_sek) * 60; nopeus = 0,3 * rpm * 0,37699; // (olettaen, että pyörän säde on 30 cm) INTF = 0; // tyhjennä keskeytyslippu milli_sec = 0; etäisyys = etäisyys + 028,2; }}
Vastaavasti, kun ulkoinen keskeytys tapahtuu, lippu INTF nousee korkealle, tämäkin tulisi tyhjentää määrittelemällä INTF = 0. Ajastinkeskeytys seuraa kulunutta aikaa ja ulkoinen keskeytys määrittää, milloin pyörä on suorittanut yhden täyden kierroksen. Näiden tietojen perusteella pyörän kuljettama nopeus ja etäisyys lasketaan jokaisen ulkoisen keskeytyksen aikana.
Kun nopeus ja etäisyys on laskettu, ne voidaan yksinkertaisesti näyttää LCD-näytöllä LCD-toimintojemme avulla. Jos LCD-näytöt ovat sinulle uusia, tutustu käyttöliittymiin, joissa on PIC16F877A MCU -opetusohjelma.
Työselitys:
Kun olet saanut laitteiston ja ohjelmiston valmiiksi, lataa koodi yksinkertaisesti laitteeseen PIC16F877A. Jos olet täysin uusi PIC-käyttäjä, sinun on luettava muutama opetusohjelma ohjelman lataamisesta PIC16F877A-mikrokontrolleriin.
Olen käyttänyt muuttuvaa POT: ta säätääksesi moottorin nopeuden esittelyä varten. Voit myös käyttää samaa löytääksesi reaaliaikaisen sovelluksen. Jos kaikki toimii odotetulla tavalla, sinun pitäisi pystyä saamaan nopeus kilometreinä / tunnissa ja etäisyys katettuina metreinä alla olevan videon mukaisesti.
Toivottavasti pidit projektista ja sait sen toimimaan. Jos ei, voit käyttää epäilyjä alla olevan kommenttiosion tai foorumin kautta.