Upload
trandung
View
224
Download
1
Embed Size (px)
Citation preview
POLITECHNIKA WARSZAWSKA Rok akademicki 2007/2008
WYDZIAŁ ELEKTRONIKI I TECHNIK INFORMACYJNYCH
INSTYTUT INFORMATYKI
WIECZOROWE STUDIA ZAWODOWE – INFORMATYKA
PRACA DYPLOMOWA INŻYNIERSKA
Łukasz Trojanowski
Stabilizator temperatury płaszcza wodnego
oparty na modułach Peltiera
Opiekun pracy
dr inż. Janusz Rzeszut
Ocena .……………………………..
……………………………………….
Podpis przewodniczącego
Komisji Egzaminu Dyplomowego
2
Kierunek: Informatyka
Data urodzenia: 10. września 1981.
Data rozpoczęcia studiów: 1. października 2004.
Życiorys.
Urodziłem się dnia 10. września 1981 roku Warszawie. W latach 1988 – 1996
uczęszczałem do Szkoły Podstawowej nr 36 w Warszawie, a następnie w latach 1996 – 2000
do XXVIII Liceum Ogólnokształcącego im. Jana Kochanowskiego w Warszawie do klasy o
profilu biologiczno-chemicznym. W 2000 roku ukończyłem liceum i zdałem egzamin
maturalny.
W 2000 roku rozpocząłem studia magisterskie w Szkole Głównej Gospodarstwa
Wiejskiego w Warszawie na kierunku ochrona środowiska. Od 2003 roku w ramach studiów
specjalizowałem się w technologiach w ochronie środowiska. 14. lipca 2005 roku złożyłem
egzamin magisterski, uzyskując tytuł zawodowy magistra inżyniera. Temat pracy
magisterskiej: Ocena Metod redukcji emisji dioksyn z procesu spalania odpadów
komunalnych (na wybranych przykładach). Praca powstała pod kierunkiem prof. dr. hab. inż.
Andrzeja Świątkowskiego z Wojskowej Akademii Technicznej. W czasie trwania studiów
odbyłem praktyki w Wolińskim Parku Narodowym w Międzyzdrojach i w Instytucie
Badawczym Leśnictwa w Sękocinie.
W 2004 roku rozpocząłem studia na wydziale Elektroniki i Technik Informacyjnych
Politechniki Warszawskiej, w ramach których powstała niniejsza praca.
Od roku 2005 wykonywałem drobne prace zlecone, związane z serwisem i obsługą
sieci komputerowych. W 2006 roku odbyłem trzymiesięczny staż w Urzędzie Miasta
Stołecznego Warszawy. W kwietniu 2006 rozpocząłem studia doktoranckie w Instytucie
Melioracji i Użytków Zielonych w Falentach, które obecnie kontynuuję.
………………………………
Podpis studenta
EGZAMIN DYPLOMOWY
Złożył egzamin dyplomowy w dn. ……………..2008 r.
z wynikiem………………………………………………………………………………
Ogólny wynik studiów…………………………………………………………………..
Dodatkowe wnioski i uwagi komisji…………………………………………................
……………………………………………………………………………......................
3
STRESZCZENIE
Praca opisuje projekt i konstrukcję stabilizatora temperatury płaszcza wodnego.
Urządzenie jest zdolne mierzyć temperaturę i sterować pracą modułu Peltiera, tak, aby
utrzymanie zadanej temperatury było możliwe. Podstawowym zastosowaniem urządznia jest
stabilizacja temperatury odczynnika fotograficznego.
Wbudowane zostały mechanizmy kalibracji, które pozwalają zwiększyć dokładność
zastosowanego cyfrowego czujnika temperatury typu LM74. Dokładność stabilizacji
temperatury jest rzędu 0,1°C.
Urządzenie do sterowania wykorzystuje mikrokontroler 8 bitowy ATmega32 firmy
Atmel. Posiada ponadto interfejs użytkownika w postaci wyświetlacza LCD, oraz 4-
przyciskową klawiaturę. Mechanizmy kalibracji wykorzystują łącze RS232C.
Sterowanie modułem realizowane jest za pomocą dwóch przekaźników, sterowanych z
mikrokontrolera poprzez wzmacniacze prądowe z izolacją optyczną.
Słowa kluczowe: moduł Peltiera, cyfrowy pomiar temperatury, stabilizacja temperatury,
ATmega
ABSTRACT
Stabilizer of water jacket`s temperature based on Peltier module
The study describes the project and construction of the stabilizer of water jacket`s
temperature. The device is able to measure temperature and drive Peltier module to keep
given temperature. The basic application of the device is to keep stable temperature of
photographic chemicals.
The device has integrated mechanisms to calibrate, which improve accuracy of digital
thermal sensor LM74 used in the device. Accuracy in stabilizing temperature is in order of
magnitude of 0.1°C
The device uses ATmega32 microcontroller from Atmel for driving. It also has user
interface that consists of LCD and four-button keypad. Mechanisms of calibration use the
RS232C interface.
Driving Peltier module is implemented on two relays , driven from microcontroller by
current amplifiers with optical isolation.
Keywords: Peltier module, digital temperature sensing, temperature stabilization, ATmega
4
Spis treści
1. Cel i zakres pracy ............................................................................................................. 5
2. Przegląd stanu wiedzy z zakresu elektronicznego pomiaru i stabilizacji temperatury. ... 8
2.1. Elektryczne metody pomiaru temperatury. ............................................................... 8
2.1.1. Termistory. ......................................................................................................... 8
2.1.2. Układy scalone z wyjściem analogowym. ......................................................... 9
2.1.3. Układy cyfrowe. ............................................................................................... 11
2.2. Budowa i działanie modułów Peltiera ..................................................................... 12
3. Konstrukcja urządzenia .................................................................................................. 19
3.1. Schemat blokowy .................................................................................................... 19
3.2. Jednostka sterująca. ................................................................................................. 19
3.3. Pomiar temperatury. ................................................................................................ 22
3.4. Interfejs użytkownika. ............................................................................................. 26
3.5. Komunikacja z PC ................................................................................................... 28
3.6. Sterowanie modułem Peltiera .................................................................................. 28
3.7. System rozprowadzania ciepła. ............................................................................... 30
3.8. Schemat ideowy i montażowy urządzenia. ............................................................. 31
4. Działanie urządzenia ...................................................................................................... 37
4.1. Globalne struktury danych. ..................................................................................... 37
4.2. Tryby pracy urządzenia. .......................................................................................... 38
5. Uruchomienie prototypu urządzenia .............................................................................. 45
6. Podsumowanie ............................................................................................................... 48
Spis ilustracji ...................................................................................................................... 50
Bibliografia ......................................................................................................................... 51
Załączniki ........................................................................................................................... 52
5
1. Cel i zakres pracy
Celem pracy jest zaprojektowanie i skonstruowanie stabilizatora temperatury płaszcza
wodnego. Podstawowym przeznaczeniem urządzenia jest stabilizacja temperatury
odczynników fotograficznych w zakresie temperatur wynoszącym od +10 do +50°C z
dokładnością rzędu 0,1°C, jakkolwiek możliwe jest dowolne zastosowanie, które wymaga
płaszcza wodnego o zadanej temperaturze z zakresu działania urządzenia. Stabilizator
powinien być w stanie doprowadzić do zadanej temperatury i utrzymać w niej kilka litrów
płynu o pojemności cieplnej zbliżonej do wody w warunkach temperatury pokojowej.
Podstawową funkcją urządzenia jest automatyczna stabilizacja wybranej przez
użytkownika temperatury. Udział użytkownika ogranicza się do wyboru zadanej temperatury i
przygotowaniu płaszcza wodnego. Stabilizowana temperatura jest wybierana za pomocą
przycisków z rozdzielczością nie mniejszą niż 0,1°C.
Projekt urządzenia zakłada zastosowanie, jako elementu sterującego, mikrokontrolera
8-bitowego. Jako element stabilizujący temperaturę, zastosowany zostanie moduł Peltiera.
Użycie tego elementu umożliwia łatwe odwrócenie kierunku przepływu ciepła, a co za tym
idzie wykorzystania urządzenia jako podgrzewacza i chłodnicy. Pomiar temperatury należy
zrealizować czujnikiem termoelektrycznym dowolnego typu. Wymagana jest dokładność
rzędu 0,1°C. Dopuszczalna jest okresowa kalibracja urządzenia, przy użyciu referencyjnego
wskaźnika temperatury.
Urządzenie musi zostać wyposażone w interfejs użytkownika, umożliwiający
wygodne sterowanie wszystkimi funkcjami. Interfejs powinien się składać z panelu
sterowania (zestaw przycisków i przełączników) oraz wyświetlacza alfanumerycznego.
Oprócz prezentacji zadanej temperatury, urządzenie musi pokazywać temperaturę aktualną
oraz niezbędne informacje dla użytkownika dla prawidłowej obsługi i interpretacji stanu
urządzenia. Do okresowej kalibracji dopuszcza się zastosowanie urządzeń zewnętrznych,
takich jak termometr referencyjny i komputer PC z odpowiednim oprogramowaniem.
Zasilanie urządzenia odbywa się z sieci elektrycznej 230V prądu przemiennego.
Zakres pracy obejmuje wykonanie projektu i konstrukcję prototypu urządzenia.
Projekt obejmuje dobór podzespołów, wykonanie schematu i projekt obwodu drukowanego
oraz rozwiązanie zasilania urządzenia. Do projektu zalicza się również program
mikrokontrolera sterującego oraz całość oprogramowania dodatkowego, służącego m. in. do
6
kalibracji urządzenia. Częścią projektu jest również opis eksploatacji urządzenia i procedury
kalibracyjne i testowe.
W realizacji urządzenia wyróżnić można szereg zagadnień wymagających zastosowania
konkretnych rozwiązań projektowych i praktycznych.
Do działania urządzenia niezbędny jest precyzyjny pomiar temperatury metodami
elektrycznymi. Jest to w sposób oczywisty implikowane przez założenia projektowe. Pomiar
temperatury musi się odbywać z dokładnością do 0,1°C, co jest zwykle wartością
przewyższającą dokładności osiągane przez popularne, niedrogie czujniki ogólnego
zastosowania.
Aby osiągnąć taką dokładność należy zastosować sprzęt laboratoryjny lub
odpowiednio skorygować charakterystykę popularnych czujników. Pierwsze rozwiązanie
charakteryzuje się wysokim kosztem, gdyż czujniki o dokładności 0,1°C lub lepszej są drogie,
a ponadto często ich zastosowanie wymusza użycie wielu dodatkowych elementów i
spełnienie wysokich wymagań odnośnie zasilania i filtrowania zakłóceń. Drugie rozwiązanie
polegające na użyciu niedrogiego czujnika i dokonaniu jest kalibracji jest czaso- i
pracochłonne. Wymaga ono stworzenia mechanizmów kalibracji, a także przeprowadzania
okresowego sprawdzenia działania i kalibracji urządzenia. Zadaniem pracy jest przegląd
dostępnych metod elektronicznego pomiaru temperatury oraz dobór odpowiedniego
rozwiązania i zaprojektowanie wszystkich mechanizmów niezbędnych do jego prawidłowego
funkcjonowania.
Kolejnym zagadnieniem, które należy rozwiązać, jest sterowanie modułem Peltiera za
pomocą mikrokontrolera. Moduł Peltiera pracuje z mocą rzędu 100W, przy napięciu zasilania
kilkunastu woltów. Podczas stabilizacji ważna jest możliwość łatwego przełączania
kierunków pracy modułu, natomiast drugorzędne znaczenie ma możliwość regulacji mocy.
Należy zatem zaprojektować sterowanie modułem umożliwiające włączanie i wyłączanie go
w dowolnym kierunku pracy i zabezpieczenie układu przed uszkodzeniem, gdyby na skutek
awarii lub błędu wysterowane zostało jednocześnie grzanie i chłodzenie.
Moduł Peltiera jest urządzeniem o powierzchni około kilkudziesięciu centymetrów
kwadratowych. Istnieje zatem potrzeba projektu systemu, którego zadaniem będzie
rozprowadzenie ciepła między czujnikiem a płynem w płaszczu wodnym. Należy także
zapewnić skuteczną wymianę ciepła miedzy drugą stroną modułu a otoczeniem, która w
czasie pracy, w zależności od kierunku, będzie ulegała nagrzaniu lub ochłodzeniu. Od
7
skuteczności wymiany ciepła z otoczeniem w dużym stopniu zależy sprawność
funkcjonowania modułu Peltiera i całego urządzenia.
Projekt obejmuje także zasilanie układu. Musi ono spełniać dwa podstawowe kryteria.
Pierwszym jest dostarczanie odpowiedniej ilości mocy, drugim zapewnienie odpowiednio
odfiltrowanego zasilania dla elektroniki sterującej. Jest to szczególnie ważne ze względu na
to, że przełączanie stosunkowo dużych prądów często generuje zakłócenia na linii zasilania,
które są w stanie spowodować nieprawidłową prace mikrokontrolerów.
Realizacja pracy zakłada także konstrukcję prototypu, składającego się ze sterownika,
modułu Peltiera oraz systemu transportu ciepła, a także wykonanie testów i sformułowanie
wniosków i zaleceń do konstrukcji urządzenia docelowego.
8
2. Przegląd stanu wiedzy z zakresu elektronicznego pomiaru i stabilizacji
temperatury.
Koniecznymi elementami projektowanego urządzenia są elementy mierzące i
stabilizujące temperaturę. Poniżej dokonano przeglądu dostępnych czujników, a także
przedstawiono charakterystykę modułów Peltiera, z uwzględnieniem ich budowy, działania i
możliwości wykorzystania w praktyce.
2.1. Elektryczne metody pomiaru temperatury.
Pomiar temperatury za pomocą urządzeń elektronicznych jako warunek konieczny
przyjmuje zamianę temperatury, która jest wartością nieelektryczna na jakąkolwiek wielkość
związaną z prądem elektrycznym. Od jakości tej zamiany zależy jakość i dokładność
pomiaru, gdyż w chwili obecnej wartości elektryczne, takie jak napięcie, opór lub prąd mogą
być mierzone bardzo dokładnie. Elektryczne pomiary temperatury są niezbędne wszędzie
tam, gdzie wynik jest wykorzystywany u przez systemy elektroniczne używane do
sterowania, monitoringu, alarmowania i wszelkich innych zastosowań. Coraz częstsze użycie
systemów cyfrowych wymaga zamiany wartości temperatury na wartość cyfrową, co może
być dokonane na wiele sposobów poprzez zewnętrzny, dodatkowy układ, lub obwód scalony
w jednym układzie.
Poniżej dokonano przeglądu czujników temperatury dostępnych w dniu dzisiejszym w
handlu, z uwzględnieniem ich dokładności i sposobu odczytu wartości pomiaru. Czujniki
zostały podzielone na grupy w zależności od sposobu prezentacji wyniku.
2.1.1. Termistory.
Termistor jest opornikiem półprzewodnikowym, którego podstawową cechą jest silna
zależność oporu od temperatury. Termistory wykonane są z różnych materiałów i
charakteryzują się różną zmianą oporu w zależności od temperatury. Podstawowym
parametrem charakteryzującym taki element jest współczynnik temperaturowy, czyli parametr
mówiący, jak zmienia się opór wraz z temperaturą. Można na podstawie tego współczynnika
wyróżnić termistory NTC i PTC, czyli o ujemnym i dodatnim współczynniku
temperaturowym. W pierwszej grupie wzrost temperatury powoduje spadek rezystancji, a w
9
drugim jej wzrost. Zależność ta jest zwykle nieliniowa. Producenci w kartach katalogowych
podają tabelę lub wzór określający zachowanie czujnika. W przypadku tabeli jest to zestaw
punktów opór-temperatura dla zakresu, który termistor jest w stanie mierzyć. Wzór jest
zwykle funkcja wykładniczą oporu od temperatury, w której stałe zależą od typu termistora.
Osobnym typem termistora są termistory CTR o skokowej zmianie rezystancji.
Charakteryzują się gwałtowną zmianą oporu przy przejściu przez pewną krytyczną wartość
temperatury. Wykorzystywane są głównie jako bezpieczniki termiczne, a ich zastosowanie do
pomiarów jest rzadkie.
Ze względu na nieliniowość charakterystyki termistora stosowane są układy
linearyzujące, co znacznie komplikuje konstrukcję. W zależności od klasy, termistor jest w
stanie wyznaczyć różnice temperatury rzędu tysięcznych stopnia, a mierzyć temperaturę z
dokładnością do setnych części stopnia. Ze względu jednak na potrzebę linearyzacji,
termistor, jako element dyskretny, nie jest często stosowanym rozwiązaniem. Jest on jednak
bardzo atrakcyjnym rozwiązaniem dla projektantów układów scalonych, a także stanowi
podstawowy element elektryczny wrażliwy na temperaturę obok termopar, złącz
półprzewodnikowych i czujników pirometrycznych. [4]
Przykładem temistorów jest rodzina ACCX-0xx produkowana przez firmę RTI
Electronics Inc. Producent ten wytwarza linię termistorów precyzyjnych o oporze
nominalnym od 2252 do 10kΩ. Opór nominalny to opór jaki element posiada przy
temperaturze 25°C. Dokumentacja podaje dwa rodzaje tabel definiujących charakterystykę
elementów. Pierwszy rodzaj podaje wartość rezystancji dla wybranych wartości temperatury.
Temperatury definiowane są co 10, a zakres obejmuje -40°C do +150°C.
Drugi rodzaj tabeli obejmuje wartość współczynnika RT/R25. Jest to współczynnik
wyrażający stosunek oporu w danej temperaturze do oporu przy temperaturze 25°C. Tabela ta
jest wspólna dla całej grupy produktów. Obejmuje zakres 0°C -70°C i podaje wartości co
1°C. [8]
2.1.2. Układy scalone z wyjściem analogowym.
Kolejną grupą układów są układy scalone z wyjściem analogowym. Układy takie,
oprócz elementu wrażliwego na temperaturę zawierają zestaw elementów linearyzujących
wyjście. Parametr wyjściowy takiego układu jest proporcjonalny do temperatury. Poniżej
został przedstawiony przegląd tego typu układów podzielonych pod względem parametru
wyjściowego.
Układy z wyjściem napięciowym
10
Najliczniejszą grupą czujników z wyjściem analogowym są czujniki z wyjściem
napięciowym, proporcjonalnym do temperatury. Wyjście takich układów, niekiedy poprzez
dodatkowe układy dopasowujące poziom napięcia, podłączane są do wejścia przetwornika
analogowo-cyfrowego. Poniżej opisano kilka wybranych czujników tego typu:
Seria LM35. Producentem układów jest National Semiconductor. Poszczególni
przedstawiciele rodziny różnią się dokładnością pomiaru. Układ posiada tylko trzy
wyprowadzenia; zasilanie i wyjście napięciowe. Napięcie rośnie na nim o 10mV na każdy
stopień Celsjusza, dla temperatury 0°C napięcie wynosi 0V. Dokładność czujnika typowo dla
temperatury 25°C wynosi od ±0,2°C do ±0,6°C. Układ zasilany jest napięciem 4-30V, a
zakres pomiarowy wynosi od -65°C do 150°C (w niektórych obudowach do 180°C). Jest
sprzedawany w obudowach do montażu przewlekanego i powierzchniowego. [14]
Seria TMP01. Producentem układów jest Analog Devices. Poszczególne układy różnią
się obudową i dokładnością. Układ posiada wyjście napięciowe 5mV/K. Dla temp. 25°C
napięcie wynosi 1,49V. Dokładność typowo przy 25°C wynosi ±0,5 lub ±1°C. Możliwy jest
pomiar z zakresu -55 do +125°C. Układ posiada dodatkowo możliwość działania jako
termostat. Posiada wyjścia sterujące z otwartym kolektorem, a wartości temperatur
przełączania wyjść programuje się dobierając oporniki. Zasilanie układu 5V. [23]
Układ LM45. Konstrukcja, podobnie jak LM35 National Semiconductor. Układ
posiada wyjście napięciowe pracujące identycznie jak w LM35. Jednak dokładność czujnika
w zależności od wersji wynosi od ±2 do ±3°C. Zasilanie układu 4-10V, a zakres pomiaru -
20°C do 100°C. Czujnik występuje wyłącznie w obudowie SOT-23 do montażu SMD. [15]
Układy pracujące jak dioda Zenera.
Przykładem takiego układu jest LM335, produkcji ST Microelectronics. Układ taki
zachowuje się jak dioda Zenera, której napięcie przebicia jest proporcjonalne do temperatury.
Posiada trzy wyprowadzenia, dwa z nich to anoda i katoda diody, a trzecie jest wyjściem
służącym do kalibracji. Zmiany napięcia przebicia wynoszą 10mV/K. Przy 25°C układ ma
dokładność ±2°C, jednak jest możliwe jej zwiększenie poprzez zastosowanie mechanizmu
kalibracji proponowanego przez producenta. Układ mierzy temperatury z zakresu -40 do
100°C, jest produkowany w obudowach TO-92 i SO8. [19]
Układy z wyjściem prądowym.
Układy z tej grupy funkcjonują jak źródła prądowe, o wartości prądu proporcjonalnej
do temperatury. W podstawowym układzie z takim czujnikiem mierzony jest spadek napięcia
na rezystorze, wskutek czego uzyskuje się wyjście napięciowe. Przedstawicielem tej grupy
11
układów jest rodzina AD590, produkcji Analog Devices. Wyjście prądowe jest
proporcjonalne do temperatury, zależność wynosi 1µA/K. Dla temperatury +25°C (298,2K)
prąd wynosi 298,2µA. Układ wymaga kalibracji, ponieważ bez niej błąd może sięgać ±10°C
w niektórych wersjach. Po wykonaniu kalibracji spada do ±1°C w wersji AD590K. Dostępny
jest w obudowach do montażu powierzchniowego i przewlekanego. [9]
Układy z wyjściem czasowym
Układy takie generują przebieg prostokątny, którego parametry czasowe odpowiadają
zmierzonej temperaturze. Mogą one być wykorzystane w urządzeniach całkowicie
analogowych, a także poprzez użycie liczników w układach mikroprocesorowych. Zwykle
przebieg generowany przez czujnik nadaje się do bezpośredniego doprowadzenia do wejść
licznikowych procesora. Omówione poniżej zostały dwa układy tego typu, różniące się m. in.
sposobem interpretacji generowanego przebiegu.
Układ SMT160-30. Produkowany przez Smartec. Czujnik ten posiada wyjście
generujące przebieg prostokątny o czasie wypełnienia proporcjonalnym do zmierzonej
temperatury. Częstotliwość przebiegu wynosi od 1 do 4kHz. Na każdy stopień Celsjusza
wypełnienie rośnie o 0,47%. Układ zasilany jest napięciem 5V, mierzy temperatury z zakresu
-45 do +130°C. Dokładność czujnika jest różna w zależności od obudowy, wynosi od ±0,7°C
do ±2°C. Czujnik jest produkowany w czterech różnych obudowach, do montażu
przewlekanego i powierzchniowego. Producent gwarantuje poprawną pracę na przewodach o
długości do 20m, co pozwala na znaczne odsuniecie czujnika od reszty układu pomiarowego.
[22]
Seria MAX6575 produkcji Maxim. Układ ten posiada jedną linie wyjściową. Jest to
linia typu otwarty dren. Pomiar wyzwalany jest przez krótkie ściągnięcie linii do masy przez
procesor sterujący. Po określonym czasie czujnik ściąga linie do masy, a temperatura jest
proporcjonalna do czasu, jaki upłynął. W tym przypadku jest mierzony czas powrotu impulsu.
Dodatkowo ustawiany jest mnożnik czasu na jedną z czterech wartości, co pozwala na
podłączenie kilku układów do jednej linii i wyzwalanie ich jednym impulsem. Układ pracuje
z napięciem 2,7 do 5,5V, mierzy temperaturę z zakresu -40 do 125°C. Przy 25°C typowo
błąd wskazania wynosi ±0,8°C. Dostępny wyłącznie w obudowie SOT23-6 do montażu SMD.
[20]
2.1.3. Układy cyfrowe.
Odrębną grupę scalonych czujników temperatury stanowią układy z interfejsem cyfrowym.
Wyposażone są zwykle w szeregowy interfejs, a wartość temperatury przesyłana jest jako
12
słowo składające się z odpowiedniej ilości bitów, zgodnej z rozdzielczością układu. Układy
takie bywają wyposażone w dodatkowe funkcje, jak np. termostat. Główną zaletą tego typu
urządzeń jest prostota użycia, minimalna ilość zewnętrznych elementów, dokładność odczytu
zawsze zgodna ze sprzętową rozdzielczością czujnika. W chwili obecnej na rynku dostępnych
jest wiele układów wyposażonych w różne interfejsy i różnej klasy dokładności.
W tabeli zaprezentowano wybrane czujniki cyfrowe z uwzględnieniem ich najważniejszych
parametrów.
Tabela 1. Zestawienie parametrów cyfrowych czujników temperatury [11, 12, 13, 16, 17, 18]
Model Producent Interfejs Zakres °C Dokładność* °C Rozdzielczość °C
MAX 7500 Maxim I2C -55; +125 ±2 0,5
LM 72 National
Semiconductor
I2C -55; +125 ±2 0,5
LM 74 National
Semiconductor
Synchroniczny,
szeregowy, 2
przewody
-55; +150 ±1,25 0,0625
LM 92 National
Semiconductor
synchroniczny,
szeregowy, 2
przewody
-55; +150 ±0,5 0,0625
DS 1620 Dallas
Semiconductor
Synchroniczny,
szeregowy, 3
przewody
-55; +125 ±0,5 0,5
DS 1621 Dallas
Semiconductor
Synchroniczny,
szeregowy, 2
przewody
-55; +125 ±0,5 0,5
DS 18B20 Dallas
Semiconductor
1-wire -55; +125 ±0,5 0,0625
* Dokładność jest podana dla zakresu temperatur obejmującego warunki normalne.
Tabela przedstawia tylko najpopularniejsze cyfrowe układy do pomiaru temperatury. Duża
różnorodność na rynku w chwili obecnej pozwala dobrać właściwy układ do większości
zastosowań.
2.2. Budowa i działanie modułów Peltiera
Moduły Peltiera w ostatnim czasie znalazły szerokie zastosowanie w technice. Stosowane są
w wielu urządzeniach dla różnych zastosowań i w różnej skali. Pojawienie się prostej,
13
pozbawionej części mechanicznych pompy ciepła w znacznym stopniu przyczyniło się do
rozwoju wielu dziedzin nauki i techniki.
W ogólnym ujęciu od strony funkcjonalnej moduł Peltiera jest pompą ciepła. Jego
działanie polega na transporcie ciepła przy wykorzystaniu zewnętrznego źródła energii,
dostarczanej pod postacią prądu elektrycznego. Oznacza to zdolność tego elementu do
wytworzenia różnicy temperatur, tak, aby możliwy był przepływ ciepła z otoczenia o niższej
temperaturze do otoczenia o wyższej temperaturze.
W ujęciu konstrukcyjnym element Peltiera jest półprzewodnikiem, w którym nacisk
został położony na maksymalne wykorzystanie efektu Peltiera do transportu ciepła.
Zewnętrznie jest to płytka z wyprowadzeniami elektrycznymi. Ponieważ sam moduł
nie ma żadnych elementów sterujących, wyprowadzenia służą wyłącznie do zasilania.
Rozmiar płytki zależny jest od zastosowań i może być bardzo różny, dzięki dużemu
potencjałowi skalowania urządzenia. Najczęściej spotykane w handlu są moduły o
powierzchni kilkudziesięciu centymetrów kwadratowych. Należy jednak wspomnieć o
modułach o powierzchni rzędu milimetrów kwadratowych stosowanych w specjalistycznych
rozwiązaniach w technice precyzyjnej. Skalowanie „w górę” jest w oczywisty sposób
możliwe poprzez stosowanie wielu modułów. Mogą one być łączone cieplnie zarówno
równolegle (zwiększenie ilości transportowanego ciepła) jak i szeregowo (zwiększenie
wytwarzanej różnicy temperatur). Również sposób łączenia elektrycznego modułów jest
dowolny, charakteryzują się głównie rezystancyjnym charakterem obciążenia.
Rysunek 1. Widok ogólny modułu Peltiera [6]
Działanie modułów Peltiera opiera się na zjawisku odkrytym przez Jeana Peltiera.
Jean Charles Athanase Peltier żył w latach 1785-1845. Był francuskim meteorologiem i
fizykiem, zawodowo zajmował się zegarmistrzostwem. Swojego najważniejszego odkrycia
dokonał w roku 1834. Odkrył, że przepływ prądu przez połączenie dwóch różnych metali
14
wywołuje oddawanie lub pochłanianie ciepła. Kierunek przepływu ciepła zależny był od
kierunku przepływu prądu [1][2]. Dzięki odkryciu tego zjawiska możliwe stało się
skonstruowanie modułów działających jak pompy ciepła. Warto w tym miejscu wspomnieć o
zjawisku odwrotnym, noszącym nazwę efektu Seebecka. Polega ono na powstawaniu różnicy
potencjałów na styku dwóch przewodników o różnych temperaturach. Na zjawisku Seebecka
opiera się funkcjonowanie termopar, służących jako czujniki temperatury.
Rysunek 2. Jean Charles Athanase Peltier [1]
Moduł Peltiera, jak już zostało wspomniane, ma postać płytki. Można wyróżnić trzy
zasadnicze warstwy modułu. Zewnętrzne, o identycznej budowie, odpowiadają za kontakt z
otoczeniem. Wykonane są zwykle z materiałów ceramicznych o dużej odporności
mechanicznej i termicznej. Zapewnia to odpowiednią sztywność modułu i zdolność do
działania w skrajnej temperaturze. Warstwa wewnętrzna odpowiada za właściwości
termoelektryczne urządzenia. Mechanicznie składa się ona z wielu kolumienek. Występują
dwa rodzaje kolumienek ułożonych naprzemiennie, domieszkowanych n i p. Efekt Peltiera
powstaje na styku dwóch różnych przewodników, zatem wymusza to stosowanie dwóch
rodzajów kolumienek. Kolumienki elektrycznie połączone są szeregowo. Płynący prąd
napotyka na zmianę kolumienki obu typów. Są one połączone stykami miedzianymi w
okolicy kontaktu z obudową. Połączenia są lutowane i to zwykle one ograniczają maksymalną
temperaturę modułu. Po jej przekroczeniu następuje upłynnienie spoiny, rozlutowanie i w
rezultacie przerwanie obwodu. W praktyce maksymalna temperatura pracy modułu wynosi
zwykle około 130 stopni Celsjusza.
Kolumienki wykonane są z tellurku bizmutu. Są one domieszkowane n i p. Dzięki
zastosowaniu tego materiału efekt termiczny jest możliwie duży (znacznie większy, niż gdyby
zastosowano czyste metale). Ze względu na zastosowane materiały moduł Peltiera można
uznać za półprzewodnik. Rysunki nr 3 i 4. wyraźnie przedstawiają, że złącza n-p i p-n
15
zlokalizowane są po różnych stronach modułu. Złącza n-p oddają ciepło, a złącza p-n je
pobierają. Łatwo również zauważyć, że po odwróceniu kierunku przepływu prądu złącza n-p i
p-n zamienią się miejscami, stąd zmiana kierunku przepływu ciepła po zmianie polaryzacji
zasilania.
Rysunek 3. Budowa ogniwa Peltiera [5]
Rysunek 4. Przekrój przez moduł Peltiera [5]
Istota działania modułu polega na występowaniu zjawiska Peltiera na złączu p-n. Dzieje
się tak dlatego, że obszary n i p mają elektrony o różnych potencjałach energetycznych.
Obszar n zawiera nadmiar elektronów. Oznacza to, że elektrony są na wyższych orbitalach
(na wyższych poziomach energetycznych), ponieważ nie mogą się pomieścić na orbitalach
niższych. W momencie wymuszenia poprzez różnicę potencjałów ich ruchu do obszaru p,
niejako „spadają” na niższy poziom. Nadmiar energii wydziela się w postaci ciepła.
Analogicznie, elektrony z obszaru p, gdzie są na niskim poziomie energetycznym (nadmiar
dziur), są „wciągane” do obszaru n, gdzie muszą wejść na wyższy poziom. Niedobór energii
pobierają z otoczenia, co powoduje ochładzanie złącza.
16
Skuteczność działania modułu jest ograniczana przez szereg czynników natury
fizycznej. Jest on przewodnikiem elektrycznym, posiadającym rezystancję. Wskutek
przepływu przez niego prądu rozpraszana jest energia w postaci ciepła. Jest ona równa:
P = I 2 R (I – natężenie prądu, R – opór elektryczny)
Zwana jest ona ciepłem Joule’a. Ciepło to w czasie pracy modułu jest „wypychane” na ciepłą
stronę. Jego ilość, co wynika ze wzoru, jest proporcjonalna do kwadratu natężenia prądu.
Aby dokładnie przedstawić konsekwencje tego zjawiska, należy przeanalizować zależność
ilości transportowanego ciepła od natężenia prądu.
Jak wspomniano, ciepło jest transportowane dzięki różnicy poziomów energii
pokonywanej przez elektrony. Każdy elektron powoduje pochłonięcie lub oddanie pewnej
stałej ilości energii, gdyż każdy pokonuje tę samą barierę. Definicja natężenia prądu mówi, że
jest to ilość ładunku (każdy elektron niesie stały ładunek, zatem ładunek jest proporcjonalny
do ilości elektronów) przepływającego w jednostce czasu. Zatem widać wyraźnie, że ilość
przetransportowanego ciepła przez moduł jest proporcjonalna do natężenia prądu.
Występuje zatem sytuacja, gdy zdolność transportu ciepła rośnie liniowo, a ciepło
Joule’a kwadratowo wraz z natężeniem prądu. Istnieje zatem taka wartość prądu, gdzie moduł
już nie będzie w stanie pobierać ciepła ze środowiska, a cała moc będzie zużywana na
transport ciepła Joule’a. Jeśli natężenie będzie dalej rosło, obie strony modułu zaczną
oddawać ciepło na zewnątrz. Istnieje też pewien optymalny prąd, powyżej którego ilość
ciepła Joule’a rośnie szybciej niż zdolność transportu ciepła. W normalnej eksploatacji nie ma
potrzeby przekraczania tej wartości prądu.
Warto również wspomnieć o wydajności cieplnej strony „gorącej” modułu. Na ilość
energii przez nią wypromieniowanej składa się energia elektryczna pobrana z zasilania (jako
ciepło Joule’a) i ciepło odebrane ze strony „zimnej”. Zatem, jeśli rozpatrzony zostanie
stosunek oddanego ciepła do pobranej energii, okaże się, że wynosi on ponad 1. Daje to
ponad stuprocentową sprawność grzewczą w odniesieniu do ilości pobranej energii
elektrycznej. Energia pobrana z otoczenia jest niejako „darmowa”, ze względu iż
wykorzystywane są tzw. niskotemperaturowe źródła ciepła. Aktualnie takie rozwiązania są
wykorzystywane do celów grzewczych, jednak przy użyciu sprężarkowych pomp ciepła, a
jako nieskotemeraturowe źródła ciepła wykorzystuje się grunt, zbiorniki wodne itp.
Kolejnym istotnym zjawiskiem występującym w czasie pracy modułu jest transport
ciepła. Każdy materiał posiada pewną przewodność cieplną. Również kolumienki z których
wykonany jest moduł przewodzą ciepło ze strony „gorącej” do „zimnej”, czyli w odwrotnym
17
kierunku niż pompuje je urządzenie. Stwarza to więc konieczność ponownego wypchnięcia
tego ciepła na zewnątrz. W sposób oczywisty obniża to wydajność urządzenia. Ilość
transportowanego ciepła rośnie wraz z różnicą temperatur obu stron.
W praktyce skuteczność działania modułu zależy od wielu czynników i trudno jest, nie
stosując zaawansowanego modelowania, precyzyjnie określić możliwe do uzyskania
temperatury. Na skuteczność składają się takie czynniki jak wartość prądu, różnica
temperatur, izolacja termiczna przestrzeni chłodzonej i wiele innych. Praktyka wykazuje, że
sprawność sprężarkowych pomp ciepła jest zwykle nieco większa.
Moduły Peltiera stosuje się obecnie prawie wyłącznie do chłodzenia lub stabilizacji
temperatury. Jest to związane głównie z kosztami co czyni zastosowanie do ogrzewania
nieopłacalnym. Najczęstsze zastosowania to:
- Chłodzenie elementów radioelektronicznych i laserowych w celu zmniejszenia zakłóceń.
Stosuje się tutaj moduły o powierzchni rzędu milimetrów kwadratowych. Schłodzenie takich
elementów znacznie poprawia parametry urządzeń.
- Chłodzenie elementów elektronicznych w celu odebrania od nich nadmiaru ciepła i
zapobieganiu uszkodzeniom (np. procesory we współczesnych PC) . Należy jednak
wspomnieć, ze to zastosowane w ostatnim czasie nieco traci na popularności. Składa się na to
kilka powodów. Zdarzały się przypadki uszkodzeń elementów z powodu nadmiernego
schłodzenia lub doprowadzenia do kondensacji pary wodnej w okolicach styków
elektrycznych, co prowadziło do zwarć lub korozji. Ponadto moduły wymagały wydajnego
chłodzenia (zwykle wodnego) strony „gorącej”. Kolejną wadą była moc modułów, rzędu
100W, co powodowało, że wymagane było zwykle skomplikowane, odrębne zasilanie. W
końcu procesory stały się tańsze, wydzielają mniej ciepła i w celu zwiększenia ich wydajności
wystarczy zwykłe chłodzenie wodne, które nie ma wad modułu Peltiera.
- Konstrukcja niewielkich, przenośnych urządzeń chłodniczych, np. lodówki turystyczne.
Pozwala to na znaczne uproszczenie ich konstrukcji, poprzez znaczną eliminację części
mechanicznych.
- Stabilizatory temperatury, komory termiczne, inny sprzęt laboratoryjny, gdzie wymagana
jest stabilna temperatura. Wykorzystywana jest tutaj możliwość łatwej zmiany kierunku
przepływu ciepła (łatwe ogrzewanie i ochładzanie).
- Wzorce temperatury.
18
- Wirtualna rzeczywistość. Urządzenia symulujące wrażenia temperatury przy dotykaniu
przedmiotów w wirtualnym świecie. Tu również wykorzystywana jest możliwość zmiany
kierunku przepływu ciepła i niewielkie rozmiary urządzenia.
Ze względu na cenę moduły Peltiera nie są wykorzystywane w urządzeniach dużej
skali, nie są także wykorzystywane do ogrzewania mimo możliwości uzyskania wysokiej
wydajności ze względu na zdolność pobierania ciepła ze źródeł niskotemperaturowych. Jeżeli
w przyszłości konstruktorom uda się zmniejszyć cenę modułów, wówczas możliwe będzie ich
użycie na większą skalę, do takich celów jak klimatyzowanie całych pomieszczeń, lub w
małych urządzeniach grzewczych (czajniki, kuchenki) w celu oszczędzenia energii
elektrycznej (kosztem nieznacznego ochłodzenia powietrza w pomieszczeniu).
Podsumowując, można wyróżnić następujące zalety modułów Peltiera:
Brak części mechanicznych,
Wysoka niezawodność, odporność mechaniczna i elektryczna,
Bezgłośna praca,
Duże możliwości skalowania (szczególnie w dół),
Prostota zastosowania, elastyczność skali i kształtu.
Możliwość pracy rewersyjnej
W pełni regulowana moc pracy (płynnie), obciążenie
Podstawowe wady:
Cena
Kłopotliwe zasilanie (dość wysokie prądy)
Sprawność niższa niż sprężarkowych pomp ciepła.
Niewątpliwym pozostaje fakt, że moduły Peltiera są ciekawymi urządzeniami o dużym
potencjale. Ich zastosowanie charakteryzuje się wysoką elegancją, ze względu na możliwość
uproszczenia konstrukcji urządzenia i zmniejszenia jego wymiaru. Pozwalają one także na
umieszczenie pomp ciepła tam, gdzie do tej pory było to niemożliwe ze względu na wymiary
i komplikację tradycyjnych rozwiązań – istnieją zastosowania, gdzie moduły są na dzień
dzisiejszy niezastąpione. Podstawową ich wadą pozostaje cena. „Peltiery” są kosztowne ze
względu na materiały używane do ich budowy. Jeżeli w przyszłości możliwe będzie obniżenie
kosztów produkcji tych urządzeń, należy się spodziewać wkroczenia ich w nowe obszary
zastosowań. [3, 5, 6]
19
3. Konstrukcja urządzenia
Opis projektu konstrukcji urządzenia obejmuje kryteria doboru elementów,
charakterystykę elementów, połączenia elektryczne (schemat), opis wyprowadzeń i sygnałów.
Zawiera także projekt obwodu drukowanego, który został wykonany przez zewnętrznego
wykonawcę i posłużył do montażu urządzenia.
3.1. Schemat blokowy
Projekt sprzętowy urządzenia został przedstawiony na schemacie blokowym na
rysunku 5. Można wyróżnić w nim następujące części: jednostka centralna, interfejs
użytkownika, blok pomiaru temperatury, blok sterowania modułem Peltiera, części
wykonawcze (moduł i system dystrybucji ciepła), komunikacja z PC w celu kalibracji oraz
zasilanie wszystkich elementów układu.
Rysunek 5. Schemat blokowy projektowanego urządzenia
3.2. Jednostka sterująca.
Rolą jednostki sterującej w projekcie jest:
- odczyt temperatury z czujnika,
- obsługa interfejsu użytkownika,
- sterowanie modułem Peltiera na podstawie ustawień użytkownika i odczytanej temperatury
20
- zapewnienie działania mechanizmów kalibracji i obsługa połączenia z PC, jeśli jest to
konieczne
Jednostka sterująca sprawuje nadzór nad całym urządzeniem, ponadto wykonuje
zadania matematyczno-logiczne, jak porównywanie temperatur, pamiętanie ustawień
kalibracji itp. Implikuje to zastosowanie mikrokontrolera cyfrowego, który po odpowiednim
zaprogramowaniu będzie w stanie spełniać wymienione zadania.
Pożądane cechy mikrokontrolera to:
- łatwa dostępność urządzenia w handlu. Oprócz oczywistych ułatwień w pozyskaniu
procesora, dzięki łatwej dostępności nie trzeba ponosić dodatkowych kosztów związanych ze
sprowadzeniem, a także można uniknąć opóźnień.
- łatwy dostęp do oprogramowania i urządzeń programujących. Projekt zakłada
oprogramowanie w asemblerze, zatem istotne jest dostarczenie przez producenta układu
odpowiedniego oprogramowania, jego aktualizacje, współpraca z programatorami
- wspieranie interfejsu JTAG w celu wspomagania uruchomienia. Dzięki interfejsowi JTAG
możliwe jest śledzenie pracy procesora oraz praca krokowa, co skraca czas wykrycia i
poprawienia błędów.
- wspieranie sprzętowe protokołu komunikacji z PC (UART lub USB). Protokoły
asynchroniczne są kłopotliwe w implementacji programowej, sprzętowe mechanizmy
znacznie ułatwiają projektowanie.
- dostępność układu w obudowie DIP do montażu przewlekanego. Jest to istotne ułatwienie
przy budowie prototypu.
- posiadanie wystarczającej liczby wyprowadzeń. Szacunkowa ilość niezbędnych pinów to
około 20.
- posiadanie minimum 1kB pamięci nieulotnej EEPROM lub FLASH, dającej łatwo
programować się z poziomu wykonywanego programu. Jest ona niezbędna do
przechowywania danych kalibracyjnych.
- minimalna ilość elementów zewnętrznych niezbędnych do uruchomienia procesora.
(wewnętrzny układ taktujący, wewnętrzne rezystory pull-up sterowane z poziomu układu).
- dodatkowymi zaletami procesora będą: przełączane szybkości wewnętrznego zegara oraz
liczniki zgłaszające przerwania, pozwalające ustalić tempo wykonania procedur urządzenia.
Należy także dodać, że dla projektu nie jest krytyczna wydajność obliczeniowa i
szybkość działania. Wystarczający jest procesor 8-bitowy o przeciętnej wydajności
obliczeniowej. System ma za zadanie stabilizować temperaturę cieczy, która ma znaczną
21
pojemność cieplną, co implikuje powolne zmiany temperatury. Nie jest konieczny szybki
pomiar i szybka reakcja na zmiany temperatury. Dowolne jest napięcie zasilania procesora, a
także energochłonność układu, ponieważ urządzenie zasilane jest z sieci energetycznej, a
pobór prądu przez sterownik jest znikomy w porównaniu z poborem przez moduł Peltiera.
Po dokonaniu analizy dostępnych układów do projektu został wybrany procesor ATmega32
produkcji firmy Atmel. Jest to 8-bitowy układ o maksymalnej wydajności 16 MIPS, należący
do rodziny AVR, wersja zasilana napięciem 5V (4,5 – 5,5V).
Rysunek 6. ATmega16 i ATmega32
Jest to szeroko stosowany przez amatorów układ, łatwo dostępny i niedrogi. Można
zakupić go w obudowie DIP40. Posiada 4 porty 8-bitowe, co daje 32 programowane
wyprowadzenia. Posiada również interfejs JTAG, który może być stosowany do
programowania i debugowania. Wykorzystuje on 4 piny portu C, co powoduje
zmniejszenie ogólnej ilości dostępnych linii do 28, jeśli jest używany. Układ posiada 32KB
pamięci FLASH, 2 KB SRAM i 1 KB EEPROM, wytrzymującej co najmniej 100000 cykli
zapisu/kasowania. ATmega32 może pracować z wewnętrznym zegarem 1, 2, 4, 8MHz, a
także wykorzystywać kwarc zewnętrzny. Producent dostarcza program AVR Studio, który
jest kompleksowym narzędziem programistycznym i uruchomieniowym dla układów z
rodziny AVR. Dostępny jest nieodpłatnie ze strony producenta. Istotne dla projektu
pozostałe funkcje procesora to interfejs UART, który po dostosowaniu poziomu napięć jest
zgodny z RS232C, trzy wewnętrzne liczniki z prescalerem, mogące zgłaszać przerwania
oraz rezystory pull-up na każdym porcie sterowane niezależnie, ułatwiające m. in.
implementację klawiatury.
Jednostka matematyczno-logiczna operuje na 32 8-bitowych rejestrach. Jakkolwiek są
one ogólnego przeznaczenia, nie wszystkie instrukcje mają dostęp do każdego rejestru.
Dodatkowo do dyspozycji jest licznik programu, rejestr stanu i wskaźnik stosu. 6 rejestrów
22
można połączyć w 3 rejestry indeksowe o długości 16 bitów, pozwalające adresować
bezpośrednio całą przestrzeń adresową. Jednostka posiada 131 instrukcji, realizujących
wszystkie podstawowe funkcje logiczne, a także funkcje arytmetyczne takie jak: dodawanie,
odejmowanie, mnożenie.
Przedstawione cechy uzasadniają wybór kontrolera ATmega32, ponieważ spełnia
wszystkie wymagania stawiane przez projekt. Użyta została wersja w obudowie DIP40 do
montażu przewlekanego. [10]
3.3. Pomiar temperatury.
Projektowane urządzenie musi być wyposażone w układ mierzący temperaturę
płaszcza wodnego. Cześć pomiarowa musi spełniać następujące założenia:
- zakres pomiaru powinien co najmniej obejmować temperatury od 10 do 50°C
- dokładność pomiaru rzędu 0,1°C
- sonda powinna mieć niewielkie rozmiary, prostą konstrukcję i niski koszt, co ułatwia
ewentualną wymianę.
- dopuszcza się możliwość okresowej kalibracji układu.
Wszystkie założenia, poza dokładnością spełniają popularne czujniki cyfrowe. Są to
układy wewnętrznie skalibrowane przez producenta, wyposażone zwykle w szeregowy
interfejs cyfrowy, przystosowane do pracy z praktycznie każdym mikrokontrolerem
dostępnym na rynku. Przeglądu dostępnych urządzeń dokonano w rozdziale dotyczącym
technik pomiaru temperatury.
Żaden z wymienionych czujników nie spełnia wymagań dotyczących dokładności, spełniając
jednocześnie wymagania dotyczące zakresu i rozdzielczości. W każdym przypadku konieczna
jest kalibracja.
Z przeprowadzonych badań [7] wynika, że dokładność czujnika typu LM74 można
znacznie poprawić kalibracją. W badaniu użyto populacji czujników i podjęto próbę
obliczenia funkcji korygującej uniwersalnej dla całej populacji. Zatem indywidualna
kalibracja użytego czujnika da rezultaty niegorsze. Najlepsze rezultaty badający uzyskał dla
korekcji odczytów funkcją liniową.
Za wyborem układu LM74 przemawiają następujące argumenty:
- dostateczny zakres pomiaru,
- dostateczna rozdzielczość pomiaru,
23
- łatwy w implementacji interfejs szeregowy,
- udowodnione dobre efekty kalibracji, [7]
- niska cena (układy dysponujące wyższą dokładnością są droższe, a mimo to w dalszym
ciągu kalibracja byłaby niezbędna).
Do zalet układu należy zaliczyć także szeroki zakres napięć zasilania (2,7 do 5,5V) i niski
pobór prądu.
Czujnik LM74 jest miernikiem temperatury wyposażonym w przetwornik analogowo-
cyfrowy oraz szeregowy interfejs synchroniczny. Odczyt temperatury następuje na żądanie
kontrolera. Układ podaje dane w postaci 13-bitowego słowa. Pomiaru mieści się w zakresie
-55°C do +150°C, natomiast rozdzielczość wynosi 0,0625°C.
Rysunek 7. Układ LM74
Dokładność czujnika zależy od zakresu temperatury i wynosi:
± 1,25°C. dla temperatur z zakresu: -10 do +65°C
± 2,1°C. dla temperatur z zakresu: -25 do +110°C
± 3°C. dla temperatur z zakresu: -55 do +125°C
Maksymalny pobór prądu przez czujnik wynosi około 0.5mA, w trybie uśpienia spada do
3µA.
Uproszczony schemat blokowy jest przedstawiony na rysunku 8:
24
Rysunek 8. Uproszczony schemat blokowy układu LM74
Układ posiada następujące wyprowadzenia:
- V+, zasilanie
- GND – masa
- CS, linia wyboru urządzenia, sterowana z kontrolera
- SI/O – linia danych, transmisja danych do i z układu, linia dwukierunkowa
- SC – linia zegara interfejsu szeregowego, sterowana z kontrolera
Pomiędzy V+ a masę konieczne jest włączenie kondensatora 0,1μF. Większa niż kilka
centymetrów długość przewodów lub ścieżek pomiędzy kondensatorem i układem powoduje
powstanie znacznych błędów pomiaru. Interfejs układu może być sterowany całkowicie
programowo z mikrokontrolera, lub tez może zostać wykorzystany mechanizm sprzętowy
procesora. Producent podaje przykładowe połączenia dla kilku popularnych typów
kontrolerów. Słowo przekazywane przez układ ma postać dwóch ośmiobitowych ramek,
wynik jest wyrównany do lewej strony w systemie U2. Przykładowy przebieg sygnałów
przedstawia rysunek 9:
Rysunek 9. Przebieg sygnałów podczas odczytu temperatury z układu LM74.
25
Maksymalna częstotliwość zegara interfejsu wynosi 6,25MHz. Rejestr temperatury
uaktualniany jest w czasie zależnym od wersji układu:
- dla obudowy SO-8: typowo 280ms, maksymalnie 425ms,
- dla obudowy micro-SMD: typowo 611ms, maksymalnie 925ms.
W razie odczytu temperatury w trakcie uaktualniania wartości w rejestrach, na wyjściu
pojawia się dotychczasowa wartość. Nowa wartość odczytu dostępna jest dopiero po
zakończeniu cyklu pomiaru. Pozwala to na odczyt z urządzenia w dowolnym momencie.
Kontakt termiczny układu z otoczeniem zapewniony jest przede wszystkim poprzez metalowe
wyprowadzenia elektryczne. Odczytywana temperatura jest temperaturą wewnętrznej
struktury krzemowej układu.
Aby osiągnąć zamierzoną dokładność pomiaru niezbędna jest kalibracja układu.
Pomiar w zakresie wykorzystywanych temperatur (10 – 50°C) wg. danych producenta jest
obarczony błędem o maksymalnej wartości 1,25 °C. Jest to znacznie więcej, niż wartość
wymagana w projekcie. Kalibracja jest czynnością okresową. Wykonanie jej musi mieć
miejsce kiedy:
- urządzenie jest uruchamiane po raz pierwszy po montażu.
- została wymieniona sonda, lub układ pomiarowy w sondzie
- okresowo, głównie w celu kontroli poprawności działania. Może dojść do rozkalibrowania
czujnika na skutek starzenia się układu pomiarowego.
Szczegóły kalibracji zostały przedstawione w części dotyczącej oprogramowania
układu.
Czujnik został dołączony do wyprowadzeń procesora portu A w następujący sposób:
PA.0 – SI/O, dwukierunkowa linia danych
PA.1 – SC, zegar interfejsu
PA.2 – CS, wybór układu aktywny stanem niskim.
Połączenia wykonane są bezpośrednio, ze względu na pełna zgodność elektryczną. Nie ma
potrzeby żadnego dostosowywania sygnału.
Odrębnym zagadnieniem jest konstrukcja sondy temperaturowej. Musi ona zapewniać
dobry kontakt termiczny, a jednocześnie być szczelna i odporna mechanicznie. Rozważano
kilka typów konstrukcji do zastosowania.
Jedną z konstrukcji było zastosowanie zamkniętego profilu walcowego o średnicy kilkunastu
mm z umieszczonym wewnątrz czujnikiem. Schemat tej konstrukcji przedstawia rysunek
nr 10.
26
Rysunek 10. Schemat sondy temperatury
Czujnik wewnątrz jest uszczelniony i zaizolowany przy pomocy dowolnego materiału
(silikon).
Inny wariant konstrukcji zakłada użycie dwóch warstw blachy miedzianej i umieszczenie
czujnika pomiędzy nimi. Całość również należy zaizolować silikonem.
W wariancie prototypowym użyto czujnika przylutowanego do niewielkiej płytki laminatowej
i przymocowano za pomocą silikonu do bloku wodnego. Płytka stanowi przejściówkę ze
standardu SMD na standardowy rozstaw końcówek 100mils. Pomiar temperatury na bloku
jest miarodajny, gdyż blok jest wykonany z miedzi, która dobrze przewodzi ciepło i zapewnia
dobry kontakt termiczny z cieczą.
Niezależnie od przyjętego rozwiązania, wytyczne są takie same: dobry kontakt
termiczny i zabezpieczenie czujnika. Należy także pamiętać, że konieczne jest zastosowanie
kondensatora 100nF pomiędzy masą a zasilaniem możliwie blisko czujnika (w sondzie).
3.4. Interfejs użytkownika.
Interfejs użytkownika w urządzeniu spełnia funkcję komunikacyjną. Niezbędna jest
komunikacja dwukierunkowa. Kierunek od użytkownika realizuje klawiatura. Złożona jest z
czterech przycisków, wykonanych jako mikrostyki. Przyciski zwierają poszczególne linie
portu mikrokontrolera do masy. Dzięki zastosowaniu wewnętrznych rezystorów
podciągających wyjścia do zasilania, nie są potrzebne żadne dodatkowe elementy. Rozwarcie
27
przycisku odczytywane jest jako stan wysoki. Wciśnięcie powoduje zwarcie linii do masy,
przepływ prądu przez opornik, spadek napięcia na nim i pojawienie się na wejściu portu stanu
niskiego. Zastosowane przełączniki dołączone są do portu A mikrokontrolera. Opis sygnałów:
PA.4 – ON/OFF
PA.5 – DÓŁ
PA.6 – GÓRA
PA.7 – Menu
Szczegółowy opis działania przycisków znajduje się w części dotyczącej oprogramowania i
działania układu.
Kierunek komunikacji do użytkownika realizowany jest za pomocą wyświetlacza
alfanumerycznego. Użyty został wyświetlacz zgodny ze standardem HD44780. Posiada dwie
linie po 20 znaków, co pozwala na wyświetlenie 40 znaków. Wyświetlacz jest zasilany
napięciem 5V, linie wyświetlacza podłączone są do wyjść procesora bezpośrednio.
Wyświetlacz sterowany jest w trybie 4 bitowym, przez co wykorzystuje 7 linii procesora.
Podłączony jest do portu B, rozkład sygnałów jest następujący:
PB.0 – E, linia Enable sterowana z procesora
PB.1 – R/W, linia wyboru zapisu lub odczytu z HD44780
PB.2 – RS, linia wyboru dostępu do rejestrów danej lub instrukcji do wyświetlacza
PB.4-7 – DB4-DB7, 4 równoległe linie danych. Linia DB7 działa także jak linia BUSY,
sygnalizacja oczekiwania na układ HD44780.
Rysunek 11. Wyświetlacz HD44780
W trybie 4-bitowym linie DB0-3 sterownika HD44780 pozostają niewykorzystane i są
niepodłączone.
28
3.5. Komunikacja z PC
W urządzeniu przewidziany został przewidziany system kalibracji przy użyciu
komputera PC. Taki system wymaga zapewnienia komunikacji obustronnej. Wybrany został
standard RS232C, ze względu na obecność tego interfejsu w procesorze. Standard elektryczny
RS232C przewiduje sygnał niski na poziomie +3 do +15V, a stan wysoki na poziomie -3 do
-15V. Procesor ATmega wykonany w technologii CMOS posiada stany logiczne na poziomie
0V i 5V. Konieczne jest dostosowanie tych poziomów dla umożliwienia współpracy. W tym
celu użyty został układ MAX232, przeznaczony do konwersji poziomów RS232-TTL.
Posiada on dwie pary układów konwersji napięć TTL – RS232C. Do pracy układ MAX232
wymaga dołączenia czterech zewnętrznych kondensatorów o pojemności 1µF. W konstrukcji
projektu użyto kondensatorów tantalowych o pojemności zalecanej przez producenta. Układ
MAX232 zastosowano w obudowie DIP16.
Do komunikacji wykorzystano linie TX i RX. Nie został zaimplementowany system
sterowania przepływem. Układ MAX232 dołączony został do wyjść procesora portu D, które
pracują jako sprzętowe wyprowadzenia interfejsu UART:
TXD (PD.1) – T1IN
RXD (PD.0) – R1OUT
Natomiast wyjścia układu MAX232A wyprowadzone są na żeńskie gniazdo DB9
umożliwiające podłączenie prostego kabla do portu w komputerze PC:
T1OUT – RxD (pin 2)
R1IN – TxD (pin 3)
Na pin 5 gniazda DB9 podana jest masa całego układu. Druga para buforów w układzie
MAX232 pozostaje niewykorzystana i jest niepodłączona.
3.6. Sterowanie modułem Peltiera
Moduł Peltiera jest urządzeniem pracującym z mocą rzędu 100W. Pracuje przy
prądzie stałym, charakter obciążenia jest wyłącznie rezystancyjny. Przełączanie modułu
zostało zrealizowane wielostopniowo z izolacją galwaniczną.
Do sterowania przewidziano 3 wyprowadzenia mikrokontrolera. Dwa z nich służą do
sterowania całym modułem, załączając odpowiednio grzanie lub chłodzenie. Trzeci służy do
załączania systemu rozprowadzenia ciepła, załączany jest równocześnie z każdym z dwóch
29
poprzednich wyprowadzeń. Podłączenia SA zrealizowane na porcie D mikrokontrolera w
następujący sposób:
PD.5 – ogrzewanie
PD.6 – chłodzenie
PD.7 – Praca systemu rozprowadzania ciepła
Pierwszy stopień sterowania oraz izolacje galwaniczną zapewnia transoptor CNY17-3.
Anoda diody transoptora podłączona jest rezystorem 560Ω do zasilania. Katoda diody
dołączona jest do wyprowadzenia mikrokontrolera. Stan niski na wyprowadzeniu powoduje
świecenie diody i otwarcie fototranzystora. Punkt pracy diody został ustalony na podstawie
informacji zawartej w dokumentacji transoptora. Prąd diody wynosi około 6mA (napięcie
około 1,1V). Współczynnik CTR transoptora wynosi od 100 do 200%, przez co maksymalny
prąd kolektora wyniesie ok. 6 do 12mA. Jest to wartość wystarczającą do wysterowania
wzmacniacza prądowego. Na głównej płycie urządzenia wyprowadzone są 3 pary emiter-
kolektor transoptorów w celu nieumieszczania na jednej płycie elektroniki sterującej i stopni
mocy. Takie postępowanie pozwala uniknąć zakłóceń.
Moduł jest sterowany przekaźnikami elektromagnetycznymi. Parametry
przekaźników: typ przełączny, prąd cewki 60mA, napięcie cewki 12V, maksymalny prad
zestyków 16A. Przekaźniki i moduł mogą być zasilane z osobnej linii o napięciu około 12V.
Sterowanie przekaźnikami odbywa się za pomocą tranzystorów bipolarnych BC547C. Są one
połączone w układ Darlingtona z transoptorami i pracują jak wzmacniacze prądowe dla
przekaźników w układzie wspólnego kolektora. Maksymalny prąd kolektora dla tranzystorów
BC547C wynosi 150mA, zatem jest to wartość wystarczająca do wysterowania cewki
przekaźnika. Równolegle do cewki przekaźnika włączone są zaporowo do prądu kolektora
diody 1N4936 w celu zabezpieczenia tranzystorów sterujących przed napięciem
indukowanym w momencie rozłączenia cewki przekaźnika. Schemat części sterującej
widoczny jest na ilustracji 12.
W wersji prototypowej nie jest przewidziane sterowanie układem rozprowadzenia ciepła, nie
mniej obecność końcówki sterującej i transoptora stwarza możliwość projektu takiego
systemu w przyszłości.
30
Rysunek 12. Schemat sterownika modułu Peltiera
Układ taki zapewnia bezpieczeństwo eksploatacji. Jeśli na skutek błędu lub awarii oba
wyjścia sterujące mikroprocesora zostaną ustawione w stan niski i oba transoptory się
otworzą, przez moduł nie popłynie prad, gdyż na oba wejścia zasilające zostanie podany ten
sam potencjał. Kolejna zaletą jest możliwość przełączania pracy modułu bez ryzyka
pojawienia się stanów powodujących zwarcie. Ostatnią zaletą, którą należy wskazać jest fakt,
że kiedy nie pracuje mikroprocesor przez cewki przekaźników nie popłynie prąd i pozostaną
one wyłączone nawet, jeśli część sterująca mocą będzie zasilana.
3.7. System rozprowadzania ciepła.
Jako system dystrybucji ciepła zastosowano wymuszony obieg cieczy. Jest to obieg
zamknięty, składający się z pompy, przewodów hydraulicznych, bloku wodnego i systemu
wymiany ciepła z otoczeniem. Pompa ma za zadanie wymusić obieg cieczy, może być
sterowana z układu. Blok wodny zapewnia wymianę ciepła między modułem a cieczą. Jest to
element stosowany do chłodzenia wodnego urządzeń elektronicznych. Umieszczany jest na
układzie (module). Przepływająca przez niego ciecz odbiera lub oddaje ciepło elementowi.
Blok wykonany jest z materiałów łatwo przewodzących ciepło, jak np. miedź. Druga strona
modułu wymienia ciepło z otoczeniem za pomocą radiatora wyposażonego w wentylator.
Schemat układu przedstawiono na ilustracji nr 13.
31
Rysunek 13. Schemat systemu rozprowadzania ciepła
3.8. Schemat ideowy i montażowy urządzenia.
Schemat urządzenia umieszczony na jednej płycie widoczny jest na rysunku. Wykaz
elementów na schemacie wraz z wartościami i przeznaczeniem przedstawia tabela nr 2:
Tabela 2. Wykaz elementów układu
Oznaczenie elementu Wartość Opis
IC1 Układ MAX232CPE Przetwornica napięcia dla RS232
IC2 ATmega32 16PU Mikrokontroler sterujący
IC3 LM7805C Stabilizator napięcia 5V
OK1-OK3 CNY17-3 Transoptory izolujące stopnie mocy od
sterownika
C2 100nF Kondensator odsprzęgający dla
mikrokontrolera i układu MAX232
C7 330nF, 250V Kondensator filtrujący przed stabilizatorem
LM7805
C3-C6 1µF Kondensatory niezbędne dla pracy układu
MAX232
32
R2-R4 560Ω Rezystory ustalające punkt pracy diod
transoptorów
D1 1N4148 Dioda ograniczająca napięcie podświetlenia
wyświetlacza
33
Rysunek 14. Schemat ideowy urządzenia
34
Rysunek 15. Schemat montażowy urządzenia
35
Na płycie występuje ponadto szereg złącz do podłączenia dodatkowych modułów. Poniżej
przedstawiono opis złącz, wraz z rozkładem sygnałów.
Zasilanie:
Złącze zasilania całego układu sterownika. Napięcie wprowadzane jest na stabilizator
LM7805. Nie powinno być niższe niż 7V, nie powinno też przekraczać kilkunastu woltów ze
względu na wzrost strat i rozgrzewanie stabilizatora LM7805
1 GND
2 V+
3 GND
HD44780:
Złącze do podłączenia wyświetlacza HD44780.
1 VDD - zasilanie
2 GND
3 Enable
4 V0 – regulacja kontrastu wyświetlacza, podłączona na stałe do GND
5 RS
6 R/W
7-10 Niepodłączone
11 D5
12 D4
13 D7
14 D6
15 K – katoda diody podświetlającej
16 A – anoda diody podświetlającej
JP1:
Złącze interfejsu RS232C
1 TxD
2 RxD
3 GND
JP3:
Złącze do podłączenia klawiatury
36
1 GND
2 Przycisk ON/OFF
3 Przycisk DÓŁ
4 Przycisk GÓRA
5 Przycisk Menu
LM74:
Złącze do podłączenia czujnika temperatury LM74
1 GND
2 V+
3 CS, wybór układu aktywny stanem niskim.
4 SC, zegar interfejsu
5 SI/O, dwukierunkowa linia danych
JTAG:
10 stykowe standardowe gniazdo interfejsu JTAG procesorów AVR wyposażonych w
taki interfejs.
1 TCK
2 GND
3 TDO
4 V+, napięcie zasilania układu docelowego
5 TMS
6 NSR, reset układu docelowego
7 VSP, zasilanie układu docelowego. Niepodłączone
8 NTR, niepodłączone
9 TDI
10 GND
Sterowanie:
1 Wyjście kolektora transoptora - układ rozprowadzania ciepła
2 Wyjście emitera transoptora - układ rozprowadzania ciepła
3 Wyjście kolektora transoptora - chłodzenie
4 Wyjście emitera transoptora - chłodzenie
5 Wyjście kolektora transoptora - grzanie
6 Wyjście emitera transoptora - grzanie
37
4. Działanie urządzenia
Oprogramowanie urządzenia składa się z dwóch zasadniczych części:
oprogramowania mikrokontrolera ATmega32 oraz programu kalibracyjnego na PC. Cześć
znajdująca się w mikrokontrolerze napisana jest w asemblerze, przy użyciu programu AVR
Studio w wersji 4.13b528. Kod składa się z 8 plików z kodem, 1 pliku z danymi (ciągi
znaków), które musza znaleźć się w pamięci mikrokontrolera i 1 pliku include z etykietami,
dostarczonego przez producenta oprogramowania. Poniżej opisane zostało działanie układu
wraz z dostępnymi trybami i sposobem ich użycia.
4.1. Globalne struktury danych.
W kodzie programu występuje kilka globalnych struktur danych, które są wykorzystywane
przez różne procedury. Dlatego wymagane jest ich osobne omówienie.
Zmienna stan, składa się z 1 bajtu, zlokalizowana jest w pamięci operacyjnej
mikrokontrolera. Poszczególne bity oznaczają:
B7 B6 B5 B4 B3 B2 B1 B0
- stp echo przepisz wyświetl praca chłodzenie grzanie
grzanie - praca modułu, ogrzewanie płynu
chłodzenie - praca modułu, ochładzanie płynu
praca - stan pracy urządzenia.
wyświetl - znacznik ustawiany, gdy zachodzi konieczność odświeżenia wyświetlacza w
pętli głównej programu.
przepisz - znacznik ustawiany po odebraniu tablicy poprawek do bufora, przepisanie do
EEPROM
echo - znacznik ustawiany po odebraniu żądania echo z interfejsu UART.
stp - praca w stabilizacji na ustalone punkty kalibracji.
Zmienne przechowujące wartości temperatury. Temperatura jest przechowywana na
dwóch bajtach, wyrównana do prawej, jako liczba stałoprzecinkowa z przecinkiem miedzy 4
a 5 bitem, kolejność big-endian.
temperaturaH:temperaturaL - temperatura zmierzona, wyrównana do prawej
38
tempKorH:tempKorL - temperatura zmierzona z poprawką korygującą
wskazanie termometru
tempStabH:tempStabL - żądana temperatura stabilizowana
Zmienna tablicowa poprawkiRAM umieszczona w pamięci operacyjnej. Ma długość
800 bajtów, stanowi bufor odbiorczy. Po odebraniu poprawek z interfejsu UART są one
przepisywane z tego bufora do pamięci EEPROM. Jest to spowodowane powolnym zapisem
do pamięci EEPROM. Każda poprawka jest przechowywana na 1 bajcie, przecinek podobnie
jak w przypadku temperatury między 4 a 5 bitem. Zakres poprawki mieści się zatem w
zakresie -8°C do +7,9375°C. Nie jest jednak możliwe wykorzystanie całego zakresu, gdyż
bajty o wartościach: 125, 126, 127 są specyficznymi znakami protokołu transmisji tablicy
poprawek. Powoduje to zawężenie dozwolonego zakresu do: -7,8125°C do +7,9375°C
Zmienna stanu services. Rozmiar zmiennej 1 bajt, istotne tylko 3 bity. Wskazują, która
temperatura jest stabilizowana w trybie stabilizacji na ustalone punkty.
B7 B6 B5 B4 B3 B2 B1 B0
temperatura A temperatura B temperatura C - - - - -
„1” na danym bicie oznacza wybór tej temperatury.
Tablica poprawki zlokalizowana jest w segmencie pamięci EEPROM. Jest ona
miejscem przechowywania tablicy kalibracji dla czujnika LM74. Zawiera 800 bajtów.
Zmienne tempA, tempB i tempC przechowują wartości, na które stabilizuje
temperaturę tryb stabilizacji na stale punkty. Znajdują się również w pamięci EEPROM. Są to
zmienne dwubajtowe, temperatura przechowywana jest podobnie, jak w przypadku wartości
temperatury w pamięci RAM.
4.2. Tryby pracy urządzenia.
Tryb podstawowy.
Urządzenie przeznaczone jest do pracy w kliku trybach. Taki sposób jest
uwarunkowany funkcjami, które musza się z znaleźć w projekcie. Bezpośrednio po włączeniu
zasilania urządzenie uruchamia się w trybie podstawowym. Jest to tryb stabilizacji
temperatury na zadaną przez użytkownika wartość. Temperatura pochodząca z czujnika jest w
tym trybie korygowana o poprawkę pochodzącą z tablicy poprawek z pamięci EEPROM.
39
W trybie tym tempo pracy urządzenia wyznacza licznik. Wykorzystany jest 16-bitowy
licznik numer 1. Jest on taktowany z wewnętrznego zegara procesora a częstotliwość dzielona
jest przez 64. Zatem przejście licznika przez cały zakres zajmuje 2^16*64 = 4194304 cykli,
co przy częstotliwości pracy 1MHz trwa około 4,2s. Licznik zgłasza przerwanie przy
przejściu przez 0 (przepełnienie). Procedura przerwania wykonuje następujące czynności:
- wywołuje procedurę odczytu temperatury z czujnika. Temperatura jest odczytywana,
wyrównywana do prawej, dodawana jest poprawka. Następnie wartość z poprawką i bez niej
zapisywana jest w j lokalizacji w pamięci. Jeżeli temperatura jest spoza zakresu objętego
poprawkami, dodawana jest wartość ostatniej poprawki najbliższej mierzonej temperaturze.
Zakres poprawek obejmuje 0-50°C. Czyli dla temperatur poniżej 0°C stosowana jest
poprawka dla 0°C, a dla temperatur powyżej 50°C poprawka dla 50°C. Urządzenie w
zasadzie nie jest przeznaczone do pracy w większym zakresie temperatur, nie mniej jednak
nie ma ograniczenia programowego.
- porównuje zmierzoną i skorygowaną temperaturę z zadaną i odpowiednio włącza bądź
wyłącza moduł Peltiera, lub zmienia kierunek jego pracy. Moduł jest wyłączany jedynie
wtedy, kiedy temperatury zadana i zmierzona są sobie równe. Razem z modułem włączana
jest również praca układu rozprowadzenia ciepła.
- ustawiany jest znacznik konieczności uaktualnienia treści wyświetlacza. Po wyjściu z
procedury obsługi przerwania w pętli głównej jest sprawdzany i uruchamiana jest procedura
wyświetlania.
Wyświetlacz w trybie podstawowym wygląda następująco:
T . a k t : ± X X . X X ° C Y
T . s t a b : ± X X . X X ° C
W miejscu znaków X wyświetlana jest wartość temperatury: w górnej linii aktualna w dolnej
żądana. W miejscu znaku Y wyświetlany jest symbol aktualnego stanu wyświetlacza:
- strzałka w lewo oznacza włączone chłodzenie
- strzałka w prawo oznacza włączone grzanie
- pozioma kreska oznacza, że płaszcz wodny osiągnął temperaturę żądaną i urządzenie nie
pracuje.
- litera o oznacza, że urządzenie oczekuje na wybór temperatury stabilizowanej i nie pracuje.
W tym trybie aktywne są wszystkie przyciski. Przycisk on/off umożliwia włączenie i
wyłączenie stabilizacji. Jednokrotne naciśnięcie zmienia tryb działania. Kiedy urządzenie jest
40
włączone nie jest możliwa zmiana zadanej temperatury. W celu zmiany należy przycisnąć
przycisk i wyłączyć stabilizatowanie temperatury. Kiedy stabilizowanie jest wyłączone, na
wyświetlaczu pokazuje się symbol o. Za pomocą przycisków GÓRA i DÓŁ możliwe jest
wtedy zmniejszanie lub zwiększanie żądanej temperatury. Wybór temperatury odbywa się z
rozdzielczością 1/16°C, z taką też rozdzielczością dokonywany jest pomiar. Po wybraniu
właściwej temperatury należy nacisnąć przycisk on/off, aby urządzenie rozpoczęło
stabilizację. Każdorazowe wciśnięcie przycisku GÓRA lub DÓŁ powoduje odświeżenie
zawartości wyświetlacza.
Przycisk MENU służy do wejścia do zaawansowanych opcji urządzenia. W celu
wejścia do zaawansowanych opcji należy wcisnąć i przytrzymać przycisk około 2 sekundy,
kiedy stabilizacja jest wyłączona. Przycisk MENU jest nieaktywny, kiedy urządzenie pracuje.
Tryb stabilizacji na stałe punkty i szybka kalibracja.
Urządzenie umożliwia pracę bez przeprowadzonej pełnej kalibracji, ale z
zachowaniem maksymalnej dokładności. Pozwala na to tryb stabilizacji na stałe punkty.
Możliwy jest wybór trzech punktów. Działanie tego trybu jest następujące. W pierwszej fazie
konieczna jest szybka kalibracja. Polega ona na ręcznym sterowaniu modułem w celu
doprowadzenia płynu do żądanej temperatury. Niezbędny do tego jest wzorcowy termometr.
Po osiągnięciu oczekiwanej temperatury urządzenie zapamiętuje wynik pomiaru. Wyniki są
zapamiętywane w pamięci nieulotnej i pozostają aktualne do momentu zastąpienia ich
nowymi. Możliwe jest zapamiętanie do trzech temperatur. W drugiej fazie należy wejść do
trybu stabilizacji temperatury na stałe punkty i wybrać jeden z trzech zapamiętanych
punktów. Urządzenie będzie się zachowywać identycznie, jak w trybie podstawowym, z tą
różnicą, ze należy dokonać wyboru jednej z trzech temperatur, które zostały uprzednio
zapamiętane, a nie wybrać dowolną temperaturę z rozdzielczością 1/16 °C.
Aby dokonać szybkiej kalibracji po wejściu do MENU należy wybrać przyciskami
GÓRA/DÓŁ opcję Kalibr. Na stale p. i zatwierdzić przyciskiem ON/OFF. Następnie
każdorazowe naciśnięcie tego przycisku przełącza kalibrowany punkt. W dolnej linii
wyświetlacza pokazują się kolejno punkty: Temperatura A, B, C. Ręczne sterowanie
modułem odbywa się za pomocą przycisków GÓRA/DÓŁ. Wciśnięcie przycisku góra (dół)
włącza ogrzewanie(chłodzenie), co jest potwierdzane wyświetleniem komunikatu w górnej
linii wyświetlacza. Ponowne wciśnięcie przycisku wyłącza moduł Peltiera, co jest również
sygnalizowane komunikatem na wyświetlaczu. Kiedy na termometrze wzorcowym
temperatura osiągnie żądaną wartość, należy nacisnąć przycisk MENU, co spowoduje
41
zapisanie w pamięci pomiaru. Na wyświetlaczu pokazuje się napis Zapamiętano. W tej chwili
danemu punktowi (A, B, C) zostaje przypisana zmierzona wartość. Aby rozpocząć pracę po
kalibracji należy ponownie uruchomić urządzenie.
Po ponownym uruchomieniu należy wejść do menu i wybrać pozycję Stab. na stale p.
Zatwierdzić przyciskiem ON/OFF. Następnie należy wybrać punkt, na który stabilizowana
będzie temperatura, za pomocą przycisków GÓRA/DÓŁ i włączyć urządzenie. Czynności
tych dokonuje się identycznie, jak w trybie podstawowym. Również symbol wskazujący na
stan urządzenia działa identycznie. Pomiar jest również dokonywany co około 4,2s przy
przerwaniu zgłaszanymi przez licznik. Kiedy stabilizacja jest wyłączona, możliwy jest powrót
do trybu podstawowego, poprzez wciśnięci e i przytrzymanie ok. 2 sek. Przycisku MENU.
Kalibracja po RS232.
Jak wspomniano już wielokrotnie w pracy, urządzenie do poprawnej pracy wymaga
kalibracji. Jest to związane ze zbyt dużą niedokładnością użytego czujnika LM74. Każdy
czujnik jest kalibrowany indywidualnie. Niezbędny jest referencyjny czujnik temperatury,
natomiast dla uproszczenia procedury nie są wymaganane źródła temperatury odniesienia o
określonej wartości. Celem procedury jest stworzenie tablicy poprawek, które będą dodawane
do pomiaru, celem uzyskania dokładnej wartości pomiaru. Obliczenie tablicy wykona
program w komputerze PC, a następnie prześle ją za pomocą interfejsu RS232 do urządzenia.
Kalibracja jest wykonywana funkcjami sklejanymi, przy użyciu wielomianów
pierwszego stopnia (liniowo).
W pierwszej kolejności należy sporządzić tabelę złożoną z par wyników: pomiaru
czujnikiem i termometrem referencyjnym i wprowadzić ją do programu dla komputera PC
dokonującego kalibracji. Im punktów będzie więcej i im będą bardziej równomiernie
rozłożone w przedziale temperatur, których pomiar zakłada projekt (10 °C-50 °C), tym
dokładniejsze będą wyniki.
W następnym kroku obliczana jest wartość różnic temperatury (poprawek dla każdego
zmierzonego punktu). Dla każdej pary sąsiadujących punktów wyznaczana jest metodą
interpolacji liniowej funkcja, postaci f(T) = m*TLM74 + b. Zwraca ona wielkość poprawki w
funkcji temperatury odczytanej przez czujnik. Parametry prostej wyznaczane są według
wzorów:
42
Gdzie: TLM47 – temperatura zmierzona przez czujnik LM74, Tr – temperatura zmierzona przez
termometr referencyjny, ΔT = Tr – TLM74, indeksy 1,2 oznaczają kolejne sąsiadujące ze sobą
punkty
Następnie na podstawie funkcji wyznaczana jest tabela poprawek. Obejmuje ona
zakres 0 do 50°C z krokiem 1/16°C, równym rozdzielczości czujnika. Dla każdej zmierzonej
wartości temperatury przez czujnik z podanego zakresu jest dostępna wartość poprawki.
Poprawki są następnie zapisywane w pamięci nieulotnej kontrolera, jako 8 bitowe,
stałoprzecinkowe liczby ze znakiem w systemie U2. Podczas pracy urządzenia poprawka jest
natychmiast dodawana do wyniku uzyskanego z pomiaru. W ten sposób uzyskiwana jest
temperatura Tr = TLM74 + ΔT. Rozmiar tablicy wynosi 800 bajtów (50 stopni, po 16 wartości
na każdy stopień).
W urządzeniu do pełnej kalibracji przewidziano dwa tryby. Oba są osiągalne z
MENU. Pierwszy tryb to: Pomiar bez korekcji. Po wejściu do tego trybu układ wyświetla
wartość temperatury prosto z czujnika bez uwzględniania żadnych poprawek z tablicy. Tryb
ten służy do sporządzenia tabeli temperatur zmierzonych przez czujnik i przez termometr
referencyjny. Tablica ta jest niezbędna w dalszej fazie kalibracji.
Drugi tryb to Kalibracja po RS232. W trybie tym urządzenie oczekuje na przesłanie po
złączu szeregowym tablicy poprawek z komputera PC. Został opracowany protokół
komunikacyjny i specjalny program na komputer PC. Interfejs RS232C jest zorientowany
bajtowo, toteż komendy sterujące protokołu mają rozmiar jednego bajtu. Są to:
- 125 – echo. Po otrzymaniu tej komendy urządzenie wysyła ciąg STPW vXXX, gdzie XXX
to wersja urządzenia. Ciąg jest zakończony bajtem o wartości 125. Prawidłowa odpowiedź
pozwala programowi stwierdzić, że urządzenie jest podłączone i działa.
- 126 – stop. Komenda ta oznacza koniec tablicy poprawek i nakazuje rozpoczęcie
przepisywania do pamięci nieulotnej.
- 127 – start. Komenda ta oznacza początek transmisji tablicy poprawek.
Prawidłowy ciąg transmisji wygląda następująco: start → 800 bajtów poprawek → stop.
Urządzenie odbierając dane zapisuje je w pamięci SRAM, ze względu na to, ze zapis w
pamięci EEPROM jest znacznie wolniejszy niż transmisja. Następnie po zakończeniu
transmisji tablica jest samoczynnie przepisywana do pamięci EEPROM, która jest nieulotna
po odłączeniu zasilania. Na wyświetlaczu ukazują się następujące komunikaty: Połączono –
43
po odebraniu komendy echo. Odebrano – po zakończeniu transmisji, Gotowe po przepisaniu
tablicy do pamięci EEPROM.
Transmisja odbywa się z prędkością 2400 bitów na sekundę i nie jest możliwa jej
zmiana. Dane są odbierane w procedurze przerwania. Zegar transmisji szeregowej jest
pobierany z wewnętrznego zegara procesora. Producent mikrokontrolera gwarantuje odchyłkę
nie większą niż 0,2% dla szybkości 2400bps, co jest wartością dopuszczalną w standardzie
UART.
Na komputer PC został opracowany program Kalibrator. Został napisany w języku C#
(Visual Studio 2008), do działania wymaga środowiska .NET Framework w wersji co
najmniej 2.0. Interfejs przedstawiony jest na ilustacji 16.
Rysunek 16. Interfejs programu kalibracyjnego
Po uruchomieniu ukazuje się główne okno programu. Z listy rozwijalnej należy
wybrać port COM, do którego jest podłączone urządzenie. Następnie, po kliknięciu Polacz,
pogram wyśle komendę echo do urządzenia. Jeśli dany port będzie niedostępny, w oknie
komunikacyjnym ukaże się komunikat błąd portu. Jeśli urządzenie odpowie prawidłowo
ukaże się wersja oprogramowania urządzenia i zostanie odblokowany przycisk Prześlij.
Następnie należy wprowadzić listę punktów kalibracyjnych z tabeli utworzonych w
pierwszej fazie. W okno T. ref. Należy wpisać temperaturę z termometru odniesienia, a w
okno T. LM74 wartość zmierzoną przez czujnik. Punkt należy zatwierdzić wciskając przycisk
Dodaj. Przyjecie punktu zostanie potwierdzone komunikatem. Kiedy zostaną dodane
wszystkie punkty, należy wcisnąć Zakończ. Program przygotuje wtedy tablicę poprawek w
pamięci. Wciśnięcie przycisku Prześlij spowoduje przesłanie tablicy poprawek do urządzenia.
44
Powodzenie procesu jest sygnalizowane przez wyświetlacz urządzenia w sposób opisany
powyżej.
Możliwe jest również wyzerowanie tablicy poprawek. Należy wówczas wcisnąć
przycisk Prześlij bez uprzedniego używania przycisku Zakończ. Spowoduje to
zaprogramowanie tablicy zerami.
Po przesłaniu tablicy i ponownym uruchomieniu urządzenia tablica poprawek jest
uwzględniana automatyczne. Zalecana jest okresowa kontrola czujnika poprzez porównanie z
termometrem referencyjnym ze względu na możliwość spadku dokładności na skutek
starzenia się elementów
45
5. Uruchomienie prototypu urządzenia
W celu przetestowania projektu skonstruowany został prototyp urządzenia według
założeń konstrukcyjnych opisanych powyżej. Urządzenie zostało złożone z płyty głównej,
płyty sterownika ze stopniem mocy z przekaźnikami, klawiatury, wyświetlacza, oraz
elementów wykonawczych. Elementy wykonawcze to moduł Peltiera o wymiarach 40x40mm,
pompa wodna mocy 5W zatapialna, przewody hydrauliczne, zbiornik (płaszcz wodny), oraz
blok wodny. Ogólny widok przedstawia ilustracja nr 17.
Rysunek 17. Widok ogólny prototypu urządzenia
Na ilustracji widoczne są wszystkie elementy. Czujnik temperatury umieszczony
jest na wymienniku ciepła. Moduł Peltiera umieszczony jest pomiędzy blokiem wodnym a
radiatorem. Zarówno blok wodny, jak i wentylator z radiatorem to typowe elementy
używane do chłodzenia procesów komputerów PC. Pompka umieszczona jest w
zbiorniku. Tłoczy przewodem płyn do wymiennika, który oddaje lub odbiera ciepło od
modułu Peltiera. Następnie drugim przewodem płyn powraca do zbiornika. Szczegółowy
widok wymiennika ciepła przedstawiony jest na ilustracji 18, a zbiornik wraz z pompą na
ilustracji 19. Całość została zasilona z zasilacza PC AT o mocy 200W.
46
Rysunek 18. Wymiennik ciepła
Rysunek 19. Zbiornik (płaszcz wodny)
47
Urządzenie zostało uruchomione i przetestowano poszczególne tryby. Zostały także
sprawdzone maksymalna i minimalna, możliwa do uzyskania temperatura oraz parametry
elektryczne modułu.
Urządzenie pracowało poprawnie w zakresie sterowania modułem w zależności od
temperatury. Poprawnie pracowały wszystkie tryby. Podczas ciągłej pracy modułu przy
temperaturze otoczenia około 24ºC minimalna temperatura płaszcza wyniosła 19 ºC a
najwyższa 38 ºC. Należy dodać, ze w obiegu pozostawało około 0,5dm3 cieczy, a zbiornik
miał izolację termiczną. Na fotografii, dla celów ilustracyjnych, izolacji nie ma, aby
umożliwić pokazanie wszystkich elementów wewnątrz zbiornika. Izolacja jest jednak
niezbędna, do uzyskania wymienionych wyżej rezultatów. Napięcie na module wyniosło
11,5V, a prąd około 1,2A. Zrobiono także próbę przy napięciu modułu 16V, prąd ustalił się na
poziomie 1,5A, ale nie uzyskano lepszych wyników w zakresie chłodzenia. Wydajność
chłodzenia ogranicza także zanurzona pompa, która do chłodzenia mechanizmów używa
wody, którą pompuje.
Zakres temperatur uzyskiwanych przez urządzenie jest związany z jego mocą i
jakością wymienników ciepła. Urządzenie pełnowymiarowe z pewnością wymaga użycia
elementów większej mocy, natomiast nie jest wymagana modyfikacja sterownika. W obliczu
uzyskanych wyników uruchomienie należy uznać za udane.
48
6. Podsumowanie
Wynikiem pracy jest zaprogramowany i uruchomiony stabilizator temperatury
płaszcza wodnego, wykorzystujący moduł Peltiera, jako element transportujący aktywnie
ciepło. Do układu został również stworzony komplet narzędzi służących kalibracji.
Urządzenie zostało zaprogramowane przy pomocy interfejsu JTAG, którego złącze
zostało umieszczone na płycie w celu umożliwienia modyfikacji już uruchomionego
urządzenia.
Całość jest zmontowana na płycie zaprojektowanej specjalnie dla tego celu,
wykonanej na zlecenie. Umieszczenie złącz wszystkich elementów interfejsu użytkownika
oraz złącz urządzeń zewnętrznych na płycie umożliwia dużą elastyczność przy wyborze
obudowy.
Stabilizator temperatury płaszcza wodnego wg. powyższego projektu działa
poprawnie. Sterownik jest uniwersalny i może służyć do sterowania urządzeniem w dowolnej
skali. Wydajność stabilizacji zależy od wielkości modułu, ale także od izolacji połączeń
termicznych oraz jakości wymiany ciepła z płynem i otoczeniem. Z podstawowych
spostrzeżeń powstałych w czasie realizacji pracy wymienić należy:
- moduł pracujący z mocą około 15W jest w stanie stabilizować temperaturę
niewielkich ilości płynu (około 0,5l) w zakresie zbliżonym do temperatury pokojowej (zakres
około 20 - 35°C)
- użycie cyfrowego czujnika temperatury jest wygodnym sposobem pomiaru przy
użyciu mikroprocesora. Należy pamiętać, że kondensator odsprzęgający musi być w możliwie
małej, nieprzekraczającej kilku cm, odległości od układu. Jego brak powoduje zakłócenia w
funkcjonowaniu wewnętrznego przetwornika i znaczne zafałszowanie wyniku.
- wbudowana pamięć EEPROM w procesor jest idealnym sposobem przechowywania
małych ilości nieulotnych danych, ze względu na prosty, bajtowy dostęp. Należy jednak
zawsze brać pod uwagę czas programowania, który jest stosunkowo długi i może być
krytyczny przy niektórych zastosowaniach, jak np. transmisja szeregowa.
- praca układu cyfrowego nie jest zakłócana przez pracujące cewki przekaźników,
nawet, jeżeli zasilane są z jednej linii. Zastosowanie izolacji optycznej toru sterującego jest
wystarczające. Zaprojektowany układ umożliwia jednak zastosowanie niezależnych,
izolowanych linii do zasilania części logicznej oraz zasilania modułu Peltiera i sterownika.
49
Układ może stanowić platformę do rozwoju i modyfikacji podobnych projektów.
Procesor posiada niezablokowaną pamięć FLASH i wyprowadzony interfejs JTAG, dzięki
czemu możliwe są modyfikacje w układzie w zakresie na jaki pozwala konstrukcja
elektryczna.
50
Spis ilustracji
Rysunek 1. Widok ogólny modułu Peltiera [6] .................................................................. 13
Rysunek 2. Jean Charles Athanase Peltier [1] .................................................................... 14
Rysunek 3. Budowa ogniwa Peltiera [5] ............................................................................ 15
Rysunek 4. Przekrój przez moduł Peltiera [5] .................................................................... 15
Rysunek 5. Schemat blokowy projektowanego urządzenia ............................................... 19
Rysunek 6. ATmega16 i ATmega32 .................................................................................. 21
Rysunek 7. Układ LM74 .................................................................................................... 23
Rysunek 8. Uproszczony schemat blokowy układu LM74 ................................................ 24
Rysunek 9. Przebieg sygnałów podczas odczytu temperatury z układu LM74. ................ 24
Rysunek 10. Schemat sondy temperatury .......................................................................... 26
Rysunek 11. Wyświetlacz HD44780 ................................................................................. 27
Rysunek 12. Schemat sterownika modułu Peltiera ............................................................ 30
Rysunek 13. Schemat systemu rozprowadzania ciepła ...................................................... 31
Rysunek 14. Schemat ideowy urządzenia .......................................................................... 33
Rysunek 15. Schemat montażowy urządzenia ................................................................... 34
Rysunek 16. Interfejs programu kalibracyjnego ................................................................ 43
Rysunek 17. Widok ogólny prototypu urządzenia ............................................................. 45
Rysunek 18. Wymiennik ciepła ......................................................................................... 46
Rysunek 19. Zbiornik (płaszcz wodny) .............................................................................. 46
51
Bibliografia
1. Encyklopedia Britannica, www.britannica.com
2. Encyklopedia Powszechna PWN, Państwowe Wydawnictwo Naukowe, Warszawa
1984
3. A.Jankowski, Ocena możliwości wykorzystania termoelektrycznych baterii
chłodniczo-grzejnych do klimatyzacji pojazdów,
http://www.mech.pg.gda.pl/ktc/wtargans/osiagi/Jankowski_chlodnictwo.pdf,
Politechnika Gdańska
4. Mała Encyklopedia Techniczna, Państwowe Wydawnictwo Naukowe, Warszawa 1969
5. Ogniwa Peltiera, Elektronika dla wszystkich 7/97, 1997
6. Z. Orłowski, Chłodziarka do piwa, Elektronika dla wszystkich 6/97, 1997
7. P. Piekarczyk, Pomiary niskich temperatur czujnikami cyfrowymi, Poznańskie
Warsztaty Telekomunikacyjne, Poznań 2004.
Karty katalogowe i noty aplikacyjne:
8. Karta termistora
9. Karta układu AD590, www.analog.com
10. Karta układu ATmega32, www.atmel.com
11. Karta układu DS 1620, www.maxim-ic.com
12. Karta układu DS 1621, www.maxim-ic.com
13. Karta układu DS. 18B20, www.maxim-ic.com
14. Karta układu LM35, www.national.com
15. Karta układu LM45, www.national.com
16. Karta układu LM72, www.national.com
17. Karta układu LM74, www.national.com
18. Karta układu LM92, www.national.com
19. Karta układu LM335, www.st.com
20. Karta układu MAX6575, www.maxim-ic.com
21. Karta układu MAX 7500, www.maxim-ic.com
22. Karta układu SMT160-30, www.smartec.nl
23. Karta układu TMP01, www.analog.com
24. Nota aplikacyjna avr200, www.atmel.com
52
Załączniki
Kod programu dla procesora ATmega.
plik main.asm
;-----------------------------------------
; Stabilizator temperatury płaszcza wodnego
; Łukasz Trojanowski
; Politechnika Warszawska
; Wieczorowe Studia Zawodowe
; -Informatyka
; Warszawa 2008
;-----------------------------------------
.include "m32def.inc"
;-----------------------------------------
; Definicje przycisków
;-----------------------------------------
.equ kal = 7 ;przyciski
.equ up = 6
.equ down = 5
.equ onoff = 4
;-----------------------------------------
; Zmienne globalne w SRAM
.dseg
;-----------------------------------------
temperaturaH: .byte 1 ;temperatura zmierzona wyrownana do prawej
temperaturaL: .byte 1
tempKorH: .byte 1 ;temperatura zmierzona z poprawką
tempKorL: .byte 1
tempStabH: .byte 1 ;temperatura stabilizowana
tempStabL: .byte 1
stan: .byte 1
.equ grzanie = 0 ;wlaczenie grzania
.equ chlodzenie = 1 ;wlaczenie chlodzenia
.equ praca = 2 ;praca urzadzenia
.equ wyswietl =3 ;koniecznosc uaktualnienia wyswietlacza
.equ przepisz = 4; przepisz poprawki do eeprom
.equ echo = 5; ;odpowiedz
.equ stp = 6;
serviceS: .byte 1
.equ tA = 7
.equ tB = 6
.equ tC = 5
poprawkiRAM: .byte 800
;-----------------------------------------
; Zmienne w pamięci EEPROM
.eseg
;-----------------------------------------
poprawki: .byte 800
53
tempA: .byte 2
tempB: .byte 2
tempC: .byte 2
;-----------------------------------------
; Kod wykonywalny
.cseg
;-----------------------------------------
.org 0
rjmp RESET
.org OVF1addr
jmp TIM1_OVF
.org URXCaddr
jmp USART_RXC
.org $02a
RESET:
;-----------------------------------------
; Wskaźnik stosu
;-----------------------------------------
clr r16
sts stan,r16
ldi r16,high(RAMEND)
out sph,r16
ldi r16,low(RAMEND)
out spl,r16
.include "init44780.asm" ;inicjalizacja wyswietlacza
ldi ZH,high(czekaj*2)
ldi ZL,low(czekaj*2)
call WriteL
;ustawienie portu A
;0 - data
;1 - clock
;2 - -CS
;-----------------------------------------
; Konfiguracja klawiatury
;-----------------------------------------
ldi r16,0b00000110
out ddra,r16
ldi r16,0b11110100
out porta,r16 ;wlaczenie rezystorow pullup i stan H na -CS
ldi r16,0b11100000 ;ustawienie wyjsc sterujacych portu D
out portd,r16
out ddrd, r16
;-----------------------------------------
; Inicjalizacja TimeraB
; prescaler 16, przerwanie co ok. 4,5 sek.
;-----------------------------------------
ldi r16,0b00000011
out TCCR1B,r16
in r16,TIMSK
sbr r16,0b00000100
out TIMSK,r16
ldi r16,0xF0
54
ser r17
out TCNT1H,r16
out TCNT1L,r17
;-----------------------------------------
; Wstepne ustawienie temp. stabilizowanej
;-----------------------------------------
ldi r16,0x01
sts tempStabH,r16
ldi r16,0x50
sts tempStabL,r16
sei
;-----------------------------------------
; Petla główna
mlop:
;-----------------------------------------
lds r16,stan
sbrc r16,wyswietl
call print_main
sbrc r16,praca
rjmp mlop2
sbis pina,up
call zwieksz
sbis pina,down
call zmniejsz
sbis pina,kal
jmp Menu
mlop2:
sbis pina,onoff
call on_off
rjmp mlop
on_off:
cli
lds r16,stan
ldi r17,0b100
eor r16,r17
sts stan,r16
ldi r18,200
call Wait
;-----------------------------------------
; Przerwanie overflow Timera B
TIM1_OVF:
;-----------------------------------------
push r16
push r17
call readLM74
lds r16,stan
sbr r16,(1<<wyswietl)
sts stan,r16
sbrs r16,praca
jmp TIM1_OVFwsamraz
lds r16,stan
sbrc r16,stp
rjmp Tstp
lds r16,tempKorL
lds r17,tempKorH
lds r22,tempStabL
lds r23,tempStabH
TIM1_OVF1:
cp r17,r23
55
breq TIM1_OVFporown1
brge TIM1_OVFzacieplo
brlt TIM1_OVFzazimno
TIM1_OVFporown1:
cp r16,r22
breq TIM1_OVFwsamraz
brsh TIM1_OVFzacieplo
brlo TIM1_OVFzazimno
TIM1_OVFzazimno:
lds r16,stan
cbr r16,(1<<chlodzenie)
sbr r16,(1<<grzanie)
sts stan,r16
sbi portd,(5+chlodzenie)
cbi portd,(5+praca)
cbi portd,(grzanie+5)
rjmp TIM1_OVFporown2
TIM1_OVFzacieplo:
lds r16,stan
cbr r16,(1<<grzanie)
sbr r16,(1<<chlodzenie)
sts stan,r16
sbi portd,(5+grzanie)
cbi portd,(5+praca)
cbi portd,(chlodzenie+5)
rjmp TIM1_OVFporown2
TIM1_OVFwsamraz:
lds r16,stan
cbr r16,(1<<grzanie)
cbr r16,(1<<chlodzenie)
sts stan,r16
sbi portd,(5+grzanie)
sbi portd,(5+praca)
sbi portd,(chlodzenie+5)
rjmp TIM1_OVFporown2
TIM1_OVFporown2:
pop r17
pop r16
reti
Tstp:
lds r16,serviceS
sbrc r16,tA
rjmp TstpA
sbrc r16,tB
rjmp TstpB
sbrc r16,tC
rjmp TstpC
TstpA:
ldi XL,low(tempA)
ldi XH,high(tempA)
rjmp Tstp2
TstpB:
ldi XL,low(tempB)
ldi XH,high(tempB)
rjmp Tstp2
TstpC:
ldi XL,low(tempC)
ldi XH,high(tempC)
rjmp Tstp2
Tstp2:
out EEARL,XL
out EEARH,XH
sbi EECR,EERE
in r22,EEDR
adiw XL,1
56
out EEARL,XL
out EEARH,XH
sbi EECR,EERE
in r23,EEDR
lds r16,temperaturaL
lds r17,temperaturaH
rjmp TIM1_OVF1
;-----------------------------------------
; Przerwanie odbioru z UART
USART_RXC:
;-----------------------------------------
in r16,UDR
cpi r16,127
breq USART_RXC_start
cpi r16,126
breq USART_RXC_stop
cpi r16,125
breq USART_RXC_echo
USART_RXC_zapisz:
st X+,r16
reti
USART_RXC_start:
ldi XL,low(poprawkiRAM)
ldi XH,high(poprawkiRAM)
reti
USART_RXC_stop:
lds r16,stan
sbr r16,(1<<przepisz)
sts stan,r16
reti
USART_RXC_echo:
lds r16,stan
sbr r16,(1<<echo)
sts stan,r16
reti
;-----------------------------------------
; Odczyt z czujnika LM 74
; Wyrównanie i korekcja wyniku
readLM74:
;-----------------------------------------
cbi porta,1
cbi porta,2
clr r0
clr r1
clr r16
LM74:
lsl r0
sbic pina,0
inc r0
inc r16
sbi porta,1
nop
cbi porta,1
cpi r16,8
brne LM74
LM74_2:
lsl r1
sbic pina,0
inc r1
inc r16
sbi porta,1
57
nop
cbi porta,1
cpi r16,16
brne LM74_2
sbi porta,2
wyrownajR: ;wyrownuje wynik do prawej.
ldi r16,3
wyrownajR_1:
clc
sbrc r0,7
sec
ror r0
ror r1
dec r16
brne wyrownajR_1
sts temperaturaH,r0
sts temperaturaL,r1
koryguje:
lds YH,temperaturaH
lds YL,temperaturaL
ldi r16,low(50*16)
sub YL,r16
ldi r16,high(50*16)
sbc YH,r16
brpl koryguje_zaduzo
lds YH,temperaturaH
lds YL,temperaturaL
clr r16
sub YL,r16
sbc YH,r16
brmi koryguje_zamaly
ldi XL,low(poprawki)
ldi XH,high(poprawki)
add XL,YL
adc XH,YH
rjmp koryguje_odczyt
koryguje_zamaly:
ldi XL,low(poprawki)
ldi XH,high(poprawki)
rjmp koryguje_odczyt
koryguje_zaduzo:
ldi XL,low(poprawki+50*16)
ldi XH,high(poprawki+50*16)
koryguje_odczyt:
sbic EECR,EEWE
rjmp koryguje_odczyt
out EEARL,XL
out EEARH,XH
sbi EECR,EERE
in r16,EEDR
clr r17
sbrc r16,7
ser r17
lds YH,temperaturaH
lds YL,temperaturaL
add YL,r16
adc YH,r17
sts tempKorH,YH
sts tempKorL,YL
58
ret
.include "service.asm"
.include "klawiatura.asm"
.include "print.asm"
.include "eeprom.asm"
.include "44780.asm"
.include "div16u.asm"
.include "etykiety.inc"
plik service.asm
;-----------------------------------------
; Wejscie do Menu
;-----------------------------------------
Menu:
cli
ldi r16,5
Menu2:
sbic pina,kal
jmp Menu_wyjscie
push r16
ldi r18,250
call Wait
pop r16
dec r16
brne Menu2
rjmp Menu_Entrypoint
Menu_wyjscie:
lds r16,stan
sbr r16,(1<<wyswietl)
sts stan,r16
jmp mlop
Menu_Entrypoint:
cli
ldi r16,1
call writeI
ldi ZH,high(menuL*2)
ldi ZL,low(menuL*2)
call WriteL
ldi r16,0b11000000
call writeI
ldi ZH,high(stabstp*2)
ldi ZL,low(stabstp*2)
call WriteL
clr r16
sts serviceS, r16
Menu_loop:
sbis pina,up
rjmp Menu_Up
sbis pina,down
rjmp Menu_Down
sbis pina,onoff
rjmp Wybor
sbis pina,kal
call Exit
59
rjmp Menu_loop
Menu_Down:
lds r16,serviceS
dec r16
cpi r16,0xFF
brne Menu_Zmien
ldi r16,3
rjmp Menu_Zmien
Menu_Up:
lds r16,serviceS
inc r16
cpi r16,4
brne Menu_Zmien
clr r16
Menu_Zmien:
sts serviceS,r16
cpi r16,0
breq Zstabstp
cpi r16,1
breq Zpombezkor
cpi r16,2
breq Zkalibracja1
cpi r16,3
breq Zrs232
Zstabstp:
ldi r16,0b11000000
call writeI
ldi ZH,high(stabstp*2)
ldi ZL,low(stabstp*2)
call WriteL
ldi r18,150
call Wait
rjmp Menu_loop
Zpombezkor:
ldi r16,0b11000000
call writeI
ldi ZH,high(bezkor*2)
ldi ZL,low(bezkor*2)
call WriteL
ldi r18,150
call Wait
rjmp Menu_loop
Zkalibracja1:
ldi r16,0b11000000
call writeI
ldi ZH,high(kalibracja1*2)
ldi ZL,low(kalibracja1*2)
call WriteL
ldi r18,150
call Wait
rjmp Menu_loop
Zrs232:
ldi r16,0b11000000
call writeI
ldi ZH,high(rs232*2)
ldi ZL,low(rs232*2)
call WriteL
ldi r18,150
call Wait
rjmp Menu_loop
60
Wybor:
lds r16,serviceS
cpi r16,3
breq Proc_rs232a
cpi r16,2
breq Proc_Kalibracja1a
cpi r16,1
breq Proc_bezkor
cpi r16,0
breq Proc_stabstp
Proc_rs232a:
jmp Proc_rs232
Proc_Kalibracja1a:
jmp Proc_Kalibracja1
;-----------------------------------------
; Pomiar bez korekcji
;-----------------------------------------
Proc_bezkor:
call readLM74
ldi r16,1
call WriteI
ldi ZH,high(temperatura*2)
ldi ZL,low(temperatura*2)
call WriteL
ldi r16,0b11000000
call WriteI
call printTemp
ldi r16,0b11011111
call WriteD
ldi r16,'C'
call WriteD
ldi r17,8
sbis pina,kal
call Exit
Proc_bezkor1:
ldi r18,254
call Wait
dec r17
brne Proc_bezkor1
rjmp Proc_bezkor
;-----------------------------------------
; Stabilizacja na stałe punkty
;-----------------------------------------
Proc_stabstp:
sbr r16,0b00000100
out TIMSK,r16
lds r16,stan
sbr r16,(1<<stp)
sts stan,r16
lds r16,serviceS
sbr r16,(1<<tA)
sts serviceS,r16
sei
Proc_stabstp3:
lds r16,stan
sbrc r16,wyswietl
call print_stp
sbrc r16,praca
rjmp Proc_stabstp2
sbis pina,up
61
call stp_zmien
sbis pina,down
call stp_zmien
sbis pina,kal
call Exit
Proc_stabstp2:
sbis pina,onoff
call on_off
rjmp Proc_stabstp3
stp_zmien:
ldi r18,254
call Wait
lds r16,stan
sbr r16,(1<<wyswietl)
sts stan,r16
lds r16,serviceS
sbrc r16,tA
jmp B1
sbrc r16,tB
jmp C1
sbrc r16,tC
jmp A1
A1:
sbr r16,(1<<tA)
cbr r16,(1<<tC)
sts serviceS,r16
ret
B1:
sbr r16,(1<<tB)
cbr r16,(1<<tA)
sts serviceS,r16
ret
C1:
sbr r16,(1<<tC)
cbr r16,(1<<tB)
sts serviceS,r16
ret
;-----------------------------------------
; Kalibracja na stałe punkty
;-----------------------------------------
Proc_Kalibracja1:
cli
ldi r16,1
call WriteI
ldi r18,250
call Wait
ldi r16,0b10000000
sts serviceS,r16
ldi ZH,high(wybierz*2)
ldi ZL,low(wybierz*2)
call WriteL
ldi r16,0b11000000
call WriteI
ldi ZH,high(temperatura*2)
ldi ZL,low(temperatura*2)
call WriteL
ldi r16,'A'
call WriteD
Proc_Kalibracja2:
62
sbis pina,up
call Proc_grzej
sbis pina,down
call Proc_chlodz
sbis pina,kal
call Proc_zapamietaj
sbis pina,onoff
call Proc_zmientmp
rjmp Proc_Kalibracja2
Proc_grzej:
lds r16,stan
clr r17
sbr r17,(1<<grzanie)
eor r16,r17
cbr r16,(1<<chlodzenie)
sbi portd,(5+chlodzenie)
sbrs r16,grzanie
rjmp Proc_grzej1
cbi portd,(5+praca)
cbi portd,(grzanie+5)
sbr r16,(1<<praca)
rjmp Proc_grzej2
Proc_grzej1:
sbi portd,(5+praca)
sbi portd,(grzanie+5)
cbr r16,(1<<praca)
Proc_grzej2:
sts stan,r16
call Proc_LCD
ldi r18,254
call Wait
ret
Proc_chlodz:
lds r16,stan
clr r17
sbr r17,(1<<chlodzenie)
eor r16,r17
cbr r16,(1<<grzanie)
sbi portd,(5+grzanie)
sbrs r16,chlodzenie
rjmp Proc_chlodz1
cbi portd,(5+praca)
cbi portd,(chlodzenie+5)
sbr r16,(1<<praca)
rjmp Proc_chlodz2
Proc_chlodz1:
sbi portd,(5+praca)
sbi portd,(chlodzenie+5)
cbr r16,(1<<praca)
Proc_chlodz2:
sts stan,r16
call Proc_LCD
ldi r18,254
call Wait
ret
Proc_zmientmp:
call stp_zmien
call zmienLCD
ret
Proc_zapamietaj:
63
ldi r18,254
call Wait
lds r16,serviceS
ldi r17,0b11100000
and r16,r17
cpi r16,0b10000000
breq Proc_zapamietajA
cpi r16,0b01000000
breq Proc_zapamietajB
cpi r16,0b00100000
breq Proc_zapamietajC
Proc_zapamietajA:
ldi YH,high(tempA)
ldi YL,low(tempA)
rjmp Proc_zapamietaj2
Proc_zapamietajB:
ldi YH,high(tempB)
ldi YL,low(tempB)
rjmp Proc_zapamietaj2
Proc_zapamietajC:
ldi YH,high(tempC)
ldi YL,low(tempC)
rjmp Proc_zapamietaj2
Proc_zapamietaj2:
sbic EECR,EEWE
rjmp Proc_zapamietaj2
push YL
push YH
call readLM74
pop YH
pop YL
lds r16,temperaturaL
out EEARH,YH
out EEARL,YL
out EEDR,r16
sbi EECR,EEMWE
sbi EECR,EEWE
Proc_zapamietaj3:
sbic EECR,EEWE
rjmp Proc_zapamietaj3
lds r16,temperaturaH
adiw YL,1
out EEARH,YH
out EEARL,YL
out EEDR,r16
sbi EECR,EEMWE
sbi EECR,EEWE
ldi r16,0b11000000
call WriteI
ldi ZH,high(zapamietano*2)
ldi ZL,low(zapamietano*2)
call WriteL
ret
Proc_LCD:
ldi r16,0b10000000
call WriteI
lds r16,stan
sbrs r16,praca
rjmp Proc_LCDstop
sbrs r16,grzanie
rjmp Proc_LCDchlodzenie
rjmp Proc_LCDgrzanie
Proc_LCDchlodzenie:
ldi ZH,high(chlodzenieL*2)
64
ldi ZL,low(chlodzenieL*2)
call WriteL
ret
Proc_LCDgrzanie:
ldi ZH,high(grzanieL*2)
ldi ZL,low(grzanieL*2)
call WriteL
ret
Proc_LCDstop:
ldi ZH,high(stop*2)
ldi ZL,low(stop*2)
call WriteL
ret
zmienLCD:
ldi r16,0b11000000
call WriteI
ldi ZH,high(temperatura*2)
ldi ZL,low(temperatura*2)
call WriteL
lds r17, serviceS
sbrc r17,tA
ldi r16,'A'
sbrc r17,tB
ldi r16,'B'
sbrc r17,tC
ldi r16,'C'
call WriteD
ret
;-----------------------------------------
; Kalibracja po RS232
;-----------------------------------------
Proc_rs232:
clr r16 ;wyłączenie przerwań timera
out TIMSK,r16
ldi r16,1
call WriteI
ldi ZH,high(kalibracja*2)
ldi ZL,low(kalibracja*2)
call WriteL
ldi r16,0 ;inicjalizacja UARTu
out UBRRH,r16
ldi r16,0b10000110
out UCSRC,r16
ldi r16,25
out UBRRL,r16
cbi UCSRB,UCSZ2
sbi UCSRB,RXCIE
sbi UCSRB,RXEN
sbi UCSRB,TXEN
sei
Kalibmode1:
lds r15,stan
sbrc r15,przepisz
rjmp przepiszE
sbrc r15,echo
rjmp echoE
sbis pina,kal
call Exit
jmp Kalibmode1
przepiszE:
cli
65
lds r16,stan
cbr r16,(1<<przepisz)
sts stan,r16
ldi r16,1
call WriteI
ldi ZH,high(odebrano*2)
ldi ZL,low(odebrano*2)
call WriteL
ldi XL,low(poprawkiRAM)
ldi XH,high(poprawkiRAM)
ldi YL,low(poprawki)
ldi YH,high(poprawki)
clr ZH
clr ZL
przepiszE1:
sbic EECR,EEWE
rjmp przepiszE1
ld r16,X+
out EEARH,YH
out EEARL,YL
out EEDR,r16
sbi EECR,EEMWE
sbi EECR,EEWE
adiw YL,1
adiw ZL,1
cpi ZH,0x3
brne przepiszE1
cpi ZL,0x20
brne przepiszE1
ldi r16,1
call WriteI
ldi ZH,high(gotowe*2)
ldi ZL,low(gotowe*2)
call WriteL
sei
rjmp Kalibmode1
echoE:
cli
lds r16,stan
cbr r16,(1<<echo)
sts stan,r16
ldi r16,1
call WriteI
ldi ZH,high(polaczono*2)
ldi ZL,low(polaczono*2)
call WriteL
ldi ZH,high(echoF*2)
ldi ZL,low(echoF*2)
call sendL
sei
rjmp Kalibmode1
sendL:
lpm r16,Z+
cpi r16,0
breq SendLend
SendL1:
sbis UCSRA,UDRE
rjmp SendL1
out UDR,r16
rjmp sendL
SendLend:
ret
;-----------------------------------------
; Powrot do trybu podstawowego
;-----------------------------------------
66
Exit:
cli
ldi r16,5
Exit2:
sbic pina,kal
jmp Exit3
push r16
ldi r18,250
call Wait
pop r16
dec r16
brne Exit2
jmp RESET
Exit3:
sei
ret
plik klawiatura.asm
;-----------------------------------------
; Procedury obsługi przycisków z pętli głownej
;-----------------------------------------
zwieksz:
ldi r18,10 ;ustabilizowanie stykow
call Wait
lds XL,tempStabL
lds XH,tempstabH
adiw XL,1
sts tempStabL,XL
sts tempStabH,XH
call print_main ;pierwsza reakcja na przycisk
ldi r18,255
zwieksz_Wait2:
ldi r17,255
zwieksz_Wait1: ;oczekiwanie na zwolnienie przycisku, ca 400ms
sbic pina,up
ret
nop
nop
dec r17
brne zwieksz_Wait1
dec r18
brne zwieksz_Wait2
zwieksz2: ;jesli przycisk nie zostal zwolniony - seria
lds XL,tempStabL
lds XH,tempstabH
adiw XL,1
sts tempStabL,XL
sts tempStabH,XH
call print_main
ldi r18,20
call Wait
sbis pina,up
rjmp zwieksz2
ret
zmniejsz:
ldi r18,10
call Wait
lds XL,tempStabL
lds XH,tempstabH
67
sbiw XL,1
sts tempStabL,XL
sts tempStabH,XH
call print_main
ldi r18,255
zmnijesz_Wait2:
ldi r17,255
zmnijesz_Wait1:
sbic pina,down
ret
nop
nop
dec r17
brne zmnijesz_Wait1
dec r18
brne zmnijesz_Wait2
zmnijesz2:
lds XL,tempStabL
lds XH,tempstabH
sbiw XL,1
sts tempStabL,XL
sts tempStabH,XH
call print_main
ldi r18,20
call Wait
sbis pina,down
rjmp zmnijesz2
ret
plik print.asm
printTemp:
lds dd16uL, temperaturaL
lds dd16uH, temperaturaH
rjmp printTemp1
printTempKor:
lds dd16uL, tempKorL
lds dd16uH, tempKorH
rjmp printTemp1
printTempStab:
lds dd16uL, tempStabL
lds dd16uH, tempStabH
printTemp1:
tst dd16uH
brmi printTempMinus
push r16
push r17
ldi r16,'+'
call WriteD
pop r17
pop r16
rjmp printTemp5
printTempMinus:
push r16
push r17
ldi r16,'-'
call WriteD
pop r17
pop r16
com dd16uL
68
com dd16uH
clr drem16uL
inc drem16uL
add dd16uL,drem16uL
clr drem16uL
adc dd16uH,drem16uL
printTemp5:
ldi dv16uH,0x6
ldi dv16uL,0x40
call div16u
mov r16,dd16uL
tst r16 ;pomijanie pierwszego nieznaczacego zera
breq printTemp4
ldi r17,'0'
add r16,r17
call WriteD
printTemp4:
mov dd16uH,drem16uH
mov dd16uL,drem16uL
clr dv16uH
ldi dv16uL,0xA0
call div16u
mov r16,dd16uL
ldi r17,'0'
add r16,r17
call WriteD
mov dd16uH,drem16uH
mov dd16uL,drem16uL
clr dv16uH
ldi dv16uL,16
call div16u
mov r16,dd16uL
ldi r17,'0'
add r16,r17
call WriteD
ldi r16,'.'
call WriteD
ldi ZH,high(poprzecinku*2)
ldi ZL,low(poprzecinku*2)
lsl drem16uL
lsl drem16uL
clr r16
add r30,drem16uL
adc r31,r16
call WriteL
ret
print_main:
lds r16,stan
cbr r16,(1<<wyswietl)
sts stan,r16
ldi r16,1
call WriteI
ldi ZH,high(tAkt*2)
ldi ZL,low(tAkt*2)
call WriteL
call printTempKor
ldi r16,0b11011111
call WriteD
ldi r16,'C'
call WriteD
strzalki:
ldi r16,0b10010011
call WriteI
lds r16,stan
sbrs r16,praca
rjmp print_off
69
sbrc r16,grzanie
rjmp print_grzanie
sbrc r16,chlodzenie
rjmp print_chlodzenie
ldi r16,'-'
call WriteD
rjmp print_main2
print_grzanie:
ldi r16,0b01111110
call WriteD
rjmp print_main2
print_chlodzenie:
ldi r16,0b01111111
call WriteD
rjmp print_main2
print_off:
ldi r16,'o'
call WriteD
rjmp print_main2
print_main2:
lds r16,stan
sbrc r16,stp
ret
ldi r16,0b11000000
call WriteI
ldi ZH,high(tStab*2)
ldi ZL,low(tStab*2)
call WriteL
call printTempStab
ldi r16,0b11011111
call WriteD
ldi r16,'C'
call WriteD
ret
print_stp:
lds r16,stan
cbr r16,(1<<wyswietl)
sts stan,r16
ldi r16,1
call WriteI
ldi ZH,high(temperatura*2)
ldi ZL,low(temperatura*2)
call WriteL
lds r17,serviceS
sbrc r17,tA
ldi r16,'A'
sbrc r17,tB
ldi r16,'B'
sbrc r17,tC
ldi r16,'C'
call WriteD
rjmp strzałki
plik 44780.asm
;-----------------------------------------
; Test flagi Busy
;-----------------------------------------
Busy:
ldi r17,0x0F
out ddrb,r17
sbi portb,1
cbi portb,2
Czekaj44780:
70
sbi portb,0
nop
in r17,pinb
cbi portb,0
sbi portb,0
cbi portb,0
tst r17
brmi Czekaj44780
ret
;-----------------------------------------
; Zapis instrukcji/danej do HD44780
;-----------------------------------------
WriteI:
rcall Busy
cbi portb,2
rjmp Write
WriteD:
rcall Busy
sbi portb,2
Write:
ser r17
out ddrb,r17
cbi portb,1
push r16
andi r16,0xF0
in r17,portb
andi r17,0x0F
add r16,r17
out portb,r16
sbi portb,0
cbi portb,0
pop r16
swap r16
andi r16,0xF0
add r16,r17
out portb,r16
sbi portb,0
cbi portb,0
ldi r16,0x0F
out ddrb,r16
ret
;-----------------------------------------
; Petla opozniajaca
; 1 MHz - ~1ms * r18
;-----------------------------------------
Wait:
push r17
Wait2:
ldi r17,200
Wait1:
nop
nop
dec r17
brne Wait1
dec r18
brne Wait2
pop r17
ret
;-----------------------------------------
; Wypisywanie ciagu
; na wyswietlaczu
;-----------------------------------------
71
WriteL:
lpm r16,Z+
cpi r16,0
breq WriteLend
rcall WriteD
rjmp WriteL
WriteLend:
ret
plik div16u.asm [24]
;-----------------------------------------
; Procedura dzielenia
; Dostarczona przez producenta mikrokontrolera
;-----------------------------------------
.def drem16uL=r14 ; reszta
.def drem16uH=r15
.def dd16uL =r16 ;dzielna
.def dd16uH =r17
.def dv16uL =r18 ;dzielnik
.def dv16uH =r19
.def dcnt16u =r20
.def tcnt =r21
div16u:
clr drem16uL ;clear remainder Low byte
sub drem16uH,drem16uH;clear remainder High byte and carry
ldi dcnt16u,17 ;init loop counter
d16u_1:
rol dd16uL ;shift left dividend
rol dd16uH
dec dcnt16u ;decrement counter
brne d16u_2 ;if done
ret ; return
d16u_2:
rol drem16uL ;shift dividend into remainder
rol drem16uH
sub drem16uL,dv16uL ;remainder = remainder - divisor
sbc drem16uH,dv16uH ;
brcc d16u_3 ;if result negative
add drem16uL,dv16uL ; restore remainder
adc drem16uH,dv16uH
clc ; clear carry to be shifted into result
rjmp d16u_1 ;else
d16u_3:
sec ; set carry to be shifted into result
rjmp d16u_1
plik etykiety.inc
linia: .db "Test 1234567890!@#$%^&*() ABCDEF",0
temperatura: .db "Temperatura: ",0
poprzecinku: .db
"00",0,0,"06",0,0,"12",0,0,"18",0,0,"25",0,0,"31",0,0,"37",0,0,"43",0,0,"50",
0,0,"56",0,0,"63",0,0,"69",0,0,"75",0,0,"81",0,0,"87",0,0,"93",0,0
kalibracja: .db "Tryb serwisowy RS232",0
odebrano: .db "Odebrano",0
gotowe: .db "Gotowe :)",0
czekaj: .db "Czekaj...",0
tAkt: .db "T.akt: ",0
tStab: .db "T.st: ",0
echoF: .db "STPW v.11",125,0
72
polaczono: .db "Polaczono",0
rs232: .db "Kalibr. po RS232 ",0
kalibracja1: .db "Kalibr. na stale p."
bezkor: .db "Pomiar bez korekcji",0
stabstp: .db "Stab. na stale p. "
menuL: .db "Menu",0
wybierz: .db "Wybierz temp.",0
chlodzenieL: .db "Chlodze! ",0
grzanieL: .db "Podgrzewam! ",0
stop: .db "Peltier wyl. ",0
zapamietano: .db "Zapamietano ",0
plik init44780.asm
;-----------------------------------------
; Inicjalizacja wyświetlacza LCD HD 44780
; PORTB: 0 E, 1 R/W, 2 RS, 3 nc, 4-8 DB4-DB8
;-----------------------------------------
ser r16
out ddrb,r16
ldi r18,40 ; //wait 40 ms
call Wait
ldi r16,0b00110000
out portb,r16
cbi portb,0
sbi portb,0
ldi r18,5 ;// wait 4.1
call Wait
cbi portb,0
sbi portb,0
ldi r18,1 ; // wait 100us
call Wait
cbi portb,0
sbi portb,0
ldi r16, 0b00100000
out portb,r16
cbi portb,0
sbi portb,0
ldi r18,1
call Wait
ldi r16,0b00101000
cbi portb,2
call Write
ldi r16,0b00001000
call WriteI
ldi r16,0b00000001
call WriteI
ldi r16,0b00000111
call WriteI
ldi r16,0b1100 ;// 2 linie, 5x8 dot, bez kursora
call WriteI
ldi r16,0b110 ;// Entry mode
call WriteI