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.