- Potrebni materiali:
- Izračunavanje prevožene hitrosti in razdalje:
- Shema vezja in nastavitev strojne opreme:
- Simulacija:
- Programiranje vašega PIC16F877A:
- Delovna razlaga:
Merjenje hitrosti / vrt / min vozila ali motorja je bil za nas vedno zanimiv projekt. Torej, v tem projektu bomo zgradili takšnega z uporabo industrijsko pripravljenih mikrokrmilnikov PIC. Za merjenje hitrosti bomo uporabili kos magneta in Hallov senzor. Obstajajo tudi drugi načini / senzorji za merjenje hitrosti, vendar je uporaba dvoranskega senzorja poceni in se lahko uporablja tudi na vseh vrstah motorjev / vozil. S tem projektom bomo tudi izboljšali svoje znanje pri učenju PIC16F877A, saj projekt vključuje uporabo prekinitev in časovnikov. Na koncu tega projekta boste lahko izračunali hitrost in razdalje, ki jih prevozi kateri koli vrtljivi predmet, in jih prikazali na 16x2 LCD zaslonu. Začnimo s tem vezjem digitalnega števca hitrosti in števca kilometrov s PIC.
Potrebni materiali:
- PIC16F877A
- 7805 Regulator napetosti
- Hallov senzor učinka (US1881 / 04E)
- 16 * 2 LCD zaslon
- Majhen košček magneta
- Priključne žice
- Kondenzatorji
- Breadboard.
- Napajanje
Izračunavanje prevožene hitrosti in razdalje:
Preden dejansko začnemo graditi vezje, naj razumemo, kako bomo s Hallovim senzorjem in magnetom izračunali hitrost kolesa. Prej smo uporabljali isto tehniko za izdelavo merilnika hitrosti Arduino, ki prikazuje odčitke na pametnem telefonu Android.
Hallov senzor je naprava, ki lahko zazna prisotnost magneta glede na njegovo polarnost. Na kolo nataknemo majhen košček magneta in senzor dvorane postavimo blizu njega tako, da ga vsakič, ko se kolo zavrti, senzor dvorane zazna. Nato s pomočjo merilnikov časa in prekinitev na našem mikrokrmilniku PIC izračunamo čas, potreben za eno popolno vrtenje kolesa.
Ko je potreben čas znan, lahko izračunamo RPM z uporabo spodnjih formul. Kjer 1000 / čas nam bo dal RPS, nadaljnje množenje s 60 pa RPM
vrt / min = (1000 / zajeti čas) * 60;
Kjer (1000 / zaseženi čas) daje število vrtljajev v minuti (vrtljajev na sekundo) in se pomnoži s 60 za pretvorbo vrtljajev v vrtljaje v minuto (vrtljajev v minuti).
Zdaj za izračun hitrosti vozila moramo poznati polmer kolesa. V našem projektu smo uporabili majhno kolo za igrače s polmerom le 3 cm. Vendar smo domnevali, da je polmer kolesa 30 cm (0,3 m), da si lahko vizualiziramo odčitke.
Vrednost se pomnoži tudi z 0,37699, saj vemo, da je hitrost = (RPM (premer * Pi) / 60). Formule so poenostavljene do
v = polmer_kolesa * vrt / min * 0,37699;
Ko izračunamo hitrost, lahko s podobno metodo izračunamo tudi prevoženo razdaljo. Z našo razporeditvijo dvorane in magneta vemo, kolikokrat se je kolo zavrtelo. Poznamo tudi polmer kolesa, s pomočjo katerega lahko najdemo obseg kolesa, ob predpostavki, da je polmer kolesa 0,3 m (R), vrednosti obsega Pi * R * R pa 0,2827. To pomeni, da ob vsakem srečanju halskega senzorja z magnetom kolo prevozi razdaljo 0,2827 metra.
Razdalja_pokrita = razdalja_pokrita + obseg_kroga
Ker zdaj vemo, kako bo ta projekt deloval, nadaljujemo z našim vezjem in ga začnemo graditi.
Shema vezja in nastavitev strojne opreme:
Shema vezja tega projekta merilnika hitrosti in števca kilometrov je zelo preprosta in jo je mogoče zgraditi na plošči. Če ste sledili vadnicam PIC, lahko tudi ponovno uporabite strojno opremo, ki smo jo uporabili za učenje mikrokrmilnikov PIC. Tu smo uporabili isto perf ploščo, ki smo jo zgradili za LED utripanje z mikrokrmilnikom PIC, kot je prikazano spodaj:
Zatični priključki za PIC16F877A MCU so podani v spodnji tabeli.
S. Št: |
PIN številka |
Pripnite ime |
Povezan z |
1. |
21. |
RD2 |
RS LCD |
2. |
22. |
RD3 |
E LCD |
3. |
27. |
RD4 |
D4 LCD |
4. |
28. |
RD5 |
D5 LCD |
5. |
29. |
RD6 |
D6 LCD |
6. |
30. |
RD7 |
D7 LCD |
7. |
33 |
RB0 / INT |
3 rd pin Hall-ovega tipala |
Ko zgradite svoj projekt, mora biti videti približno tako na spodnji sliki
Kot lahko vidite, sem z dvema škatlama postavil motor in senzor dvorane v bližnji položaj. Magnet lahko pritrdite na svoj vrtljivi predmet in v njem dotaknete dvoranski senzor tako, da lahko zazna magnet.
Opomba: Hallov senzor ima polaritete, zato se prepričajte, kateri pol zazna in ga ustrezno namestite.
Prepričajte se tudi, da uporabljate vlečni upor z izhodnim zatičem dvoranskega senzorja.
Simulacija:
Simulacija za ta projekt je narejena s pomočjo Proteusa. Ker projekt vključuje premikajoče se predmete, celotnega projekta ni mogoče prikazati s simulacijo, vendar je mogoče preveriti delovanje LCD-ja. Preprosto naložite šestnajstiško datoteko v simulacijo in jo simulirajte. Opazili boste, da LCD deluje, kot je prikazano spodaj.
Za preverjanje delovanja merilnika hitrosti in števca kilometrov sem Hall-jev senzor zamenjal z napravo Logic state. Med simulacijo lahko kliknete gumb logičnega stanja, da sprožite prekinitev in preverite, ali se prevožena hitrost in razdalja posodabljata, kot je prikazano zgoraj.
Programiranje vašega PIC16F877A:
Kot smo že omenili, bomo za izračun časa, potrebnega za eno popolno vrtenje kolesa, uporabili časomere in prekinitve v mikrokrmilniku PIC16F877A. V naši predhodni vadnici smo se že naučili, kako uporabljati merilnike časa. Na koncu tega članka sem dal celotno kodo projekta. V nadaljevanju sem razložil nekaj pomembnih vrstic spodaj.
Spodnje vrstice kode inicializirajo vrata D kot izhodne nožice za povezavo LCD-ja in RB0 kot vhodni zatič za njegovo uporabo kot zunanji pin. Poleg tega smo z OPTION_REG omogočili notranji vlečni upor in 64 postavili kot predprodajo. Nato omogočimo globalno in periferno prekinitev, da omogočimo časovno in zunanjo prekinitev. Če želite definirati RB0 kot zunanji prekinitveni bit, je treba INTE povišati. Vrednost Overflow is je nastavljena na 100, tako da se za vsako 1 milisekundo sproži zastavica prekinitve časovnika TMR0IF. To bo pomagalo zagnati merilnik milisekund in določiti čas, potreben v milisekundah:
TRISD = 0x00; // PORTD je deklariran kot izhod za povezovanje LCD TRISB0 = 1; // DEfinirajte pin RB0 kot vhod za uporabo kot prekinitveni pin OPTION_REG = 0b00000101; // Timer0 64 kot prescalar // Omogoča tudi PULL UPs TMR0 = 100; // Naloži časovno vrednost za 1 ms; delayValue je lahko med 0-256 samo TMR0IE = 1; // Omogoči bit prekinitve časovnika v registru PIE1 GIE = 1; // Omogoči globalno prekinitev PEIE = 1; // omogoči periferno prekinitev INTE = 1; // Omogoči RB0 kot zunanji prekinitveni zatič
Spodnja funkcija se bo izvajala vsakič, ko bo zaznana prekinitev. Funkcijo lahko poimenujemo po naši želji, zato sem jo poimenoval speed_isr (). Ta program se ukvarja z dvema prekinitvama, ena je časovna prekinitev, druga pa zunanja prekinitev. Kadarkoli pride do prekinitve s časovnikom, zastavica TMR0IF preide visoko, da odstranimo in ponastavimo prekinitev, jo moramo znižati tako, da določimo TMR0IF = 0, kot je prikazano v spodnji kodi.
void interrupt speed_isr () {if (TMR0IF == 1) // Časovnik je preletel {TMR0IF = 0; // Počisti zastavico prekinitve časovnika milli_sec ++; } če (INTF == 1) {vrt / min = (1000 / mili_sek) * 60; hitrost = 0,3 * vrt / min * 0,37699; // (ob predpostavki, da je polmer koles 30 cm) INTF = 0; // počisti zastavico prekinitve milli_sec = 0; razdalja = razdalja + 028,2; }}
Podobno, ko pride do zunanje prekinitve, se bo zastavica INTF dvignila visoko, tudi to je treba počistiti z določitvijo INTF = 0. Čas s časovnikom prekine čas, zunanji prekinitev pa določi, kdaj je kolo zaključilo eno polno vrtenje. S temi podatki se med vsako zunanjo prekinitvijo izračuna hitrost in razdalja, ki ju prevozi kolo.
Ko se izračuna hitrost in razdalja, jih lahko preprosto prikažemo na LCD zaslonu z našimi funkcijami LCD. Če ste prvič na LCD-ju, si oglejte naš povezovalni LCD z vadnico PIC16F877A MCU.
Delovna razlaga:
Ko pripravite strojno in programsko opremo, preprosto naložite kodo na svoj PIC16F877A. Če ste popolnoma novi v PIC, boste morali prebrati nekaj vadnic o tem, kako prenesti program v mikrokrmilnik PIC16F877A.
Za ponastavitev hitrosti motorja sem uporabil spremenljivko POT. Isto lahko uporabite tudi za iskanje aplikacije v realnem času. Če vse deluje po pričakovanjih, bi morali hitrost v km / h in razdaljo doseči v metrih, kot je prikazano v spodnjem videu.
Upam, da vam je projekt všeč in ste ga začeli delati. V nasprotnem primeru lahko uporabite svoj spodnji odsek za komentar ali forum, da daste svoj dvom.