Přečtěte si celou práci zde
Transkript
STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST Obor SOČ: 10 – elektrotechnika, elektronika Měření hladiny oleje v osobním automobilu pomocí mikrokontroléru The oil level measuring in a car via microcontroller Autoři: Roman Hruška Damián Pleva Škola: Střední průmyslová škola elektrotechnická, Kounicova 16, Brno Konzultant: Ing. Zdeněk Roubal Brno 2011 Prohlášení Prohlašuji, že jsem svou práci vypracoval(a) samostatně, použil(a) jsem pouze podklady (literaturu, SW atd.) uvedené v přiloženém seznamu a postup při zpracování a dalším nakládání s prací je v souladu se zákonem č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon) v platném znění. V Brně dne ………………… podpis: …………………………… Poděkování Chtěli bych tímto poděkovat Ing. Zdeňkovi Roubalovi za podnětné metodické vedení, Ústavu teoretické a experimentální elektrotechniky za poskytnutí zázemí pro vývoj desky a měření a Jihomoravskému kraji za poskytnutí finančních dotací. Anotace Zařízení sloužící k indikaci výšky hladiny oleje v osobním automobilu nebo jiném průmyslovém stroji je velmi užitečným pomocníkem. Naším cílem bylo navrhnout a sestrojit takové zařízení. Měření probíhá při ustálené hladině, tedy před zapnutím motoru auta, a to pomocí sondy ponořené do oleje. Díky tomu odpadají jiné mechanické prvky. Naměřená hodnota je pak přenášena jako informace pro obsluhu automobilu či zařízení pomocí údaje zobrazeném na LCD displeji. Náš přípravek zjišťuje hladinu oleje pomocí teplotně-odporové sondy. Klíčová slova ATmega16a, měření hladiny oleje, sonda, proudový zdroj, LCD displej Tato práce byla vypracována za finanční podpory Jihomoravského kraje. Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru Obsah 1. Úvod.......................................................................................................................... 6 2. Princip měření hladiny pomocí teplotně-odporové sondy ........................................ 6 2.1 Základní princip ................................................................................................. 6 2.2 Navrhnutý měřící algoritmus ............................................................................. 6 3. Sonda ........................................................................................................................ 6 4. Zkušební ověření principu měření ............................................................................ 7 5. 4.1 Zkušební analogový obvod ................................................................................ 7 4.2 Výsledky měření ................................................................................................ 7 Návrh zkušební desky AVR ..................................................................................... 9 5.1 Mikroprocesor ATmega16a ............................................................................... 9 5.1.1 Stručný popis ................................................................................................... 9 5.1.2 Programování mikroprocesoru ...................................................................... 10 5.1.3 A/D převodník ............................................................................................... 11 5.1.4 Testovací programy ....................................................................................... 13 6. Návrh měřícího obvodu s mikroprocesorem .......................................................... 16 6.1 Blokové schéma ............................................................................................... 16 6.1.1 Stabilizátory 5V ........................................................................................ 16 6.1.2 Invertor napětí ........................................................................................... 17 6.1.3 Zdroj konstantního proudu........................................................................ 17 6.1.4 Externí A/D převodník.............................................................................. 18 6.1.5 LCD displej ............................................................................................... 19 6.1.6 Konektor na teplotní čidlo ........................................................................ 20 6.1.7 Konektror AVR ISP na programování...................................................... 20 6.2 Výroba DPS ..................................................................................................... 20 6.3 Zprovoznění ..................................................................................................... 20 6.4 Kód programu .................................................................................................. 22 6.5 Fyzické provedení zařízení .............................................................................. 24 7. Závěr ....................................................................................................................... 24 8. Přílohy ..................................................................................................................... 25 9. Literatura ................................................................................................................. 33 5 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 1. Úvod Zařízení sloužící k indikaci výšky hladiny oleje v osobním automobilu nebo jiném průmyslovém stroji je velmi užitečným pomocníkem. Naším cílem bylo navrhnout a sestrojit takové zařízení. Měření probíhá při ustálené hladině, tedy před zapnutím motoru auta, a to pomocí sondy ponořené do oleje. Díky tomu odpadají jiné mechanické prvky. Naměřená hodnota je pak přenášena jako informace pro obsluhu automobilu či zařízení pomocí údaje zobrazeném na LCD displeji. Náš přípravek zjišťuje hladinu oleje pomocí teplotně-odporové sondy. 2. Princip měření hladiny pomocí teplotněodporové sondy 2.1 Základní princip Pro měření využíváme teplotní závislost odporu sondy. Do sondy dodáme proudový impuls, který se přemění na energii tepelnou. Teplota části sondy nad hladinou je výrazně vyšší než teplota sondy pod hladinou. Pokud budeme měnit výšku hladiny, bude se měnit délka odporového drátu s vyšší teplotou (na vzduchu) a s nižší Pokud budeme měnit ponoření sondy, bude se měnit také odpor sondy na konci měřícího intervalu. 2.2 Navrhnutý měřící algoritmus Používáme následujícího principu: Pokud sondou bude procházet konstantní proud, můžeme změnu odporu sondy měřit lépe jako změnu napětí. Na sondu přivedeme proudový impuls konstantní délky a změříme napětí na začátku impulsu a na konci. Velikost rozdílu těchto dvou napětí je nepřímo úměrná hloubce ponoření sondy v oleji. Tento rozdíl změříme pomocí 10bitového A/D převodníku v mikroprocesoru. 3. Sonda Využili jsme sondy již sestrojené ke svému účelu, tedy k experimentálnímu měření. Je pevně spojena s kovovým víčkem, které lze nasadit na nádobu s olejem (použili jsme obyčejnou sklenici). Samotná ponorná část sondy je uchycena na posuvném mechanismu. Ponoření sondy lze regulovat pomocí závitu s přesností 0,02mm. Na vývodech sondy jsou paralelně dvě dvojice vodičů, jedna dvojice je připojena na proudový zdroj, druhá složí na měření napětí na sondě. Obr. 1 – Schéma připojení sondy Fotografii sondy naleznete v příloze (1). 6 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 4. Zkušební ověření principu měření 4.1 Zkušební analogový obvod Pro ověření navrženého měřícího algoritmu byl zkonstruován obvod, generující proudové impulsy. Zapojení sestává především ze dvou obvodů NE555 a zdroje konstantního proudu. Integrovaný obvod IO1 typu 555 funguje jako astabilní klopný obvod s dobou zavření t1 = 240s a dobou otevření t2 = 0,2s. Integrovaný obvod IO2 stejného typu funguje jako monostabilní klopný obvod spínaný impulsem z IO1. Dobu proudového impulsu lze nastavit hodnotami R a C časovacího obvodu. Na výstupu z IO2 se nachází tranzistor T1, spínající T2, čímž se zkratuje zdroj referenčního napětí a proud sondou neprochází. Proudový zdroj je realizován referenčním zdrojem v bázi a dalingtonovým tranzistorem T3 typu PNP, který má v emitoru rezistor R1. Proud byl zvolen s ohledem na to, aby nebyl překročen bod vzplanutí oleje, který byl pro námi používaný olej MOGUL M6AD stanoven výrobcem v [2] na 230°C. Musíme proto dbát na to, aby proud sondou nebyl příliš velký, naproti tomu, čím větší proud sondou bude, tím dosáhneme na konci impulsu i větší teploty a tím většího rozlišení (přesnosti). Je třeba podle toho zvolit optimální proud. Pro naše potřeby jsme zvolili proud zhruba 200mA. Obr. 2 – Schéma zkušebního analogového obvodu 4.2 Výsledky měření Na přesném osciloskopu Agilent Technologies MS06104A jsme změřili průběhy napětí při proudových impulsech pro různé ponoření sondy. 7 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru Obr. 3 – Průběh napětí při proudovém impulsu na sondě Z těchto průběhů pak byly vyjmuty pouze ty části, kde nebylo napětí nulové a vykreslily se v jednom grafu, kde vidíme, jak se s postupným ponořováním sondy průběh napětí měnil. Údaj 0mm odpovídá prvnímu doteku sondy s olejem. 1,85 1,80 0mm 1,75 2mm U [V] 1,70 4mm 8mm 1,65 12mm 1,60 16mm 20mm 1,55 24mm 1,50 0,00 0,50 1,00 1,50 2,00 t [s] Graf 1 – Časová závisost napětí pro různá ponoření 8 2,50 3,00 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru Tyto průběhy odpovídají teoretickým matematicko-fyzikálním předpokladům. Nepřesnosti měření byly způsobeny tím, že jsme pro zjednodušení měření nenechali po každém měření sondu úplně vychladnout. Z toho důvodu je posloupnost klesavosti křivek u posledních dvou (20mm a 24mm) vyměněná. V následující tabulce a grafu můžeme sledovat závislost napěťového přírůstku na hloubce ponoření sondy. V tomto grafu se také projevily výše zmíněné nepřesnosti měření. L0 [mm] Ut1 [V] Ut2 [V] ΔU [V] 0 1,5490 1,8732 0,3242 2 1,5324 1,8449 0,3125 4 1,5334 1,8430 0,3096 8 1,5383 1,8264 0,2881 12 1,5480 1,8176 0,2696 16 1,5559 1,8127 0,2568 20 1,5402 1,7697 0,2295 24 1,5471 1,7736 0,2265 Tab. 1 – Napěťový přírůstek v závislosti na ponoření sondy 0,3400 0,3200 0,3000 ΔU [V] 0,2800 0,2600 0,2400 0,2200 0,2000 0 5 10 15 20 25 30 L0 [mm] Graf 2 - Napěťový přírůstek v závislosti na ponoření 5. Návrh zkušební desky AVR 5.1 Mikroprocesor ATmega16a 5.1.1 Stručný popis Pro naše účely se nejlépe hodí tento typ mikroprocesoru především z těchto důvodů: 9 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru - 10bitový A/D převodník - Možnost programovat mikroprocesor v jazyku C - Dostatečný počet vstupně-výstupních portů - Možnost použití interního oscilátoru Cena se v současné době pohybuje okolo 120,-Kč Obr. 4 – Označení pinů ATmega16a 5.1.2 Programování mikroprocesoru Mikroprocesor ATmega16a můžeme díky architektuře AVR programovat bez nutnosti vytahování samotného mikroprocesoru z desky, se kterou pracujeme, a následné zapojování do samostatného programátoru. Na naši zkušební desku stačí jen umístit konektor typu AVRISP propojený s piny, potřebnými k programování mikroproceosesoru. Programování je zajištěno pomocí programátoru AVRISM mkII, který se připojí pomocí USB k počítači a pomocí kablíku k programovanému zařízení. K práci s kódem používáme program AVR Studio 41 od firmy Atmel s knihovnou WinAVR: AVR GCC2, která nám umožňuje psát kód v jazyku C, namísto v jazyku assembler. Tím se nám programování zjednoduší a kód se stává pro člověka přehlednější a čitelnější. V příloze (3) můžete vidět, jak vypadá prostředí programu. 1 2 Volně ke stažení na http://www.atmel.com Volně ke stažení na http://winavr.sourceforge.net 10 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru Obr. 5 – Programátor AVR Na programátoru se po připojení k PC rozsvítí červená kontrolka symbolizující připojení k počítači. Po připojení programátoru ke zkušební desce se kontrolka změní v zelenou barvu, indikující úspěšnou detekci připojeného mikroprocesoru. V AVR Studiu poté klikneme v horní liště ikon na ikonku AVR. Zobrazí se nám možnosti naprogramování. Správnost spojení ověříme tlačítkem „Read“, kterým přečteme signaturu. Pokud je vše v pořádku, vybereme zdrojový zkompilovaný soubor a stiskneme „Program“. Po dokončení zápisu začne mikroprocesor spustí nahraný program (pokud není nastaveno jinak). Pokud by program nefungoval, buď je špatně napsaný, nebo další možnost je, že jsou špatně nastavené pojistky – Fuses (záložka v okně při programování) 5.1.3 A/D převodník Popis: Mikroprocesor ATmega16a v sobě obsahuje zabudovaný 10ti-bitový A/D převodník. Používá metody postupné aproximace. Minimum je 0V a maximální hodnota je VrefLSB. Je možno nastavit napětí na pinu AVCC, napětí na pinu AREF nebo interní napěťovou referenci. Nastavuje se bity REFS1 a REFS0 v registru ADMUX. Obr. 6 – Registr ADMUX [3] REFS1 0 0 1 1 REFS0 0 1 0 1 Vybraná napěťová reference Vnitřní Vref vypnuta, reference na AVCC Vnitřní Vref vypnuta, reference na AREF (PA3) Vnitřní Vref (2,56V) pin AREF (PA3) nepřipojen Vnitřní Vref (2,56V) s externím kondenzátorem na AREF (PA3) Tab. 2 – Nastavení bitů REFS1 a REFS0 [3] Protože při měření nepřekročíme napětí 2,56V, postačí pro naše účely nastavení bitů: 1-1, tedy referenci vnitřní 2,56 V. Snímané napětí na sondě se bude od 0 do 2,56 V dělit do 1023 bitů. Napětí tedy můžeme měřit s přesností na setiny voltu (a na čtvrtiny tisíciny voltu) – na jeden bit připadá změna o cca 0,0025V. Bit ADLAR slouží k tomu, pokud potřebujeme pouze osmibitový výsledek A/D převodu. Při jeho nastavení je pak vyšších 8 bitů v registru ADCH. Napětí budeme snímat mezi vstupními porty ADC0 a ADC1 se ziskem 1x. Ve výše zmíněném registru ADMUX nastavíme na bitech MUX4-0 tuto skutečnost: 11 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru Tab. 3 – Výňatek z tabulky nastavení vstupních kanálů a zisku. [3] Dalším registrem ADC je řídící a stavový registr ADCSRA Obr. 7 – Řídící a stavový registr ADCSRA Popis jednotlivých bitů: ADEN 1 → A/D převodník zapnut 0 → A/D převodník vypnut ADSC 1 → Start A/D převodu, po dokončení převodu se nastaví na → ADFR 1 → A/D převodník běží ve volném módu a průběžně aktualizuje datový registr 0 → Ukončí volný mód ADIF Nastaví se do 1, když je A/D převod dokončen a datový registr je aktualizován ADIE 1 → povolí, 0 → zakáže přerušení ADC conversion complete K tomuto přerušení dojde po dokončení A/D převodu ADS0-ADS2 Určují poměr předděličky, kterým je dělen kmitočet systémových hodin. Výstupní signál z předděličky je přiveden na hodinový vstup A/D převodníku. ADPS2 0 0 0 0 1 1 1 1 ADPS1 0 0 1 1 0 0 1 1 ADPS0 0 1 0 1 0 1 0 1 Dělící poměr 2 2 4 8 16 32 64 128 Tab. 4 – Nastavení poměru předděličky pomocí bitů ADPS2-0 12 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru K dosažení nejlepší přesnosti je třeba předděličku nastavit tak, aby frekvence na hodinovém vstupu A/D převodníku byla mezi 50kHz – 200kHz. Po dokončení A/D převodu je získaná naměřená hodnota uložena do datových registrů ADCL a ADCH. ADCL musí být čten dříve, než ADCH. 5.1.4 Testovací programy 5.1.3.1 Světelný had, opona, ... Následující programy slouží k pochopení práce s porty pomocí příkazů (místo písmene X dosadíte písmeno označující požadovaný port (A, B, C nebo D, ATmega16a disponuje 4x8mi vstupně-výstupními porty): DDRX Nastavení - vstupní / výstupní porty PORTX Při DDRX = 0x00, tedy když je port nastavený na vstup: Při DDRX = 0xFF, tedy když je port nastavený na výstup: Slouží ke čtení ze vstupních portů (musí se předtím nastavit pomocí DDRX) PINX Vstupní: DDRX = 0b00000000; Výstupní: DDRX = 0b11111111; 0 – vysokoimpendační vstup 1 – výstup s rezistorem na kladné napětí logická nula nebo jednička na výstupu x = PINX (přiřadí do x stav portů) Tab. 5 – Přehled základních příkazů pro práci s I/O porty Světelný had (vysvětlení programu za //): #define F_CPU 4000000L //hodnota vnějšího krystalu #include <avr/io.h> #include <util/delay.h> #include "dlouhe_zpozdeni.h" //přidají se potřebné knihovny int main(void) { int i; //definice i unsigned char konstanty[8={ 0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000100, 0b00000010, 0b00000001 }; //vytvoření pole o osmi prvcích DDRC=0xff; //nastavení všech pinů portu C jako výstupních while(1) { //nekonečná smyčka for (i=0;i<14;i++) // for cyklus, měnící // zobrazovaný prvek z pole { PORTC=konstanty[i]; 13 //nastaví na portu C dané // hodnoty Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru dlouhe_zpozdeni(100); //počká 100ms } } } 5.1.3.2 A/D převod Pro ozkoušení A/D převodníku nám posloužil následující program, který naměřené napětí zobrazil pomocí osmi LED diod. Stupnici 1024 bitů tedy rozdělí na 8 částí a testuje pomocí podmínek, v jaké části se napětí nachází a podle toho rozsvěcí postupně LED diody. A/D převod (vysvětlení za //): #define F_CPU 4000000L #include <avr/io.h> #include <util/delay.h> #include "bitove_operace.h" #include "AD_prevod.h" int main(void) DDRC=0xff; //nově se nám zde objevuje knihovna pro //práci s jednotlivými bity registrů //a knihovna pro AD převod { //nastaví vystupní port C unsigned short int hodnota,novahod; while(1) { inicializace_adc(7); //definice proměnných //nekonečná smyčka //příkaz na inicializaci A/D převodníku hodnota = cti_adc_8bit(0); //přiřadí „hodnota“ = výsledek A/D //převodu //testuje, jaká je 10-ti bitově vyjádřená hodnota napětí a //podle toho vysvicuje 0-8 LED diod if (hodnota PORTC }else if (hodnota PORTC }else if (hodnota PORTC }else if (hodnota PORTC }else if (hodnota PORTC }else if (hodnota PORTC }else if (hodnota PORTC }else if (hodnota PORTC <= 32){ = 0b00000001; <= 64 && hodnota > 32){ = 0b00000011; <= 96 && hodnota > 64){ = 0b00000111; <= 128 && hodnota > 96){ = 0b00001111; <= 160 && hodnota > 128){ = 0b00011111; <= 192 && hodnota > 160){ = 0b00111111; <= 224 && hodnota > 192){ = 0b01111111; <= 255 && hodnota > 224){ = 0b11111111; 14 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru }else { PORTC = 0b00011000; } }} Obr. 8 – Zkušební deska na programování ATmega16a Příkazy pro programování v jazyce C nalezneme v [4] Schéma naleznete v příloze (4) a DPS v (5) 15 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 6. Návrh měřícího obvodu s mikroprocesorem 6.1 Blokové schéma Základem obvodu je mikroprocesor ATmega16a, který spouští a vypíná pomocí výstupního portu proudový zdroj, měří napětí na sondě a převádí jej pomocí A/D převodníku do 10ti bitové podoby nebo přijímá data od externího A/D převodníku. Všechna data zpracovává a vypočtené hodnoty (percentuální stav hladiny, napětí na sondě – při testování) zobrazí na LCD displeji, který obsluhuje. Teplotní čidlo DALAS Stabilizátor 5V pro podsvícení LCD a číslicovou část Č. 5V Zdroj 12V Stabilizátor 5V Pro analogovou část Č. 5V LCD displej ATmega16a A. 5V A. 5V +12V Invertor napětí -12V Zdroj konstantního proudu Sonda Ext. A/D převodník Obr. 9 – Blokové schéma měřící desky 6.1.1 Stabilizátory 5V Stabilizátory 7805 nám napětí ze zdroje (12V) sníží napětí na 5V. Jeden z dvou použitých zajišťuje napájení číslicové části a druhý podsvícení LCD displeje, druhý zajišťuje napájení analogové části, tedy např. proudového zdroje. Protože na těchto stabilizátorech dochází k přeměně elektrické energie na tepelnou, je potřeba tyto součástky chladit, a proto jsou obě v zapojení vybaveny hliníkovými chladiči. Obr. 10 – Schéma zapojení stabilizátoru 16 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 6.1.2 Invertor napětí Obvod ICL7660 nám slouží k inverzi 12V na -12V pro napájení proudového zdroje. Tento obvod funguje tak, že v sobě nabije kondenzátor, poté se kondenzátor od vstupního napětí odpojí a připojí se na výstupní kondenzátor tak, že kladný pól je na výstupní zemi a záporný pól na výstup pumpy. Princip nám může objasnit následující schéma: Obr. 11 – Schéma ideálního invertoru napětí Použili jsme kondenzátory elektrolytické, lepší by však bylo použít kondenzátory tantalové. Na funkčnosti to však moc nemění. Tomuto zařízení se také říká nábojová pumpa. Obr. 12 – Invertor napětí (ICL 7660) 6.1.3 Zdroj konstantního proudu Je to obvod OP07CN a je napájen výše zmíněným napětím +12V a -12V. Pomocí rezistorů je přes zpětnou vazbu nastavený na požadovanou hodnotu proudu, kterou se díky svému zapojení snaží stále udržovat. Na výstupu je MOS FET, který spolu s tranzistorem BC556, na jehož bázi je připojený výstup z mikroprocesoru, obsluhuje zapnutí nebo vypnutí zdroje. Digitální a analogová část je zde oddělena optočlenem (4N35). 17 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru Sonda je napájena z 5V. Je napájena přes FET IRF. Operační zesilovač je napájen z +-12V, aby mohlo být dostatečné napětí na G FETu. Jelikož je to P-FET, tak se otevírá při záporném napětí mezi G a S. Protože S je při zapnutí proudového zdroje zhruba na 5 - 1,2V(úbytek na rezistorech), tak napětí na G musí být okolo 0V (to vyplývá z datasheetu). FET potřebuje skoro -4V na své otevření. OZ nemůže mít záporné napájecí napětí 0V, protože by nebyl schopen dát na svůj výstup mírně záporné napětí asi -0,5V aby byl FET dostatečně otevřen. Obr. 13 – Zdroj konstantního proudu 6.1.4 Externí A/D převodník Pomocí přepojek (jumperů) můžeme volit mezi použitím interního A/D převodníku přímo v mikroprocesoru, nebo externího, který máme na desce. Pro naše potřeby byl nejvhodnější MCP3301. Je to 13ti bitový A/D převodník Obr. 14 – Popis vývodů MCP3301 [5] 18 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru Obr. 15 – Blokové schéma externího A/D převodníku MCP3301 [5] 6.1.5 LCD displej Pro předání informace o stavu hladiny oleje jsme zvolili LCD diplej. Narozdíl od ručkového přístroje nebo baragrafu nám umožnil v průběhu testování zobrazit naměřené hodnoty napětí (na začátku a na konci měřícího impulsu), takže pro zpřesnění rovnice pro hloubku ponoření jsme nepotřebovali další měřící přístroje. Prakticky nám posloužil i jako voltmetr. Použili jsme displej MC1602E-SYL/H od firmy Microchip, který má 2x16 pozic. K mikroprocesoru jsme jej připojili přes port C. K tomuto displeji jsme měli k dispozici již připravenou knihovnu na ovládání displeje, takže vypisování hodnot na něj bylo snadné. Znaková sada displeje neobsahuje české znaky, ale je možné nadefinovat nových 8 znaků. Čeština má ale více než osm znaků ryze českých, takže o některá písmena se musíme bohužel ochudit. Pro naše potřeby to však nebylo podstatné. Obr. 16 – LCD displej použitý na zobrazení výsledků měření 19 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru K naší desce připojíme tento displej pomocí plochého kabelu a 34pinových konektorů (stejné jako se používají na připojení disketové mechaniky k MB). Reálně však využijeme pouze polovinu. Obr. 17 – Připojení konektoru 2x17 pinů k ATmega16a Jak je vidět z uvedeného výřezu ze schématu, je zde ještě trimr pro regulaci kontrastu. 6.1.6 Konektor na teplotní čidlo Pro případné další zdokonalení tohoto zapojení je na desce konektor, na který je možné připojit teplotní čidlo DALLAS, které by měřilo teplotu oleje. Došlo by pak ke zpřesnění měření. 6.1.7 Konektror AVR ISP na programování Mikroprocesory architektury AVR umožňují programování přímo v obvodu, stačí vyvést příslušné vývody na konektor, ke kterému se poté připojí programátor. 6.2 Výroba DPS Z navrženého celkového schématu (6) jsme navrhli jednostrannou desku plošných spojů (7). Brali jsme ohled na správnou pozici odrušovacích součástek, a na rozdělení desky na číslicovou a analogovou část. Deska byla poté osvícena a vyleptána v dílně FEKT VUT 3 . Poté jsme vyvrtali díry a připájeli všechny součástky. Na ATmega16a jsme použili patici. 6.3 Zprovoznění 1. Proměřili jsme cesty na desce plošných spojů, jestli není někde zkrat způsobený cínovým spojem nebo jinou chybou při výrobě. 2. Připojili jsme desku ke zdroji a změřili napětí za stabilizátory, za invertorem proudu, zkrátka všude, kde mělo být. 3. Připojili jsme desku k programátoru a načtením signatury jsme ověřili komunikaci s mikroprocesorem. 4. Jako první zkušební program jsme rozsvítili LED diodu na portu A. 5. Zprovoznili jsme LCD displej, A/D převodník a nechali vypisovat na displej napětí na vstupu A/D převodníku 3 Fakulta elektrotechniky a komunikačních technologii Vysokého učení v Brně 20 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 6. Protože zdroj proudu také fungoval správně, připojili jsme sondu s olejem a nechali vypsat na displej napětí na začátku impulsu a na konci impulsu. (Samotný program bude popsán níže) 7. Po dosazení úbytku napětí do vzorce z předchozího měření pomocí analogového zapojení (viz. kapitola 4) jsme nechali na displej vypisovat ponoření sondy v milimetrech. 8. Změřili jsme úbytky napětí v jednotlivých pozicích (hloubce) sondy, upřesnili rovnici pro výpočet hloubky ponoření a vytvořili jsme novou rovnici pro přepočet na procentuální zobrazení. L0 (dotek hladiny) 0 5 10 15 20 25 30 35 40 45 50 55 (maximum) 56,9 U1 1,836 1,831 1,831 1,826 1,831 1,836 1,831 1,831 1,836 1,831 1,831 1,831 1,831 U2 2,275 2,266 2,246 2,192 2,148 2,114 2,07 2,036 2,002 1,963 1,919 1,899 1,885 ΔU 0,439 0,435 0,415 0,366 0,317 0,278 0,239 0,205 0,166 0,132 0,088 0,068 0,054 Tab. 6 – naměřené hodnoty finálním výrobkem při různém ponoření 0,5 0,45 0,4 0,35 0,3 0,25 0,2 0,15 0,1 0,05 y = -0,03588x + 0,49746 0 0 2 4 6 8 10 12 14 Graf 3 – Závislost rozdílu napětí na ponoření sondy a výsledný vzorec 9. Skvělé! Naše sestavené zařízení funguje správně! 21 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 6.4 Kód programu V programu používáme pro usnadnění standardních knihoven, které jsou volně k dispozici Popis programu kousek po kousku: #define F_CPU #include #include #include #include #include #include 1000000L <avr/io.h> <util/delay.h> "dlouhe_zpozdeni.h" "bitove_operace.h" "LCD_ATmega-S6A0069.h" "AD_prevod.h" Definice kmitočtu a vložení knihoven int main(void) { float vysledek1,vysledek2,rozdil,ponoreni,procent; dlouhe_zpozdeni(500); Inicializace_LCD(1); inicializace_adc(2); nastaveni_cestiny(); Ve funkci main se nachází celý program. Pomocí float definujeme proměnné, se kterými budeme později pracovat. Dále program chvíli vyčká, incializuje LCD displej a A/D překladač. Funkce nastaveni_cestiny(); nám umožní používat diakritické znaky na LCD. sbi(DDRA,6); sbi(DDRA,5); sbi(PORTA,6); sbi je instrukce pro nastavení bitu – v našem případě šestého a pátého bitu v registru DDRA. Tím nastavýme tyto bity na portu A na výstupní. Následně nastavením šestého bitu portu A pomocí PORTA rozsvítíme LED diodu. while (1) { dlouhe_zpozdeni(500); cbi(PORTA,5); dlouhe_zpozdeni(5); V nekonečné smyčce se chvíli počká a poté zapne proudový zdroj. Pět milisekund se potom počká, aby se proudový zdroj stihl zapnout. Posli_retezec("Měřím napětí... ",1,0); Posli_retezec(" ",2,0); vysledek1=cti_adc_10bit(0); 22 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru vysledek1=(vysledek1)/1024*5; Na displej vypíšeme hlášku „Měřím napětí...“ a do vysledek1 uložíme výsledek A/D převodu. Následně ho převedeme na hodnotu napětí a uložíme do sebe samého. dlouhe_zpozdeni(2000); vysledek2=cti_adc_10bit(0); vysledek2=(vysledek2)/1024*5; Počkáme dvě vteřiny, dokud se sonda nezahřeje a nezmění se její odpor v závislosti na ponoření. Poté přečteme vysledek2, tedy opět výsledek A/D převodu. sbi(PORTA,5); A vypneme proudový zdroj. rozdil = vysledek2 - vysledek1; ponoreni = ((0.46446-rozdil) / 0.00733); Vypočítáme rozdíl napětí a ze vzorce, který jsme si odvodili (viz. výše), zjistíme ponoření sondy. procent = ponoreni / 56 * 100; Tímto vzorečkem vypočítáme stav hladiny v procentech. if (procent >= 10){ Inicializace_LCD(1); dlouhe_zpozdeni(2500); Posli_retezec("Stav oleje:",1,0); Posli_Float(procent,1,0, 2,11); Posli_retezec("%",2,15); dlouhe_zpozdeni(5000); }else{ Inicializace_LCD(1); dlouhe_zpozdeni(500); Posli_retezec("Stav oleje:",1,0); Posli_retezec("KRITICKý!",2,6); dlouhe_zpozdeni(1500); Posli_retezec("Neprodleně Posli_retezec("doplňte olej! ",1,0); ",2,0); dlouhe_zpozdeni(3500); }; } A nakonec vypíše vypočítané hodnoty na displej. Pokud je hodnota menší než 10%, zobrazí hlášku „Stav oleje KRITICKÝ“ a následně „Neprodleně doplňte olej!“. Jinak vypíše stav oleje v procentech. Po 5ti vteřinách opět opakuje měření. 23 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 6.5 Fyzické provedení zařízení Náš finální výrobek jsme se rozhodli umístit do plastové krabičky. Deska je přichycena zespodu na distančních sloupcích. Na levé straně se nachází konektor na připojení zdroje, na pravé straně dva konektory typu jack mono na připojení sondy. Konektory jsou připojeny na desku. Nejsou připájeny, pouze upevněny v zašroubovatelném spoji, takže je možné je odpojit a např. upravit desku nebo vyměnit součástku je snadné. LCD displej je uchycen k víku krabičky do vyřezaného průzoru. 7. Závěr Zařízení se nám povedlo úspěšně zkonstruovat, odladit a zprovoznit. Výsledky našich měření odpovídaly teoretickým předpokladům. Díky naší práci jsme se leccos přiučili v oblasti měření, práci s mikroprocesory, návrhu DPS i principům fungování elektrických obvodů 24 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 8. Přílohy 1 – Fotografie sondy (detail) 2 – Fotografie měření zkušebním analogovým obvodem (zkušební přípravek napravo) 25 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 3 – Prostředí programu AVR Studio 4 (s popisky) 26 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 4 – Schéma zkušební desky AVR 27 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 5 – DPS zkušební desky AVR 28 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 6 – Schéma finálního výrobku 29 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 7 – DPS finálního výrobku 30 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 8 – Fotografie finálního (nezakrytovaného) výrobku 31 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 9 – Detaily displeje 32 Středoškolská odborná činnost Měření hladiny oleje pomocí mikrokontroléru 9. Literatura Zdeněk Roubal: Měření hladiny oleje, FEKT VUT, 2005 Popis výrobku: Mogul M6AD, Mogul, 2010 Katalogový list: Atmel ATmega16a, Atmel, 2009 Burkhard Mann: C pro mikrokontroléry, BEN, 2004, ISBN 80-7300-077-6 Katalogový list: MCP3301, Microchip, 2007 David Matoušek: Práce s mikrokontroléry ATMEL AVR, BEN, 2006, ISBN 807300-174-8 [7] Vladimír Váňa: Mikrokontroléry ATMEL AVR, popis procesorů a instrukční soubor, BEN, 2003, ISBN 80-7300-083-0 [8] Tomáš Fukátko, Jaroslav Fukátko: Teplo a chlazení v elektronice, BEN, 2006, ISBN 80-7300-199-3 [9] Vít Záhlava: Návrh a konstrukce DPS, BEN, 2010, ISBN 973-80-7300-266-4 [10] Katalogový list: ICL7660, Maxim, 1994 [1] [2] [3] [4] [5] [6] 33
Podobné dokumenty
vysoké učení technické v brně laditelná smyčková
prvků lineárně a při dalším zvětšování by bylo zvýšení zisku zanedbatelné.
Jsou však i jiné antény založené na principu Yagiho antény, například anténa Cubical Quad,
která má čtvercové (Quagi) nebo...
msdos.
Přepnou z jedné diskové (nebo i virtuální) jednotky můžete příkazem: pismeno_disku: (např. A:)
cd
Pokud chcete přejít z jedné složky do druhé je zde příkaz cd (Change Directory). Příkaz cd je zde
n...
Diplomka - Datalogger se zápisem na Compact Flash kartu
cenné rady a připomínky a také svým rodičům za podporu během studia.
Přehled hardwaru použitelného v malé a střední
Po odejmutí druhé boční strany získáte přístup k jednotlivým komponentům v PC.
Z této strany vidíte pohled na místo, kde se ukládá základní deska. Uvnitř skříně se
nachází otvory, které slouží k uc...
Mikroprocesorová technika, prednáška c. 6
Vstupnı́ piny PINx (Port Input Pins),
Např. u ATmega16, který obsahuje 4 I/O porty, jsou to: