- Potrebné materiály:
- Výpočet rýchlosti a prejdenej vzdialenosti:
- Schéma zapojenia a nastavenie hardvéru:
- Simulácia:
- Programovanie vášho PIC16F877A:
- Pracovné vysvetlenie:
Meranie rýchlosti / otáčok vozidla alebo motora bolo pre nás vždy fascinujúcim projektom, ktorý sme mohli vyskúšať. V tomto projekte teda postavíme jeden pomocou mikrokontrolérov PIC pripravených na priemyselné použitie. Na meranie rýchlosti použijeme kúsok magnetu a Hallov senzor. Existujú aj iné spôsoby / snímače na meranie rýchlosti, ale použitie halového snímača je lacné a dá sa tiež použiť na akýkoľvek typ motora / vozidla. Realizáciou tohto projektu tiež posilníme naše zručnosti pri učení sa PIC16F877A, pretože projekt zahŕňa použitie prerušovacích hodín a časovačov. Na konci tohto projektu budete môcť vypočítať rýchlosť a vzdialenosť prejdenú akýmkoľvek rotujúcim predmetom a zobraziť ich na 16x2 LCD obrazovke. Začnime týmto obvodom digitálneho rýchlomera a počítadla kilometrov s PIC.
Potrebné materiály:
- PIC16F877A
- Regulátor napätia 7805
- Hallov snímač (US1881 / 04E)
- 16 * 2 LCD displej
- Malý kúsok magnetu
- Pripojovacie vodiče
- Kondenzátory
- Nepál.
- Zdroj
Výpočet rýchlosti a prejdenej vzdialenosti:
Predtým, ako skutočne začneme budovať obvod, pochopme, ako budeme pomocou Hallovho senzora a magnetu počítať rýchlosť kolesa. Predtým sme použili rovnakú techniku na zostavenie rýchlomeru Arduino, ktorý zobrazuje namerané hodnoty na inteligentnom telefóne Android.
Hallov senzor je zariadenie, ktoré dokáže detekovať prítomnosť magnetu na základe jeho polarity. Na koleso nalepíme malý kúsok magnetu a Hallov snímač umiestnime do jeho blízkosti tak, aby zakaždým, keď sa koleso otočí, detekoval to Hallov senzor. Potom pomocou pomoci časovačov a prerušenia na našom mikrokontroléri PIC vypočítame čas potrebný na jedno úplné otočenie kolesa.
Len čo je známy čas, môžeme vypočítať otáčky pomocou nasledujúcich vzorcov. Kde 1 000 / čas nám poskytne RPS a ďalšie vynásobenie číslom 60 vám poskytne otáčky
ot./min = (1 000 / časový rozvrh) * 60;
Kde (1 000 / časový rozvrh) dáva otáčky (otáčky za sekundu) a vynásobí sa 60 na prepočet otáčok na otáčky za minútu (otáčky za minútu).
Teraz, aby sme vypočítali rýchlosť vozidla, musíme poznať polomer kolesa. V našom projekte sme použili malé autíčko, ktoré má polomer iba 3 cm. Ale, predpokladali sme, polomer kolesa má byť 30cm (0.3M), takže môžeme predstaviť merania.
Hodnota sa tiež vynásobí 0,37699, pretože vieme, že Velocity = (RPM (priemer * Pi) / 60). Vzorce sú zjednodušené až po
v = polomer_kolo * rpm * 0,37699;
Akonáhle vypočítame rýchlosť, môžeme pomocou podobnej metódy vypočítať aj prekonanú vzdialenosť. Vďaka nášmu usporiadaniu Hall a magnetov vieme, že koľkokrát sa koleso otočilo. Poznáme tiež polomer kolesa, pomocou ktorého nájdeme obvod kolesa, za predpokladu, že polomer kolesa bude 0,3 m (R), budú hodnoty obvodu Pi * R * R 0,2827. To znamená, že zakaždým, keď sa halový senzor stretne s magnetom, je kolesom prekonaná vzdialenosť 0,2827 metra.
Vzdialenosť_kryté = vzdialenosť_kryté + obvod_obvodu
Pretože teraz vieme, ako bude tento projekt fungovať, pokračujme v našej schéme zapojenia a začnime ju budovať.
Schéma zapojenia a nastavenie hardvéru:
Schéma zapojenia tohto projektu rýchlomera a počítadla kilometrov je veľmi jednoduchá a dá sa postaviť na doske. Ak ste sledovali výukové programy PIC, môžete tiež znova použiť hardvér, ktorý sme použili na učenie mikrokontrolérov PIC. Tu sme použili rovnakú dosku perf, ktorú sme postavili pre LED blikanie s mikrokontrolérom PIC, ako je uvedené nižšie:
Pinové pripojenia pre MCU PIC16F877A sú uvedené v nasledujúcej tabuľke.
S.No: |
PIN kód |
Názov špendlíka |
Pripojený k |
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 kolík Hallova snímača |
Po vytvorení projektu by mal na nasledujúcom obrázku vyzerať niečo také
Ako vidíte, pomocou dvoch boxov som umiestnil motor a Hallov senzor do blízkej polohy. Môžete pripevniť magnet na svoj rotujúci predmet a neporušiť Hallov senzor v jeho blízkosti tak, aby magnet dokázal detekovať.
Poznámka: Hallov snímač má polaritu, preto sa uistite, ktorý pól detekuje, a podľa toho ho umiestnite.
Nezabudnite tiež použiť Pull-up rezistor s výstupným pinom Hallovho senzora.
Simulácia:
Simulácia tohto projektu sa vykonáva pomocou programu Proteus. Pretože projekt zahŕňa pohybujúce sa objekty, nie je možné demonštrovať celý projekt pomocou simulácie, ale je možné overiť funkčnosť LCD. Jednoducho načítajte hexadecimálny súbor do simulácie a simulujte ho. Budete si môcť všimnúť, že LCD displej pracuje, ako je to znázornené nižšie.
Aby som skontroloval funkčnosť rýchlomera a počítadla kilometrov, vymenil som Hallov snímač za zariadenie so stavom Logic. Počas simulácie môžete kliknutím na tlačidlo logického stavu spustiť prerušenie a skontrolovať, či sa aktualizovaná rýchlosť a vzdialenosť aktualizujú, ako je uvedené vyššie.
Programovanie vášho PIC16F877A:
Ako už bolo povedané, na výpočet času potrebného na jedno úplné otočenie kolesa použijeme pomocou časovačov a prerušení v mikrokontroléri PIC16F877A. Ako sa používa časovač, sme sa už naučili v našom neúnavnom výučbe. Kompletný kód projektu som uviedol na konci tohto článku. Ďalej som vysvetlil niekoľko dôležitých riadkov nižšie.
Nižšie uvedené riadky kódu inicializujú Port D ako výstupné piny pre rozhranie LCD a RB0 ako vstupný pin na použitie ako externý pin. Ďalej sme povolili interný pull-up rezistor pomocou OPTION_REG a taktiež sme nastavili 64 ako predpredaj. Potom povolíme globálne a periférne prerušenie, aby sme umožnili časovač a externé prerušenie. Definovanie RB0 ako externého prerušovacieho bitu by malo byť urobené vysoko. Hodnota Overflow is je nastavená na hodnotu 100, aby sa každých 1 milisekundu spustil príznak prerušenia časovača TMR0IF. To pomôže spustiť milisekundový časovač na určenie času potrebného v milisekundách:
TRISD = 0x00; // PORTD deklarovaný ako výstup pre prepojenie LCD TRISB0 = 1; // DEfinujte pin RB0 ako vstup, ktorý sa použije ako prerušovací pin OPTION_REG = 0b00000101; // Timer0 64 as prescalar // Tiež umožňuje PULL UPs TMR0 = 100; // Načítanie časovej hodnoty na 1ms; delayValue môže byť medzi 0-256 iba TMR0IE = 1; // Povoliť bit prerušenia časovača v registri PIE1 GIE = 1; // Povoliť globálne prerušenie PEIE = 1; // Povoliť periférne prerušenie INTE = 1; // Povoliť RB0 ako externý pin prerušenia
Nasledujúca funkcia sa vykoná vždy, keď sa zistí prerušenie. Funkciu môžeme pomenovať podľa nášho želania, tak som ju pomenoval ako speed_isr (). Tento program sa zaoberá dvoma prerušeniami, jedným je prerušenie časovačom a druhým je externé prerušenie. Kedykoľvek dôjde k prerušeniu časovača, príznak TMR0IF sa zvýši, aby sme prerušenie vyčistili a resetovali, musíme ho potlačiť definovaním TMR0IF = 0, ako je uvedené v kóde nižšie.
void interrupt speed_isr () {if (TMR0IF == 1) // Časovač pretiekol {TMR0IF = 0; // Vymazať príznak prerušenia časovača milli_sec ++; } if (INTF == 1) {rpm = (1000 / milli_sec) * 60; otáčky = 0,3 * ot / min * 0,37699; // (Za predpokladu, že polomer kolesa bude 30 cm) INTF = 0; // vymaže príznak prerušenia milli_sec = 0; vzdialenosť = vzdialenosť + 028,2; }}
Podobne, keď dôjde k externému prerušeniu, príznak INTF sa zvýši, malo by sa to tiež vyčistiť definovaním INTF = 0. Čas, ktorý sleduje, sleduje stopa prerušením časovača a externé prerušenie určuje, kedy koleso dokončilo jedno úplné otočenie. Na základe týchto údajov sa počas každého externého prerušenia počíta rýchlosť a vzdialenosť, ktorú koleso prekonalo.
Po vypočítaní rýchlosti a vzdialenosti je možné ich pomocou našich funkcií LCD jednoducho zobraziť na obrazovke LCD. Ak ste v oblasti LCD nováčikov, pozrite si náš návod na prácu s rozhraním LCD s MCU PIC16F877A.
Pracovné vysvetlenie:
Keď budete mať pripravený hardvér a softvér, jednoducho nahrajte kód na svoj PIC16F877A. Ak ste v PIC úplne nový, potom by ste si mali prečítať niekoľko návodov, ako zistiť, ako nahrať program do mikrokontroléra PIC16F877A.
Použil som variabilný POT na nastavenie rýchlosti motora na demonštračné účely. To isté môžete použiť aj pri vyhľadávaní aplikácií v reálnom čase. Ak všetko funguje podľa očakávaní, mali by ste byť schopní dosiahnuť rýchlosť v km / hod a vzdialenosť v metroch, ako je to znázornené na videu nižšie.
Dúfam, že sa vám projekt páčil a fungoval. Ak nie, môžete svoje pochybnosti uviesť v sekcii komentárov nižšie alebo na fóre.