LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

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

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

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);
}