- Potřebné materiály:
- Výpočet rychlosti a ujeté vzdálenosti:
- Schéma zapojení a nastavení hardwaru:
- Simulace:
- Programování vašeho PIC16F877A:
- Pracovní vysvětlení:
Měření rychlosti / otáček vozidla nebo motoru bylo pro nás vždy fascinujícím projektem, který jsme mohli vyzkoušet. V tomto projektu tedy postavíme jeden pomocí mikrokontrolérů PIC připravených pro průmysl. K měření rychlosti použijeme magnet a Hallův senzor. Existují i jiné způsoby / senzory pro měření rychlosti, ale použití Hallova senzoru je levné a lze jej použít i na jakýkoli typ motoru / vozidla. Tím, že provedeme tento projekt, také zdokonalíme naše dovednosti při učení se PIC16F877A, protože projekt zahrnuje použití přerušení a časovačů. Na konci tohoto projektu budete moci vypočítat rychlost a vzdálenosti ujeté jakýmkoli rotujícím objektem a zobrazit je na 16x2 LCD obrazovce. Začněme s tímto obvodem digitálního rychloměru a počítadla kilometrů s PIC.
Potřebné materiály:
- PIC16F877A
- Regulátor napětí 7805
- Hallův snímač (US1881 / 04E)
- 16 * 2 LCD displej
- Malý kousek magnetu
- Připojovací vodiče
- Kondenzátory
- Nepájivá deska.
- Zdroj napájení
Výpočet rychlosti a ujeté vzdálenosti:
Než skutečně začneme budovat obvod, pochopme, jak budeme pomocí Hallova snímače a magnetu počítat rychlost kola. Dříve jsme stejnou techniku použili k vytvoření rychloměru Arduino, který zobrazuje hodnoty na chytrém telefonu Android.
Hallův senzor je zařízení, které dokáže detekovat přítomnost magnetu na základě jeho polarity. Nalepíme malý kousek magnetu na kolo a umístíme Hallovo čidlo do jeho blízkosti tak, aby to zakaždým, když kolo otočí, detekovalo Hallovo čidlo. Poté použijeme pomoc časovačů a přerušení na našem mikrokontroléru PIC k výpočtu času potřebného pro jedno úplné otočení kola.
Jakmile je známý čas, můžeme vypočítat RPM pomocí níže uvedených vzorců, kde 1000 / čas potřebný nám dá RPS a jeho dalším násobením 60 získáte RPM
ot./min = (1 000 / časový rozvrh) * 60;
Kde (1000 / timetaken) udává rps (otáčky za sekundu) a vynásobí se 60 k převodu rps na rpm (otáčky za minutu).
Nyní pro výpočet rychlosti vozidla musíme znát poloměr kola. V našem projektu jsme použili malé hrací kolečko, které má poloměr pouhých 3 cm. Předpokládali jsme však, že poloměr kola má být 30 cm (0,3 m), abychom mohli odečty vizualizovat.
Hodnota se také znásobí 0,37699, protože víme, že Velocity = (RPM (průměr * Pi) / 60). Vzorce jsou zjednodušeny až na
v = poloměr kola * rpm * 0,37699;
Jakmile vypočítáme rychlost, můžeme také vypočítat ujetou vzdálenost pomocí podobné metody. Díky našemu uspořádání Hall a magnetů víme, kolikrát se kolo otočilo. Známe také poloměr kola, pomocí kterého můžeme zjistit obvod kola, za předpokladu, že poloměr kola bude 0,3 m (R), budou hodnoty obvodu Pi * R * R 0,2827. To znamená, že pokaždé, když se halový senzor setká s magnetem, ujede kolo 0,2827 metru.
Vzdálenost_krytá = vzdálenost_krytá + obvod_kruhu
Protože teď víme, jak bude tento projekt fungovat, pojďme pokračovat v našem schématu zapojení a začít ho stavět.
Schéma zapojení a nastavení hardwaru:
Schéma zapojení tohoto projektu Rychloměr a Počítadlo ujetých kilometrů je velmi jednoduché a lze jej postavit na prkénku. Pokud jste sledovali výukové programy PIC, můžete také znovu použít hardware, který jsme použili pro učení mikrokontrolérů PIC. Zde jsme použili stejnou desku perf, kterou jsme postavili pro LED blikání s mikrokontrolérem PIC, jak je znázorněno níže:
Pinová připojení pro PIC16F877A MCU jsou uvedena v tabulce níže.
S.No: |
Číslo PIN |
Název PIN |
Připojen 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če |
Jakmile vytvoříte svůj projekt, měl by na následujícím obrázku vypadat nějak takto
Jak vidíte, použil jsem dvě krabice k umístění motoru a Hallova senzoru do blízké polohy. Magnet můžete zafixovat na rotující předmět a v jeho blízkosti narušit Hallovo čidlo tak, aby magnet dokázal detekovat.
Poznámka: Hallův snímač má polaritu, proto se ujistěte, který pól detekuje, a podle toho jej umístěte.
Také se ujistěte, že používáte Pull-up rezistor s výstupním kolíkem Hallova snímače.
Simulace:
Simulace tohoto projektu se provádí pomocí programu Proteus. Jelikož projekt zahrnuje pohybující se objekty, není možné demonstrovat celý projekt pomocí simulace, ale lze ověřit fungování LCD. Jednoduše načtěte hexadecimální soubor do simulace a simulujte jej. Budete si moci všimnout, že LCD pracuje, jak je uvedeno níže.
Pro kontrolu rychloměru a počítadla kilometrů jsem vyměnil Hallovo čidlo za zařízení se stavem Logic. Během simulace můžete klepnutím na tlačítko logického stavu spustit přerušení a zkontrolovat, zda se rychlost a ujetá vzdálenost aktualizují, jak je uvedeno výše.
Programování vašeho PIC16F877A:
Jak již bylo řečeno, k výpočtu doby potřebné na jedno úplné otočení kola použijeme pomocí časovačů a přerušení v mikrokontroléru PIC16F877A. Již jsme se naučili, jak používat časovače v našem všudypřítomném tutoriálu. Na konci tohoto článku jsem dal kompletní kód projektu. Dále jsem vysvětlil několik důležitých řádků níže.
Níže uvedené řádky kódu inicializují Port D jako výstupní piny pro rozhraní LCD a RB0 jako vstupní pin pro použití jako externí Pin. Dále jsme povolili interní pull-up rezistor pomocí OPTION_REG a také jsme nastavili 64 jako předprodej. Poté povolíme globální a periferní přerušení, abychom povolili časovač a externí přerušení. Chcete-li definovat RB0 jako externí bit přerušení, měl by být nastaven vysoký INTE. Hodnota Přetečení je nastavena na 100, takže po každých 1 milisekundách bude spuštěn příznak přerušení časovače TMR0IF. To pomůže spustit milisekundový časovač k určení času potřebného v milisekundách:
TRISD = 0x00; // PORTD deklarován jako výstup pro propojení LCD TRISB0 = 1; // DEdefinujte pin RB0 jako vstup, který se použije jako přerušovací pin OPTION_REG = 0b00000101; // Timer0 64 as prescalar // Také umožňuje PULL UPs TMR0 = 100; // Načte časovou hodnotu na 1ms; delayValue může být mezi 0-256 pouze TMR0IE = 1; // Povolit bit přerušení časovače v registru PIE1 GIE = 1; // Povolit globální přerušení PEIE = 1; // Povolit periferní přerušení INTE = 1; // Povolit RB0 jako externí Přerušovací kolík
Níže uvedená funkce se provede pokaždé, když je detekováno přerušení. Funkci můžeme pojmenovat podle našeho přání, tak jsem ji pojmenoval jako speed_isr (). Tento program se zabývá dvěma přerušeními, jedním je přerušení časovače a druhým externí přerušení. Kdykoli dojde k přerušení časovače, příznak TMR0IF jde vysoko, abychom vymazali a resetovali přerušení, musíme jej snížit pomocí definování TMR0IF = 0, jak je znázorněno v kódu níže.
void interrupt speed_isr () {if (TMR0IF == 1) // Časovač přetekl {TMR0IF = 0; // Vymazat příznak přerušení časovače milli_sec ++; } if (INTF == 1) {rpm = (1000 / milli_sec) * 60; rychlost = 0,3 * ot / min * 0,37699; // (Za předpokladu, že poloměr kola bude 30 cm) INTF = 0; // vymazat příznak přerušení milli_sec = 0; vzdálenost = vzdálenost + 028,2; }}
Podobně, když dojde k externímu přerušení, bude příznak INTF vysoký, mělo by to být také vymazáno definováním INTF = 0. Časový údaj je udržován ve stopě přerušením časovače a externí přerušení určuje, kdy kolo dokončilo jedno úplné otáčení. S těmito údaji se vypočítává rychlost a vzdálenost ujeté kolem kola při každém externím přerušení.
Jakmile je vypočítána rychlost a vzdálenost, lze je jednoduše zobrazit na LCD obrazovce pomocí našich LCD funkcí. Pokud jste na LCD začátečník, přečtěte si náš návod na rozhraní LCD s MCU PIC16F877A.
Pracovní vysvětlení:
Jakmile připravíte hardware a software, jednoduše nahrajte kód do svého PIC16F877A. Pokud jste v PIC úplně noví, měli byste si přečíst několik návodů, jak vědět, jak nahrát program na mikrokontrolér PIC16F877A.
Použil jsem variabilní POT k nastavení rychlosti motoru pro demonstrační účely. Můžete také použít to samé pro vyhledání aplikace v reálném čase. Pokud vše funguje podle očekávání, měli byste být schopni získat rychlost v km / hod a ujetou vzdálenost v metrech, jak je znázorněno na videu níže.
Doufám, že se vám projekt líbil a fungoval. Pokud ne, můžete k odeslání pochybností použít sekci komentářů níže nebo fórum.