- Konstrukcja oparta na mikrokontrolerze ATmega4808
- Pomiar temperatury otoczenia: czujnik DS18B20
- Dokładność pomiaru temperatury: ±0,5°C
- Sterowanie: enkoder obrotowy
- Wyświetlacz: LCD TFT 128×160 px
- Wyjścia przekaźnikowe: 2×DPDT 250 V/8 A
- Wbudowany zegar czasu rzeczywistego (DS3231) z podtrzymaniem (CR2032)
Sterowanie naszym piecem odbywa się na prostej zasadzie włącz/wyłącz. Nie jest to zbyt efektywna metoda sterowania (piec pracuje albo z pełną mocą, albo nie pracuje wcale), lecz do podstawowych zastosowań okazuje się ona w zupełności wystarczająca. Termostat mierzy temperaturę w reprezentatywnym pomieszczeniu i jeżeli ta spadnie poniżej ustawionej wartości, to piec jest włączany. Po osiągnięciu docelowej temperatury piec jest wyłączany. Żeby zapobiec zbyt częstemu uruchamianiu pieca, w procesie sterowania wprowadzono programowaną histerezę. Zastosowanie sterownika mikroprocesorowego pozwoliło na dodanie możliwości programowania czasowego temperatur w trybie dzień/noc.
Założenia projektowe
Pomiar temperatury
Pomiar temperatury otoczenia przez sterownik mikroprocesorowy wydaje się rzeczą banalną. Na rynku jest dostępnych wiele czujników elektronicznych komunikujących się za pomocą magistrali szeregowych SPI czy I²C. Stosowane są też czujniki konwertujące mierzoną temperaturę na napięcie, mierzone następnie przez przetwornik analogowo-cyfrowy mikrokontrolera i przeliczane na wartość temperatury. Ja wybrałem popularny i niezawodny czujnik DS18B20 z magistralą 1-Wire. Czujnik jest wystarczająco dokładny do realizacji pomiaru temperatury w pomieszczeniu (±0,5°C). Magistrala 1-Wire umożliwia umieszczenie czujnika w odległości nawet powyżej 1 metra od sterownika, co jest pożądaną cechą w tym zastosowaniu. Zbyt blisko umieszczony czujnik będzie wskazywał temperaturę zawyżoną przez ciepło wytwarzane przez układy termostatu. Przy odpowiednim oprogramowaniu do jednej magistrali można podłączyć wiele czujników i identyfikować je po numerach seryjnych.
Sterownik mikroprocesorowy
Wybór mikrokontrolera do budowy sterownika został podyktowany głównie zastosowanym interfejsem użytkownika. Ponieważ zdecydowałem się użyć kolorowego, graficznego wyświetlacza LCD, procesor musiał mieć odpowiednie zasoby – przede wszystkim sporą pamięć Flash, by móc pomieścić wzorce wyświetlanych znaków i dość rozbudowane oprogramowanie. Wybrany wyświetlacz jest sterowany przez magistralę SPI. Płynne wyświetlanie na ekranie zmieniających się danych wymaga pewnej minimalnej szybkości wykonywania operacji. Zdecydowałem się na szybki, 8-bitowy mikrokontroler ATmega4808 produkowany przez firmę Microchip (dawniej Atmel). Spełniał on wszystkie wymagania co do zasobów i szybkości. Poza tym, po przejęciu Atmela przez Microchip, można już pracować nad oprogramowaniem w znanym mi środowisku Microchip MPLAB X IDE, korzystając z bezpłatnej wersji kompilatora języka C (MPLAB XC8) oraz sprzętowego programatora-debuggera MPALB PicKit 4.
Zegar czasu rzeczywistego
Pomiar czasu rzeczywistego jest wykorzystywany do realizacji programu sterowania dzień/noc. Zegar RTC można zrealizować na kilka sposobów, zazwyczaj używając wbudowanego w mikrokontroler modułu RTC lub stosując zewnętrzny układ RTC komunikujący się z mikrokontrolerem przez magistralę I²C lub SPI (tak jest np. w przypadku układu DS1703). W każdej tego typu implementacji musimy zmierzyć się z problemem dokładności taktowania zegara przez układ rezonatora kwarcowego. To dość trudne zadanie do wykonania w warunkach amatorskich ze względu na trudności z zakupem odpowiedniego rezonatora kwarcowego.
Zazwyczaj kupujemy rezonatory o nominalnej częstotliwości, nie wiedząc, jaka jest jego dokładność, dryft temperaturowy czy pojemność. W rezultacie zegar działa, ale jego dokładność jest w praktyce niezbyt dobra i trudno ją poprawić. Żeby uniknąć opisywanych problemów, zastosowałem układ zegara czasu rzeczywistego DS3231 z wbudowanym w strukturę kalibrowanym i kompensowanym termicznie oscylatorem kwarcowym.
Bez żadnych zabiegów układ zapewnia dokładność na poziomie ±2ppm w temperaturze od 0°C do 40°C, co daje w teorii błąd ±1 min na rok!
Konstrukcja układu
Układ termostatu został umieszczony na dwóch płytkach: PCB sterownika mikroprocesorowego i PCB zasilacza z układem wykonawczym sterującym piecem. Schemat tej pierwszej został pokazany na rysunku 1.
Podstawowym elementem urządzenia jest mikrokontroler ATmega4808 (układ U1) sterujący działaniem wyświetlacza graficznego za pomocą magistrali SPI. Magistrala sterująca, oprócz standardowych linii zegara LCD_SCK, LCD_MOSI (dane wyjściowe z mikrokontrolera) i linii wyboru interfejsu LCD_CS, jest uzupełniona o linie zerowania sterownika wyświetlacza LCD_RES, linie wyboru rodzaju przesyłanych danych (dane wyświetlane lub komendy) LCD_DC i linię wygaszania ekranu LCD_BLK. Zastosowany w projekcie moduł wyświetlacza z kolorową matrycą TFT o rozmiarze 128×160 pikseli ma wbudowany sterownik ST7735. Interfejs użytkownika – oprócz wyświetlacza – zawiera także impulsator (enkoder) obrotowy ze stykiem zwieranym przez przyciśnięcie pokrętła. Rezystory R2 i R4 wymuszają stan wysoki na wejściowych liniach PD0 i PD1 (odczytujących stany wyprowadzeń A i B enkodera), a rezystor R1 wymusza stan wysoki na linii wejściowej PD2, odpowiedzialnej za odczyt stanu przycisku.
Zegar RTC typu DS3231 (U3) komunikuje się z mikrokontrolerem przez magistralę I²C. Rezystory R5 i R6 zapewniają wymagane przez standard I²C podciąganie linii SDA i SCL do plusa zasilania 3,3 V. Po zaniku głównego napięcia +3,3 V układ zegara jest zasilany z baterii litowej CR2032 o napięciu 3 V. Na płytce sterownika jest umieszczone specjalne gniazdo do zamocowania tej baterii, co pozwala podtrzymać bieg układu czasowego i niweluje problem konieczności ponownego ustawiania aktualnej godziny po zaniku napięcia sieciowego. Napięcie o wartości 3,3 V, służące do zasilania układów mikrokontrolera, wyświetlacza graficznego i zegara RTC, jest wytwarzane przez scalony stabilizator LDO (U2) typu 1117-3.3 Na wejście stabilizatora jest podawane napięcie +5 V z płytki zasilacza przez złącze szpilkowe P3. Czujnik temperatury jest podłączany do wyprowadzeń złącza P4, a rezystor R8 realizuje wymagane przez standard 1-Wire podciąganie linii danych DQ do plusa zasilania. Złącze J2 umożliwia podłączenie programatora/debuggera PicKit4. Do programowania układu jest wykorzystywana jedna dwukierunkowa linia UPDI.
Schemat płytki zasilacza został pokazany na rysunku 2.
Napięcie sieciowe 230 V jest podłączone przez złącze P1 i bezpiecznik F1 do uzwojenia pierwotnego transformatora sieciowego T1. Napięcie wtórne o nominalnej wartości skutecznej 6 V jest prostowane w mostku Greatza zbudowanym z diod D5...D8 typu 1N4007 i filtrowane kondensatorem C5 o pojemności 1000 μF. Wyprostowane i odfiltrowane napięcie trafia na wejście stabilizatora U1 typu uA7805. Napięcie +5 V z jego wyjścia zasila (poprzez złącze P2) układy płytki sterownika oraz cewki przekaźników wykonawczych K1 i K2, które odpowiedzialne są za sterowanie załączaniem/wyłączaniem pieca. Przewidziano dwa kanały sterujące z dwoma przekaźnikami, ale w obecnej wersji w użyciu jest tylko jeden kanał. Cewki przekaźników są sterowane tranzystorami Q1 i Q2. Podanie napięcia +3,3 V z portu mikrokontrolera (przez rezystory ograniczające R1 lub R2) na bazy tranzystorów sterujących powoduje wprowadzenie ich w stan nasycenia i zadziałanie przekaźnika. Diody D9 i D10 tłumią przepięcia indukowane w cewkach przekaźników w momencie wyłączania napięcia i zaniku prądu płynącego przez uzwojenia cewek.
Zastosowany transformator ma dwa uzwojenia wtórne o napięciach nominalnych 6 V każde. Jedno z nich nie jest wykorzystywane w termostacie, ale na płytce przewidziano miejsce na jeszcze jeden mostek prostowniczy i kondensator filtrujący. Tych elementów nie trzeba montować w standardowej wersji opisywanego urządzenia.
Montaż układu
Jak już wspomniałem, termostat jest montowany na dwóch dwustronnych płytkach: sterownika (rysunek 3) i zasilacza (rysunek 4).
Płytka sterownika
Montaż płytki sterownika rozpoczynamy od najniższych elementów na stronie elementów (warstwa top): mikrokontrolera, układu zegara RTC i elementów biernych: rezystorów i kondensatorów. Wszystkie te komponenty są w obudowach do montażu powierzchniowego. Ze względu na mały rozstaw wyprowadzeń należy zachować ostrożność przy lutowaniu mikrokontrolera ATmega4808. Wyświetlacz, impulsator i kilka elementów biernych należy zamontować na warstwie dolnej (bottom). Lutujemy je po wmontowaniu wszystkich elementów na warstwie top. Zaczynamy od elementów biernych, bo większość z nich jest umieszczona pod wyświetlaczem i po jego zamocowaniu nie będzie do nich dostępu. Wyprowadzenia wyświetlacza wlutowujemy w złącze J3, a następnie przykręcamy go do płytki za pomocą wkrętów M2,5 i tulejek dystansowych. Zmontowaną płytkę sterownika można zobaczyć na fotografii 1.
Płytka zasilacza
Montaż płytki zasilacza jest stosunkowo prosty. Większość elementów jest przeznaczona do montażu przewlekanego. Wyjątkiem są kondensatory blokujące przy stabilizatorze 7805 oraz rezystory R1 i R2 ograniczające prąd tranzystorów Q1 i Q2. Zmontowana płytka zasilacza została pokazana na fotografii 2.
Gotowe płytki zostały umieszczone w małej, plastikowej obudowie. Połączone są za pomocą złączy IDC10 zaciskanych na płaskim kablu AWG28 (fotografia 3). To połączenie umożliwia zasilanie płytki sterownika napięciem +5 V i przesyłanie sygnału sterującego ze sterownika do tranzystora sterującego przekaźnikiem wykonawczym.
W drugiej części artykułu omówimy zagadnienia związane z uruchomieniem i użytkowaniem układu, opiszemy także najważniejsze kwestie programistyczne.
Tomasz Jabłoński, EP
- R1, R2, R4, R5...R9: 1 kΩ
- R3: 10 kΩ
- C1, C5: 100 nF
- C2...C4, C7...C9: 10 μF
- U1: ATmega4808_28
- U2: SPX1117
- U3: DS3231
- DS18B20
- dioda LED
- BT1: bateria CR2032 + podstawka THT pozioma 2-pin.
- P1, P5: listwa goldpin 1×2
- P2: listwa goldpin 1×4
- P4: listwa goldpin 1×3
- P3: listwa goldpin 2×5
- J1, J2: goldpin 1×8
- J3: goldpin 1×9
- wyświetlacz LCD TFT 128×160 px ze sterownikiem ST7735
- R1, R2: 1 kΩ
- C1: 100 nF
- C2, C3: 10 μF
- C4, C5: 1000 μF/25V
- D1...D10: 1N4007
- U1: 7805 (TO-220)
- Q1, Q2: tranzystor NPN (TO-126)
- F1: bezpiecznik
- K1, K2: przekaźnik RM84-2012-36-1005
- P1, P3...P8: złącze ARK2 5 mm 2 pin.
- P2: listwa goldpin 2×5
- T1: transformator sieciowy 2×6 V