Přečtěte si celou práci zde

Transkript

Přečtěte si celou práci zde
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á

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...

Více

Dokumentace

Dokumentace 397 01 Písek, třída A4.S

Více

msdos.

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...

Více

Diplomka - Datalogger se zápisem na Compact Flash kartu

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.

Více

Přehled hardwaru použitelného v malé a střední

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...

Více

Mikroprocesorová technika, prednáška c. 6

Mikroprocesorová technika, prednáška c. 6 Vstupnı́ piny PINx (Port Input Pins), Např. u ATmega16, který obsahuje 4 I/O porty, jsou to:

Více