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
|
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
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
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