Teploměr s dvoumístným LED displejem a s přenosem dat do PC

Navržené zařízení bylo vyvinuto v rámci semestrální práce do předmětu Mikroprocesorová technika na VOŠ v Kutné Hoře.

Autoři: Martin Chloupek, Jarmil Duksa, David Kopecký

Zadání semestrální práce:
Postavte teploměr řízený jednočipovým mikropočítačem Atmel AT89C2051, který bude naměřená data předávat po rozhraní RS232 do osobního počítače PC. K realizaci použijte teplotní senzor SMARTEC. Změřenou teplotu, ve °C zobrazujte na 2-místném dynamicky řízeném LED displeji. Napište obslužný program pro PC, který bude zobrazovat změřenou teplotu s maximální možnou přesností, provádět archivaci a grafické zobrazení naměřených teplot. Navržené zařízení realizujte na desce plošných spojů. Jako displej použijte HDSP-5621.

Požadavky na navrhované zařízení
Navrhované zařízení bude zobrazovat na dvoumístném displeji teplotu ve stupních Celsia. Teplota ve stupních Celsia bude v rozsahu 00 - 99 . Vzhledem k principu činnosti teplotního senzoru musí zařízení převést digitální šířkově modulovaný signál na údaj v BCD kódu, který se zobrazí pomocí BCD dekodéru na dynamicky řízeném displeji. Vzhledem k napájecímu napětí teplotního senzoru, napájecímu napětí obvodu pro sériovou komunikaci a k tomu, že použijeme mikropočítač AT89C2051 bude potřeba jedno napájecí napětí +5V . Po změření teploty se provede vyslání naměřené teploty přes sériový port, v PC budou data následně archivována a popřípadě dále zpracovávána.

Popis teplotního senzoru SMT160-30
Teplotní senzor SMT 160-30 firmy SMARTEC představuje moderní křemíkové teplotní čidlo určené pro nejrůznější konstrukce. Hlavní předností senzoru SMT160-30 je šířkově modulovaný výstupní signál, což umožňuje přímé připojení senzoru k mikroprocesoru a jednoduché vyhodnocení teploty bez potřeby použití A/D převodníku. K jednomu mikroprocesoru lze multiplexováním připojit několik těchto čidel. Použitím velmi jednoduchého algoritmu vyhodnocování signálu je možno získat přímo absolutní hodnotu měřené teploty. Senzor nevyžaduje žádnou kalibraci, neboť je kalibrován přímo na čipu během výroby. Výběr mezi čtyřmi základními pouzdry běžných typů poskytuje široké možnosti při konstrukčním řešení umístění senzoru. Rovněž třídrátové připojení téměř libovolným vodičem na vzdálenost až dvaceti metrů neklade téměř žádné konstrukční omezení při aplikaci.

Obr. č.1 Zapojení vývodů teplotního čidla SMT160-30

Pouzdro TO-92
1 OUTPUT
2 +Ucc
3 GND


Výstupní signál
Velikost poměru T1/T2 (D.C.) výstupního signálu čidla je lineárně závislá na teplotě podle vztahu:

D.C. = 0,320 + 0,0047 * t

t = teplota ve °C
D.C. = duty cycle, poměr úrovně H (log.1) k délce periody výstupního signálu

Například pro 0 °C D.C. = 0,320 (32%), pro 130 °C D.C. = 0,931 (93,1%)

Výstupní signál čidla (Duty cycle = T1/T2) Vztah mezi teplotou a Duty cycle

Všeobecné technické parametry:

Parametr:

min.

typ.

max.

jednotky

Napájecí napětí

4,75

5

7

V

Vstupní proud

0,16

 

0,2

mA

Teplotní rozsah

-45

 

+130

° C

Dlouhodobý drift

   

0,1

° C

Citlivost na změnu napětí

   

0,1

° C/V

Výstupní frekvence

1

 

4

kHz

Impedance

   

200

Ohm

Šum

   

0,005

° C


Další parametry, související s použitým pouzdrem:
Parametr maximálně :

TO18

TO92

TO220

jednotky

Abs. přesnost v roz. -30 až +100° C

0,7

1,2

1,7

° C

Abs. přesnost v roz. -45 až +130° C

1,2

2,0

1,7

° C

Nelinearita

0,2

0,4

0,5

° C

Opakovatelnost

0,1

0,2

0,5

° C



Obvod MAX232
Slouží k úpravě napěťových úrovní signálu TTL/CMOS (89C2051) na úrovně RS-232C (PC) a naopak. Funguje tedy jako jakési rozhraní (přizpůsobovací obvod) mezi mikroprocesorem ATMEL a sériovou linkou RS232. Je samozřejmě možné použít i některý ekvivalent (ICL232,DS275), my jsme ale tedy použili IO MAX232 od výrobce fy MAXIM. Obecně tyto IO obsahují tzv. řidiče(vysílače) linky, který generují napěťové úrovně vyžadované rozhraním RS-232C a přijímače linky, který zpracovává napěťové úrovně z RS-232C. Řidič i přijímač linky navíc signál invertují, protože RS-232C pracuje se zápornou logikou. MAX232 je dvojitý RS-232C vysílač(řidič)/přijímač podporující všechny specifikace standardu RS-232. Vyžaduje pouze jedno napájecí napětí +5V a 4 externí kondenzátory. Má nízkou spotřebu, maximální přenosová rychlost je 120kb/s. Obvod navíc obsahuje napěťový zdvojovač a invertor(na principu tzv."nábojové pumpy"), který z jednoho napětí +5V vytváří +10V a -10V.
Obvod ke své funkci vyžaduje jedno napájecí napětí +5V.

Obr. č.2 Zapojení vývodů obvodu MAX232,vnitřní zapojení
Zapojení obvodu MAX232, vnitřní zapojení
Obvod 74LS247N
Jedná se o převodník BCD kódu na 7segmentový kód - budič LED displeje s otevřenými kolektorovými výstupy (15V). Na vstup obvodu 74LS247N přichází kód z portu mikroprocesoru, který je tímto obvodem zpracován a převeden na kombinaci svítících segmentů tak, aby se na displeji zobrazila požadovaná číslice. Výstupy převodníku jsou aktivní v log.0.

Obr. č.3 Zobrazení znaků na 7-segmentovém displeji podle pravdivostní tabulky
Zobrazitelné znaky

Označení segmentů
Označení segmentů
Zapojení vývodů obvodu 74LS247
Zapojení vývodů obvodu 74LS247
Pravdivostní tabulka
Pravdivostní tabulka
H = úroveň HIGH (log.1),  L = úroveň LOW (log.0),  X = libovolný stav
POZNÁMKA (NOTE):
1. Aby se na displeji zobrazily číslice a znaky funkcí 0 - 15, musí být na vývodu "blanking input" (BI) signál HIGH. Není-li žádoucí zobrazení dekadické 0, musí se na vývod "riple blanking input" (RBI) přivést signál LOW. Při signálu HIGH se nula bude zobrazovat.
2. Je-li na vstupu BI signál LOW, přepnou se všechny výstupy a....f na HIGH nezávisle na signálech na všech ostatních vstupech. Displej zůstane tmavý.
3. Při signálu LOW na vstupu RBI a vstupech A....D a také signálu HIGH na vstupu LT ("lamp test"), přepnou se výstupy a....f na HIGH a na výstupu RBO bude k dispozici signál LOW (nulová podmínka).
4. Přivede-li se na vstup LT signál LOW a vývod BI/RBO je na úrovni HIGH, přepnou se všechny výstupy a....f do stavu LOW nezávisle na signálech na ostatních vstupech. Rozsvítí se všechny segmenty.
Vývod č.4 (BI/RBO) je interně vzájemně provázán logikou AND, takže podle vnějších podmínek je zapojen buď jako vstup BI, nebo jako vstup RBO.

Displej HDSP 5621
Jde o 2-místný sedmisegmentový LED zobrazovač, barva znaků zelená, výška znaků 14 mm, společná anoda, úhel viditelnosti ± 50°, vynikající kontrast, dobrá viditelnost až do vzdálenosti 7m.
Pracovní teplota displeje je v od -40°C do +100°C.
Displej HDSP 5621 Podrobné informace o HDSP 5621 najdete zde.  Formát PDF
Informace o dalších typech sedmisegmentových displejů najdete zde.

Návrh zařízení
Hlavní částí zařízení je mikroprocesor, který dynamicky řídí funkci displeje a zpracovává signál z teplotního senzoru. Jednotlivé segmenty displeje jsou k mikropočítači připojeny přes dekodér BCD kódu. Jednotlivé anody jsou spínány prostřednictvím PNP tranzistorů. Zelená LED dioda umístěná u displeje představuje znaménko minus pro zobrazení záporné teploty. Spínačem S se provádí reset mikroprocesoru a tím celého zařízení. V PC je vytvořen program v jazyku PASCAL, který umožňuje sledování naměřené teploty na obrazovce PC a ukládání naměřených hodnot teploty do externích souborů "teplota.txt" a "prumtepl.txt".

Obr. č.4 Blokové schéma teploměru
Blokové schéma teploměru

Statické a dynamické řízení displeje:
Způsob statického řízení LED displeje je vhodný jen pro malé displeje (1-místné, max. 2-místné). Například již při 2-místném displeji ale potřebujeme dva dekodéry a 14 rezistorů. Při velkém počtu míst je proto vhodné přejít na dynamické řízení.Při dynamickém řízení je použit jediný dekodér, který se periodicky přepíná k jednotlivým místům (pozicím) displeje. Proud displejem ovšem musí být pro zajištění dostatečného jasu mnohem vyšší a obvykle je nutné na výstup z dekodéru zařadit spínací tranzistory.
Náš displej je tedy řízen dynamicky (viz dále).

Dekodér BCD
Dekodér 74LS247 je k mikropočítači připojen přes piny P1.0 až P1.3 na piny BCD dekodéru A0, A1, A2, A3.
P1.0
A0
P1.1
A1
P1.2
A2
P1.3
A3

Na piny YA, YB, YC, YD, YE, YF, YG jsou připojeny jednotlivé segmenty displeje přes ochranné odpory 180W.
Piny YA až YG jsou připojeny přes odpory 10kW na +Ucc (zapojení s otevřeným kolektorem).
Dále je BCD dekodér připojen na +Ucc, GND, piny /LT, /RBO, /RBI jsou připojeny na +Ucc.


Displej
Jedná se o displej se společnou ANODOU, odpovídající si segmenty KATOD obou míst displeje jsou navzájem propojené, to znamená, že stav log. 0 či log. 1 je současně vysílán na obě 7-segmentové části (místa) displeje. Rozsvítí se však pouze to místo 7segmentového displeje, které je přivedeno do stavu log.1 (přivedení +Ucc na ANODU) přes spínací tranzistor.

Návrh součástek:
Spínací prvky a pasivní součástky :
Spínací tranzistory T1 a T2 ovládají anody jednotlivých pozic (míst) displeje.
Kolektorový proud uvažujeme jako součet proudů tekoucích jednotlivými segmenty. U dvoumístného dynamického displeje uvažujeme dvojnásobek statického budícího proudu. Uvažujeme proud pro 1 segment 10mA.

Ic = 2x7x10 = 140mA

Dle katalogu zvolíme tranzistor PNP BC327-40.
parametry BC 327-40 Icmax = 0,8A
Uce = 45V
zesilovací činitel ß = 240-630
dále výpočet proudu báze Ib: Ib = Ic/ß
Ib = 140 mA / 240 = 0,61 mA
výpočet bázových rezistorů Rb: Rb = (Ucc - Ube ) / Ib
Rb = (5 - 0,75)/ 0,00061
Rb = 6967W
Zaokrouhlíme a zvolíme hodnotu rezistoru 6k8
Z důvodu, že obvod dekodéru BCD má výstup na jednotlivé segmenty realizované tranzistorem s otevřeným kolektorem, musí se ještě jeho výstup připojit přes rezistory na +Ucc , které zajistí správnou (požadovanou) hodnotu na výstupu (log.0 či 1).
Rezistory jsou zvoleny na hodnotu 10kW a připojeny mezi +Ucc a výstup obvodu dekodéru BCD.
U spínacích tranzistorů jsme použili rezistory 10kW (zapojené mezi bází spínacího tranzistoru a +Ucc).

Volba ochranných rezistorů před segmenty displeje
Při dynamickém řízení displeje musí přes jednotlivé segmenty protékat větší proud než statického řízení, z toho důvodu je nutné zapojit předřadný rezistor.

Rs = (Ucc - Uce - Ud) / Id
Rs = (5 - 0,5 - 1,5) / 0,02
Rs = 150W
dle katalogu zvolíme hodnotu 180W

Volba ochranného rezistoru před LED diodou
Proud tekoucí diodou uvažujeme 10mA (dioda svítí a životnost je téměř neomezena, při 20mA by dioda svítila mnohem jasněji, ale životnost je menší).

Rd = Ucc - Ud / Id
Rd = 5 - 1,5 / 0,01
Rd = 350W
dle katalogu zvolíme hodnotu 330W

Čidlo SMT160-30
Čidlo jsme umístili společně s RC článkem (tento RC článek připojený mezi +Ucc a zem chrání čidlo před zničením při náhodném přepólování) na univerzální pájecí destičku. Čidlo je připojeno 3 vodiči. Dva vodiče (vývod 2,3) tvoří +Ucc a GND(zem). Třetí vodič (vývod 1) OUTPUT je připojen k pinu 6 (P3.2) mikroprocesoru.

Sériová komunikace mezi AT89C2051 a PC (RS-232C)
Pro komunikaci po sériové lince je zapotřebí nejméně 3 vodičů - GND, RD(RxD), TD(TxD), které jsou náležitě připojeny k obvodu MAX 232 na straně mikroprocesoru a k sériovému portu počítače PC na straně druhé. Na straně PC je však nutno dále propojit v konektoru svorku 1,4,6 a dále svorky 7,8 mezi sebou (viz.obr.níže). Je to z důvodu "ošizení" jinak nutného řízení toku dat(handshaking). Tato problematika je blíže vysvětlena v Návrhu čtečky identifikačních prvků Touch Memory s přenosem dat do PC.
Obvod je připojen odpovídajícími piny na +Ucc,GND. (Připojené kondenzátory viz. výše obr.) Pin 11 a 12 (T1in, R1out) je propojen s piny 10,11 na procesoru (RxD,TxD). Piny 12,13 (R1in, T1out) jsou propojeny s portem PC - s piny 2,3,5 (RxD, TxD, GND). K propojení jsou použity konektory CAN 9Z.

Popis programu pro AT89C2051
Program pro svou činnost využívá 2 časovačů. První pracuje v módu 1, druhý časovač v módu 2.

první časovač - spouštěn externím signálem (doba setrvání čidla teploměru v log.1) a perioda, časovač střídavě měří dobu signálu v log.1 a periodu signálu

druhý časovač - generuje rychlost pro sériovou linku (19200 b/s - výpočet dle vzorce uvedeného níže)

Údaj na displeji je občerstvován po každé 0,7 s. Se stejným intervalem je vysílán údaj o teplotě sériovým rozhraním do PC.

Počítání délky trvání log.1
Časovač 0 je nastaven do režimu, kdy čítá pouze na dobu, kdy je na jeho vstupu hodnota log.1.

Kalibrační konstanty
Počet desetin stupňů pro celý rozsah:
n = 10* (1/ 0,0047 )
n = 2127
Posun 0 stupňů v desetinách :
p = 10* (0,320/0,0047)
p = 681
Výpočet přenosové rychlosti v módu 1
v = (2SMOD*fosc) / [12*(256-TH1)]*32
v = (21*11059200) / [12*(256-253)]*32
v = 19200 b/s

Běh programu:
Po spuštění programu se nejprve provede nastavení všech proměnných v paměti RAM a nastavení módů čítačů a spuštění přerušení. Přerušení od vnějšího vstupu INT0 je spuštěno každou sestupnou hranou signálu z čidla. Součástí programu obsluhy přerušení jsou veškerá měření. Podrobný popis principu měření D.C. pomocí čítače/časovače najdete zde. V první fázi program měří dobu ve které je signál z čidla v log.1 (měření šířky impulzu). Protože kmitočet čidla je dosti vysoký, je nutno měřit dostatečné množství period signálu pro potřebnou přesnost měření. Výsledná hodnota je uložena ve třech bajtech s označením zmerenol, zmerenom, zmerenoh. Potom se měří perioda signálu. Čítač T0 je přemódován a běží trvale po dobu několika period čidla. Tyto dvě funkce se neustále střídají. Při každém přerušení je též ošetřeno zobrazení na displeji - rozsvítí se opačná dekáda (druhá pozice displeje, než která svítila dosud). Po ukončení jednoho měřícího cyklu je bitem namereno signalizováno hlavnímu programu, že jsou k dispozici nové naměřené hodnoty. Při vhodném volbě počtu měření, je změřená hodnota periody přímo hodnotou pro 0,1 C. Nyní již stačí provést podělení a výsledkem je absolutní hodnota teploty čidla. Pro dělení použijeme metodu postupného odečítání, protože je jednoduchá a na výpočet je k dispozici dostatečně dlouhá doba. Od výsledku odečteme posun nuly, čímž získáme přímo teplotu ve stupních. Výsledek pro záporné teploty je nutno ještě převést na kladné číslo. Následuje zobrazení znaménka. Binární hodnotu teploty již známe, stačí ji převést na dekadickou metodou dělení hodnotou jednotlivých dekád. S výhodou k tomu použijeme stejného podprogramu jako u výpočtu teploty. Výsledkem jsou již hodnoty pro jednotlivé dekády: stovky, desitky, jednotky a desetiny. Nakonec je proveden test na hodnoty větší jak 100 stupňů. V tomto případě se na displeji objeví : tt , vysláním kódu 0Eh na dekodér.
Další část v běhu programu je vysílání naměřených hodnot po sériové lince do PC.
Parametry čítače 1 serivé linky jsou nastaveny již po resetu programu. Nastavena je hodnota 19200 b/s , 8 datových bitů bez parity. Jako první se vysílá znaménko. Potom jednotlivá čísla. Požadovaná hodnota dekády je nejprve upravena na hodnotu ASCII a vyslána pomocí registru SBUF. Pátým synchronizačním znakem je kód 13 ( CR ).
Po odvysílání všech hodnot program pokračuje zpět na test bitu namereno a čeká na další změřenou hodnotu. Celá smyčka se takto opakuje stále dokola.
V případě, že není po resetu čidlo připojeno ( nebo je vadné ) zobrazí se na displeji znak c.

Popis programu pro PC (Turbo Pascal 7.0):
V jazyce Pascal je vyřešena ta část programu, která umožní zobrazit a dále zpracovávat data odvysílaná mikropočítačem.
Pro příjem dat je standardně nastaven sér.port COM1 a přenosová rychlost 19200 b/s. Program jsme dále zkompilovali do spustitelného exe souboru proto, aby budoucí uživatel nepotřeboval ke spuštění programovací prostředí - Turbo Pascal.
Program je vyřešen tak, že po každém odvysílání mikropočítačem se na obrazovce počítače zobrazí hodnota odpovídající aktuální teplotě. Navíc se po každých pěti měřeních provede vypočítání a následné zobrazení průměrné teploty. Údaje o naměřených teplotách se ukládají do externího souboru TEPLOTA.TXT a data o průměrných teplotách do souboru PRTEPLOTA.TXT.
Program, přestože jde o DOSovou aplikaci, bez problémů funguje i pod Windows 95/98.

Zhodnocení programu:
Program by se dal samozřejmě řešit i jinými způsoby, např. postupovat přesně dle vzorce na výpočet teploty a použít tak matematickou knihovnu v pohyblivé čárce. Tato knihovna by však zabrala většinu paměti celého mikroprocesoru.
Námi vyřešený program pracuje spolehlivě s přesností 0,1°C. Tato přesnost je již na hranici rozlišení čidla a celková přesnost je již dána pouze samotným čidlem.

Další použitá literatura:

Mikropočítače a počítače II, autor Josef Hrázský, nakladatelství INFORMATORIUM
(popis jednotlivých registrů, instrukcí, sériového kanálu, obvodu oscilátoru, obvodu RESET, atd)

PASCAL - Popis jazyka a příručka programátora, vydala Tesla Eltos

BIOS - nakladatelství GRADA
(Přístup k portům a obsluha portů)

Celkové schéma zapojení teploměru
Zvlášť je nakresleno schéma teploměru a schéma čidla s ochr.obvodem, je to pouze z toho důvodu, že jsme realizovali odděleně desku ploš.spojů teploměru a menší destičku s čidlem, mezi sebou byli propojené krátkým kablíkem.

Schéma zapojení destičky s čidlem
Schema zapojení destičky s čidlem

Schéma zapojení teploměru
kliknutím na obrázek získáte schéma zapojení v plné velikosti
Náhled

Soupiska použitých součástek pro desku plošných spojů:
(značení součástek dle katalogu GM Electronic)

Destička čidla

Položka

Množství

Referenční označení

Typ

1

1

C1

2u2/63V

2

1

J1

ARK210/3

3

1

R1

1kW

4

1

U1

SMT160-30



Destička teploměru

Položka

Množství

Referenční označení

Typ

1

5

C1,C2,C3,C4,C5

1uF/50V

2

2

C6,C7

33pF

3

1

C8

100nF

4

1

C9

1000uF/16V

5

1

C10

10uF/25V

6

1

DISPLEJ1

HDSP-5621

7

1

D1

LED červená obdélník 2x5mm

8

1

D2

LED zelená obdélník 2x5mm

9

1

IO2

SN 74247

10

1

IO3

MAX232

11

1

IO4

AT89C2051

12

1

P1

CAN 9V 90

13

1

RN1

dekáda RRA 7x10kW

14

7

R1,R2,R3,R4,R5,R6,R7

180W

15

2

R8,R9

6k8

16

2

R10,R11

10kW

17

1

R12

8k2

18

2

R18,R14

330W

19

1

SV1

ARK210/3

20

1

SV2

ARK210/2

21

1

TL1

tlačítko P-B1720

22

2

T1,T2

BC327

23

1

Y1

krystal 11,059MHz


Program ASM  Výpis programu pro mikrokontroler AT89C2051
Balík hlavního a podpůrných programů pro PC (Turbo Pascal 7.0, velikost 18kB, zip archiv)


Zpět na hlavní stránku