Stacja pogodowa

Transkrypt

Stacja pogodowa
Projekt MARM
Dokumentacja projektu
Łukasz Wolniak
Stacja pogodowa
1. Cel projektu
Celem projektu było opracowanie urządzenia do pomiaru temperatury, ciśnienia oraz wilgotności w
oparciu o mikrokontroler ARM i dołączone czujniki.
Wyniki pomiarów prezentowane są na wyświetlaczu wbudowanym w płytkę ewaluacyjną.
Realizowane funkcje:



odczyt ciśnienia
odczyt temperatury
wyświetlanie wyników pomiarów na wyświetlaczu
2. Lista wykorzystywanych modułów
Płytka ewaluacyjna STM32F746G-Discovery
Procesor Cortex-M7 @216MHz
LCD-TFT WQVGA 4.3''
Pamięci: 64 Mb SDRAM i 128 Mb Flash QSPI
Interfejsy: USB OTG, SPI, I2C
Programator: ST-Link/V2-1
Czujnik temperatury DS18B20
Interfejs: 1-Wire
Pomiar temperatury: od -55 do 125 °C
Dokładność pomiaru: 0,5°C
Rozdzielczość: 9-12 bit
Napięcie zasilania: 3-5,5 V
Czujnik ciśnienia BMP180
Interfejs: I2C
Pomiar ciśnienia: 300 - 1100 hPa
Dokładność: 0,02 hPa
Napięcie zasilania: 1,8 V - 3,6 V
3. Schemat blokowy:
Poniżej przedstawiony jest uproszczony schemat układu pomiarowego. Na schmacie nie ma
zaznaczonych rezystorów Pull-Up.
Wykorzystane interfejsy I/O w mikrokontrolerze:
SCL
SDA
1-Wire
PB8
PB9
PB14
4. Oprogramowanie mikrokontrolera
Środowiskiem programistycznym był Keil uVision w wersji 5. Język programowania to C.
W projekcie zostały wykorzystane biblioteki STM dla STM32F7 oraz biblioteki TM STM32 Libraries.
Za pomocą standardowych bibliotek od STM uruchomiony został wyświetlacz LCD wbudowany w
mikrokontroler. Biblioteki TM zostały wykorzystane do obsługi interfejsów I2C oraz 1-Wire.
Działanie urządzenia polega na cyklicznym pobieraniu danych z czujników temperatury i ciśnienia, a
następnie przedstawieniu wyników pomiaru na wyświetlaczu wbudowanym w płytkę ewaluacyjną.
Czujnik BMP180
Komunikacja z czujnikiem ciśnienia BMP180 odbywa się poprzez interfejs I2C wbudowanym w
mikrokontroler. Adres urządzenia do zapisu danych to 0xEE, a do odczytu 0xEF.
Działanie czujnika rozpoczyna się od zapisania wartości 0x2E do rejestru 0xF4, co rozpoczyna pomiar
temperatury. Wyniki dostępne są po 4,5us. Odczytać je można z dwóch adresów 0xF6 oraz 0xF7.
Wynik to 2 bajty danych, które następnie są przeliczane na temperaturę. Następnie odbywa się
pomiar ciśnienia. Do urządzenia wysyłana jest wartość 0x34 do rejestru 0xF4. Po 4,5us (w wybranym
trybie pomiaru) wyniki dostępne są w 3 rejestrach o adresach: 0xF6, 0xF7, 0xF8. Wynik to 3 bajty
danych, które są przeliczane na wartość ciśnienia.
Czujnik DS18B20
Komunikacja z czujnikiem wilgotności i temperatury odbywa się poprzez interfejs 1-Wire.
Przesyłanie danych jest inicjowane przez urządzenia master (mikrokontroler). Transmisja rozpoczyna
się od wysłania sekwencji bitów poprzez wystawienie impulsu reset (zwarcie linii danych na 480 μs
do masy). Powoduje to zresetowanie wszystkich podłączonych odbiorników (urządzeń typu slave).
Przesłanie logicznej jedynki na magistralę oznacza wystawienie przez mastera krótkiego (od 1 do 15
μs) impulsu niskiego (zwarcie linii) oraz następnie wysokiego o długości 60 μs. Logiczne zero
odpowiada niskiemu impulsowi o długości 60 μs.
Przed odbiorem każdego bitu danych master wysyła niski impuls startu (od 1 μs do 15 μs), po czym
wraca do stanu wysokiego na linii danych. Jeśli slave wysyła logiczną jedynkę – nie robi nic,
pozostawiając linię w stanie wysokim. Jeśli slave wysyła zero, wówczas zwiera linię danych do masy
na 60 μs.
Komunikacja między mikrokontrolerem, a czujnikiem odbywa się przy pomocy następujących poleceń
wysyłanych przez mikrokontroler:

SKIP ROM [CCh] – poprzez wysyłanie bajtu o wartości CChex urządzenie adresuje wszystkie
urządzenia znajdujące się na linii danych bez wysyłania informacji o numerze
identyfikacyjnym urządzenia (ROM). Po tej komendzie można wysłać kolejne polecenie do
wszystkich urządzeń na linii danych.

CONVERT T [44h] – komenda rozpoczyna pojedynczą konwersję temperatury. Po zakończeniu
konwersji wynik pomiaru przechowywany jest w 2-bajtowym rejestrze, a czujnik przechodzi
w stan bezczynności.

READ SCRATCHPAD [BEh] – po wysłaniu tej komendy możliwy jest odczyt danych z pamięci
czujnika. Transmisja rozpoczyna się od najmłodszego bitu, od bajtu zerowego, aż do 9 bajtu.
Wynik pomiaru temperatury przechowywany jest w 2 pierwszych bajtach.
Pomiar rozpoczyna się od wysłania do urządzenia sygnału reset przez mikrokontroler. Następnie
wysyłany jest bajt o wartości 0xCC (adresowanie urządzenia). Kolejny wysłany bajt o wartości 0x44
rozpoczyna konwersję temperatury. Wysyłany jest kolejny sygnał resetu. Następnie wysyłane są bajty
0xCC oraz 0xBE co umożliwia odczyt temperatury. Wynikiem są dwa bajty danych, które są następnie
przeliczane na temperaturę w stopniach Celsjusza.
Ostatnim krokiem jest wyświetlenie wyników pomiaru na wyświetlaczu. W tym celu wartości
liczbowe są najpierw konwertowane na tekst w formacie tablicy char.
Następnie za pomocą funkcji z biblioteki STM dane wyświetlane są na wyświetlaczu.

Podobne dokumenty