ZL27ARM: obsługa czujnika MEMS do pomiaru ciśnienia – BMP085
W projekcie przedstawiamy obsługę czujnika BMP085 (Bosch Sensortec) służącego do pomiaru ciśnienia atmosferycznego i temperatury. W przykładzie obliczamy także wysokość położenia czujnika nad poziomem morza, a uzyskane wyniki pomiarów są wyświetlane na wyświetlaczu alfanumerycznym z matrycą OLED o organizacji 2×20 znaków.
Do przykładu opisującego działanie czujnika ciśnienia posłużymy się modułem KAmodBMP085, wyposażonym w czujnik BMP085 oraz zestawem ZL27ARM. Sposób dołączenia zestawu KAmodBMP085 do ZL27ARM pokazano na rysunku 1.
Rys. 1. Schemat połączeń pomiędzy KAmodBMP085 i ZL27ARM
Do zestawu uruchomieniowego podłączono również wyświetlacz prezentujący dane z czujnika, schemat połączeń pokazano na rysunku 2.
Rys. 2. Schemat podłączenia wyświetlacza OLED do ZL27ARM
Czujnik ciśnienia BMP085 komunikuje się z mikrokontrolerem STM32 poprzez interfejs I2C. Jako że mikrokontroler zastosowany w zestawie ZL27ARM ma wbudowany sprzętowy interfejs obsługi tej magistrali, został on wykorzystany w przykładzie. Dzięki temu funkcje oprogramowania mikrokontrolera sprowadzają się do obsługi interfejsu I2C, przetworzenia otrzymanych danych z czujnika ciśnienia i ich wyświetlenia.
Po konfiguracji samego procesora program odczytuje dane z pamięci eeprom czujnika i zapisuje je w odpowiednich zmiennych, dane te są na stałe zaprogramowane przez producenta w celu użycia ich do kompensacji wyników pomiarów temperatury oraz ciśnienia, zgodnie z informacją podaną w nocie katalogowej czujnika BMP085:
//Odczyt danych z eeprom void BMP085_Calibration(void) { extern short ac1, ac2, ac3, b1, b2, mb, mc, md; extern unsigned short ac4, ac5, ac6; ac1 = BMP085_ReadShort(0xAA); ac2 = BMP085_ReadShort(0xAC); ac3 = BMP085_ReadShort(0xAE); ac4 = BMP085_ReadShort(0xB0); ac5 = BMP085_ReadShort(0xB2); ac6 = BMP085_ReadShort(0xB4); b1 = BMP085_ReadShort(0xB6); b2 = BMP085_ReadShort(0xB8); mb = BMP085_ReadShort(0xBA); mc = BMP085_ReadShort(0xBC); md = BMP085_ReadShort(0xBE); }