Układ scalony czujnika HTS221 charakteryzuje się małymi wymiarami, szerokim zakresem napięcia zasilającego i małym poborem prądu. Ułatwia to stosowanie tego sensora w urządzeniach przenośnych, zasilanych z baterii lub akumulatorów. Najważniejsze parametry czujnika są następujące:
- Zakres pomiarowy wilgotności względnej: 0…100%.
- Dokładność pomiaru wilgotności: ±4,5% rH, w zakresie 20…80% rH, ±6% w całym zakresie.
- Dokładność pomiaru temperatury: ±0,5°C w zakresie +15…+40°C, ±1°C w zakresie 0…+60°C.
- Zakres temperatury pracy: -40…+120°C.
- Napięcie zasilania: 1,7…3,6 V.
- Średni prąd zasilający w trybie aktywnym: 2 mA przy częstotliwości odczytu 1 Hz.
- Interfejsy komunikacyjne: SPI i I²C.
- Wymiary: 2 mm×2 mm×0,9 mm.
Czujnik jest fabrycznie skalibrowany dla uzyskania maksymalnej dokładności pomiarów.
Miniaturowa obudowa HTS221 ma 5 wyprowadzeń umieszczonych na spodzie. Czujnik stanowi kompletny system, a jego obudowa zawiera wszystkie niezbędne bloki funkcjonalne. Jedynym dodatkowym komponentem zewnętrznym wymaganym przez jego aplikację jest kondensator o pojemności 100 nF filtrujący napięcie zasilające, który powinien być dołączony możliwie blisko doprowadzenia napięcia zasilającego. Interfejs komunikacyjny wybiera się za pomocą poziomu logicznego na wejściu CS. Logiczna „1” uaktywnia interfejs I²C, natomiast logiczne „0” – SPI. Szczegółowe informacje techniczne czujnika, dostępne są na stronie internetowej producenta pod adresem www.st.com.
Konfiguracja sprzętowa
Obudowa czujnika HTS221 jest zbyt mała, aby móc swobodnie dołączyć ją za pomocą przewodów do systemu z mikrokontrolerem. Na szczęście są dostępne moduły z wygodnymi do przyłączenia wyprowadzeniami, na których ten czujnik jest zamontowany. Ostatecznie, zestaw sprzętu użytego do testowania możliwości czujnika i pracy przy oprogramowaniu demonstracyjnym wyglądał następująco:
- Płytka KA-NUCLEO-Weather z zamontowanym czujnikiem HTS221. Gniazda płytki w standardzie Arduino. Czujnik przystosowany do pracy z magistralą I²C.
- Moduł STM32F411 NUCLEO-64 ze złączami w standardzie Arduino do osadzenia płytki KA-NUCLEO-Weather. Na module zamontowano kontroler STM32F411RE.
- Miniaturowy wyświetlacz OLED SSD1306 z interfejsem I²C do prezentowania wyników pomiarów.
Na rysunku pokazano schemat połączeń wykonanych pomiędzy gniazdami a czujnikiem i wyświetlaczem. Zielonymi liniami przerywanymi zaznaczono połączenia pomiędzy zamontowanym na płytce KA-NUCLEO-Weather czujnikiem HTS221 i wyprowadzeniami na złączach. Do tych samych wyprowadzeń magistrali I²C, do których przyłączono czujnik, doprowadzone są przewody linii SCL i SDA wyświetlacza. Dodatkowo, wyświetlacz jest przyłączony do masy GND i pobiera napięcie zasilania z jednego z dostępnych wyprowadzeń +3,3 V. Zasilanie czujnika jest poprowadzone na płytce KA-NUCLEO-Weather i na rysunku nie zostało zaznaczone. Dodatkowa linia DRDY połączona z wyjściem D8 na złączu Arduino, służy do sygnalizowania gotowości czujnika do odczytu danych kolejnego pomiaru wilgotności i temperatury. Na płytce KA-NUCLEO-Weather zamontowano obowiązkowe dla interfejsu I²C rezystory zasilające linie SCL i SDA.
Narzędzia programistyczne i biblioteki
Napisanie funkcjonalnego oprogramowania dla czujnika HTS221 nie jest skomplikowane, jeśli korzysta się z dostępnych bibliotek i narzędzi programistycznych do automatycznego generowania kodu. Podczas pracy nad projektem korzystałem z następujących pakietów oprogramowania i bibliotek:
- Narzędzia do generowania szkieletu oprogramowania opartego o sterowniki HAL STM32CubeMX w wersji 4.13.0 (https://goo.gl/AnLRuY).
- Pakietu kompilatora AC6 System Workbench (SW4STM32, https://goo.gl/tm054L).
- Biblioteki STM32_LIBRARIES.zip (https://goo.gl/3cw7KS). Niekomercyjna, darmowa biblioteka funkcji dla mikrokontrolerów STM32F4xx oparta na sterownikach HAL. Między innymi, w bibliotece można znaleźć gotowe funkcje do obsługi wyświetlacza SSD1306.
- Biblioteki funkcji do obsługi czujnika HTS221 hts221_lib_stm32.zip (https://goo.gl/SYkbN0).
- Dokumentacji biblioteki HAL (UM1884: Description of STM32L4 HAL and Low-layer drivers, https://goo.gl/AoCgow).
Założenia projektowe
Założeniem projektu było wykonanie w pełni funkcjonalnego miernika wilgotności i temperatury. Miernik miał działać w trybie pomiaru ciągłego i wyświetlać wyniki na wyświetlaczu OLED SSD1306. W kolejnych punktach, krok po kroku pokażę, jak wykonać oprogramowania takiego przyrządu.
STM32CubeMX – szkielet oprogramowania miernika wilgotności
Posługując się narzędziem programistycznym STM32CubeMX, w łatwy sposób można wygenerować szkielet oprogramowania dla wybranego typu mikrokontrolera lub płytki ewaluacyjnej. Szkielet będzie zawierał procedury inicjujące, utworzone w formacie plików odpowiednim dla wskazanego typu kompilatora.
Po uruchomieniu STM32CubeMX należy wybrać płytkę za pomocą menu Board Selector → Type of Board: NUCLEO64 → NUCLEO-F411RE. Zostanie wyświetlony rysunek obudowy mikrokontrolera zamontowanego na płytce NUCLEO-F411RE.
Ponieważ jako platformę docelową projektu wybrano określony typ płytki, widoczny na rysunku kontroler jest wstępnie skonfigurowany. Między innymi, zaznaczono dwa porty przyłączone na płytce do przycisku (B1[Blue PushButton]) i do diody LED (LD2[Green Led]). Można to pozostawić bez zmian.
Konfigurowanie peryferiów dodatkowych
Konfigurację wyprowadzenia portu, które będzie służyło do odczytywania poziomu logicznego wyjścia DRDY czujnika HTS221, należy wykonać w następujący sposób:
- Wskazujemy kursorem na oznaczenie wyprowadzenia portu PA9 i klikamy lewym przyciskiem myszy.
- Z wyświetlonej listy wybieramy GPIO_Input. Kolor wyprowadzenia zmieni się na zielony.
- Wybieramy zakładkę Configuration → System → GPIO. Na wyświetlonej liście klikamy na pozycję PA9.
- Zmieniamy ustawienia: GPIO mode = Input mode, GPIO Pull-up/Pull-down = Pull-up, User Label = HTS221_DRDY.
Wyprowadzenia portów, które będą pracowały „na usługach” interfejsu I²C (SDA, SCL) należy skonfigurować w następujący sposób:
- Na zakładce Pinout i liście Peripherals wybieramy pozycję I²C1 i zaznaczamy I²C.
- Wskazujemy kursorem wyprowadzenie portu PB9 i wybieramy opcję I²C1_SDA.
- Podobnie dla portu PB8, dla którego wybieramy opcję I²C1_SCL.
Dodatkowo, można zmienić ustawienia wewnętrznych przebiegów zegarowych:
- Na zakładce Pinout i liście Peripherals wybieramy pozycję RCC i zmieniamy ustawienie High Speed Clock (HSE) na BYPASS Clock Source. Odpowiada to sytuacji na płytce NUCLEO-F411RE, w której impulsy taktujące mikrokontroler są podawane na wejście OSC_IN. Gdyby kontroler miał pracować z dołączonym rezonatorem kwarcowym, należałoby wybrać opcję Crystal/Ceramic Resonator.
- Następnie otwieramy zakładkę Clock Configuratin.
- W polu Input Frequency wpisujemy częstotliwość impulsów zegarowych w MHz, czyli w tym przypadku „8”.
- Zaznaczamy na schemacie impulsów zegarowych opcję PLL Source Mux na HSE, a System Clock Mux na PLLCLK. Jeżeli system wewnętrznych podzielników pętli PLL będzie miał ustawione następujące parametry: /M=4, *N=84, /P=2 to impulsy HCLK będą miały częstotliwość 84 MHz.