Bosch Sensortec BMP085: cyfrowy czujnik ciśnienia

 

Półprzewodnikowy czujnik BMP085 jest przeznaczony do pomiaru ciśnienia atmosferycznego w zakresie od 300 do 1100hPa. Mierzone wartości odpowiadają przeciętnemu ciśnieniu na wysokości od 500 m poniżej poziomu morza do 9000 m nad jego poziomem. Komunikacja z czujnikiem odbywa się za pośrednictwem magistrali I2C.

 

 

 

 

Podstawowe cechy i parametry czujnika BMP085

  • zakres mierzonego ciśnienia atmosferycznego od 00hPa do 1100hPa co odpowiada ciśnieniu na wysokościach od -500 mnp do 9000 mnp
  • niestabilność (szumy) pomiarów 0,03hPa – 0,06hPa zależnie od trybu pracy
  • programowo wybierany jeden z czterech trybów pracy, różniących się szybkością pomiaru (maksymalnie do 128 pomiarów na sekundę), poborem prądu w czasie pomiaru (od 3µA do 12µA) i rozdzielczością do 0,01 hPa
  • wbudowany interfejs I2C
  • wyprowadzenie EOC sygnalizujące zakończenie konwersji
  • wyprowadzenie XCLR do zerowania układu
  • zasilanie od 1,8V do 3,6V
  • obudowa LCC8 o wymiarach 5 x 5 x 1,2 mm

Określenie wartości aktualnego ciśnienia wiąże się z wykonywaną przez czujnik BMP085 konwersją ciśnienia i temperatury na dwie 16-bitowe wartości. Do obliczeń oprócz zmierzonych wartości wykorzystuje się również parametry korekcyjne. Parametry te są zapisane w wewnętrznej nieulotnej pamięci czujnika i są – na etapie produkcji – określane indywidualnie dla każdego egzemplarza czujnika.
Zarówno inicjacja pomiarów, ustawienie trybu pracy jak i odczyt wyniku pomiaru następuje poprzez dostęp do wewnętrznych rejestrów czujnika za pośrednictwem magistrali I2C. Na rysunku 1 przedstawiono schemat blokowy układu oraz zaznaczono jego najważniejsze wyprowadzenia. Rezystory podciągające Rp dołączone do linii magistrali I2C powinny mieć wartość ok. 4,7 kΩ. Na rysunku 2 pokazano schemat płytki ewaluacyjnej dla czujnika ciśnienia.
Układy BMP085 mają sprzętowo ustalone dwa adresy na magistrali I2C: 0xEF (odczyt) i 0xEE (zapis). W czasie normalnej pracy wyprowadzenie XCLR powinno pozostać nie podłączone lub mieć potencjał napięcia zasilającego. Niski poziom logiczny na tym wyprowadzeniu zeruje układ, jednocześnie odłączając od magistrali I2C co pozwala sterować innym czujnikiem dołączonym do tej samej magistrali.

 

Rys. 1. Schemat blokowy układu BMP085

Rys. 1. Schemat blokowy układu BMP085

 

 

Podczas aplikowania czujnika BMP085 należy pamiętać o tym, że maksymalne napięcie na wyprowadzeniach I/O nie może przekraczać bez dodatkowych zabezpieczeń wartości 4,25 V.

 

Rys. 2. Schemat elektryczny zestawu testowego

Rys. 2. Schemat elektryczny zestawu testowego

 

 

Wszystkie operacje związane z układem BMP085 w tym wybór trybu pracy, start pomiarów, odczyt wyników konwersji traktowane są jak zapis lub odczyt danych z wewnętrznych rejestrów układu o określonych adresach. Dotyczy to także parametrów korekcyjnych, których wartości należy odczytać z wewnętrznej pamięci układu po jego inicjalizacji (włączeniu zasilania). Każdy 16-bitowy parametr składa się z dwóch bajtów zapisanych pod kolejnymi adresami pamięci. Transakcja odczytu z BMP085 np. parametrów korekcyjnych z wewnętrznej pamięci układu będzie przebiegała według następującego schematu:

  • mikrokontroler wysyła magistralą I2C sygnał START
  • mikrokontroler wysyła adres układu z wyzerowanym najmłodszym bitem czyli 0xEE
  • mikrokontroler wysyła adres pierwszego rejestru od którego rozpocznie się odczyt
  • mikrokontroler ponownie wysyła magistralą I2C sygnał START
  • mikrokontroler wysyła adres układu z ustawionym najmłodszym bitem czyli 0xEF
  • mikrokontroler odczytuje z magistrali I2C 8 bitów danych przesyłanych z rejestru którego adres został wcześniej wybrany
  • mikrokontroler wysyła potwierdzenie ACK
  • mikrokontroler odczytuje z magistrali I2C 8 bitów danych kolejnego rejestru
  • mikrokontroler wysyła magistralą I2C sekwencję NACK będącą sygnałem STOP

Parametry korekcyjne zapisane są pod kolejnymi adresami od 0xAA do 0xBF. Jako pierwszy zapisany jest starszy bajt parametru, młodszy jako drugi.
Transakcja zapisu do rejestrów BMP085 przebiega według podobnego do odczytu schematu:

  • mikrokontroler wysyła magistralą I2C sygnał START
  • mikrokontroler wysyła adres układu z wyzerowanym najmłodszym bitem czyli 0xEE
  • mikrokontroler wysyła adres rejestru do zapisu
  • mikrokontroler wysyła bajt danych do zapisu
  • mikrokontroler wysyła magistralą I2C sygnał STOP

W celu inicjacji kolejnej konwersji pod adres rejestru 0xF4 należy wpisać odpowiednią wartość. Zestawienie wartości oraz akcji, które inicjują przedstawiono poniżej.

 

Wartość Akcja Uwagi
0x2E Start konwersji temperatury Czas konwersji ok. 4,5ms
0x34 Start konwersji ciśnienia tryb
ultra low power
Czas konwersji ok. 4,5ms
0x74 Start konwersji ciśnienia tryb standard Czas konwersji ok. 7,5ms
0xB4 Start konwersji ciśnienia tryb
high resolution
Czas konwersji ok. 13,5ms
0xF4 Start konwersji ciśnienia tryb
ultra high resolution
Czas konwersji ok. 25,5ms

 

Po zakończeniu konwersji wyprowadzenie EOC przyjmuje stan niski co można wykorzystać do sprzętowej kontroli pracy układu. Wynik konwersji można odczytać z rejestrów o następujących adresach:
0xF6 – MSB starszy bajt wyniku konwersji
0xF7 – LSB młodszy bajt wyniku konwersji
0xF0 – XLSB najmłodsze bity wyniku konwersji w trybach o dużej rozdzielczości
Po odczycie wartości temperatury i ciśnienia oraz parametry korekcyjne posłużą do wyliczeń rzeczywistej wartości ciśnienia. Przeprowadzania kolejnych kroków obliczeń pokazane zostało w dokumentacji technicznej układu i w materiałach z kodami źródłowymi (do pobrania dla zarejestrowanych użytkowników portalu).
Ryszard Szymaniak, Aries RS

Do pobrania

O autorze