BMP180 Bascom i pomiar wysokości … taaak to nie pomyłka.

3.5/5 - (4 votes)

Hehe ktoś powie kaktus zwariował przecież tym maleństwem dokonuje się pomiaru ciśnienia atmosferycznego … może i zwariował ale jednak jeszcze nie do końca. W tym wypadku dobrze wie co mówi.
Znając ciśnienie jakie panuje na poziomie morza p0 (np.: 1013.25 hPa) oraz wartość pomiaru p, możemy określić aktualną wysokość, wyliczając ją z  wzoru przedstawionego niżej.BMP180 formuła altitude

Istnieje ścisła zależność pomiędzy wysokością, a ciśnieniem. Została zobrazowana na poniższym wykresie, z którego wynika, że zmiana ciśnienia na Δp = 1 hPa odpowiada zmianie wysokości na Δh = 8,43 m. Natomiast zmiana wysokości o Δh = 10 m odpowiada zmianie ciśnienia o Δp = 1,2hPa.

BMP180 altitude

Wszystkie te informacje znajdziemy w nocie katalogowej.

Więc nastąpiła pora by zacząć poznawać ten sensor dogłębnie.sensor ciśnienia widok budowy wewnętrznejBMP180 jest potomkiem BMP085 (unowocześnionym i w pełni z nim zgodnym) i starszym braciszkiem mniejszego BMP280 stanowiąc produkt grupy czujników ciśnienia atmosferycznego (Barometric Pressure Sensors). Firma Bosh Sensortec opracowała jeszcze grupę czujników o szerszej funkcjonalności o nazwie Integrated Environmental Unit (zintegrowane jednostki do monitorowania środowiska). Potrafią one dokonywać nawet pomiaru zawartości lotnych związków organicznych w powietrzu (BME680), obok pomiaru ciśnienia 300…1100 hPa, temperatury -40…+85 °C i wilgotności 0…100 % rH (BME280).

BMP180 technical dataSensor stanowi cyfrowy czujnik (Piezo-resistive) ciśnienia atmosferycznego o bardzo wysokiej wydajności, dokładności i liniowości. Jak również długoterminowej stabilności i wysokiej odporności EMC. Liczne opcje pracy urządzenia oferują najwyższą elastyczność w zakresie optymalizacji zużycia energii urządzenia, rozdzielczości i filtra wydajności.
Niezwykle niski pobór mocy do 3 µA czyni BMP180 liderem w dziedzinie oszczędzania energii dla urządzeń mobilnych. BMP180 również wyróżnia bardzo stabilne zachowanie (wydajność) w odniesieniu do niezależności od napięcia zasilającego.
Sensor BMP180 otrzymamy jako w pełni skalibrowany, gotowy do użycia moduł czujnika bez konieczności stosowania dodatkowych układów zewnętrznych.
Dane ciśnienia i temperatury są przygotowywane w wartościach 16 bitowych, które wraz z przechowywanymi danymi indywidualnej kalibracji (176 bitów), powinny być wykorzystywane do kompensacji temperatury przez zewnętrzną jednostkę MPU. Transfer danych może odbywać się poprzez interfejsy I²C lub SPI.

Tak prezentuje ten sensor producent 🙂

Moduł z tym sensorem udało mi się zakupić 2014-09-10 w rewelacyjnej cenie na ówczesne czasy za jedyne 12,50pln u Wojciecha. I od tamtego czasu powstaje ten opis, chyba padł rekord. :mrgreen:

widok modułu z sensorem BMP180Moduł został dodatkowo wyposażony w precyzyjny stabilizator małej mocy  o oznaczeniu XC6206P w obudowie SOT23. Zawiera również rezystory PULL-UP dla magistrali TWI, oraz niezbędne kondensatory. Moduł został oznaczony przez producenta symbolem GY-68. Pamiętać należy o zastosowaniu translatora poziomów logicznych dla linii komunikacyjnych, gdy jednostka sterująca będzie zasilana napięciem 5,0V. Heh PCB posiada otwór montażowy Ø 3,00mm wydający się wielgaśną dziurą gdy patrzymy na te maciupkie elementy.

BMP180 topologia wyprowadzeńSam układ scalony sensora posiada 7 wyprowadzeń, z ich funkcjonalnością możemy zapoznać się na powyższym rysunku. Piny CSB i SDO odpowiadają wariantowi z interfejsem SPI, i podłączane są na żądanie klienta. W przypadku komunikacji I²C (obudowa standardowa) wymienione wyprowadzenia nie są używane i pozostają nie podłączone. Producent nakazuje lutowanie wszystkich wyprowadzeń, nawet tych nie podłączonych wewnętrznie by uniknąć powstawaniu niepotrzebnych naprężeń.

Organizacja pamięci i rejestry funkcjonalne.

Poniższa mapa pamięci pokazuje wszystkie dostępne z zewnątrz rejestry danych, które są niezbędne do obsługi BMP180. Kolumny po lewej przedstawiają adresy pamięci. Kolumny w środku przedstawiają funkcjonalność każdego bitu rejestru. Kolory bitów wskazują, czy są one tylko do odczytu, tylko do zapisu lub do odczytu i do zapisu. Pamięć jest ulotna, więc zapisane nastawy, muszą być ponownie ustawione po każdym włączeniu zasilania. Ostatnia kolumna zawiera wartości rejestrów ustawione po załączeniu zasilania.
Nie wszystkie adresy rejestrów są dostępne. Wybrane rejestry są zarezerwowane dla dalszych badań w fabryce Boscha.
mapa pamięci BMP180control register & hardware accuracy modes sensora BMP180Measurement control (register F4h <bit 4:0>) Sterowanie pomiarami.
Sco (register F4h <bit 5>) Start konwersji. Wartość bitu wynosi „1” podczas konwersji i jest resetowana po jej zakończeniu (gdy rejestry danych są wypełnione).
Oss (register F4h <bit 7:6>) steruje współczynnikiem próbkowania pomiaru ciśnienia (00B: jednorazowo, 01b: 2 razy , 10b: 4 razy, 11b: 8 razy).
Soft reset (register E0h) rejestr tylko do zapisu. Jeśli ustawi się jego wartość na 0xB6, sensor wykona taką samą sekwencję jak po włączeniu zasilania (power on reset).
Chip-id (register D0h) ta wartość jest ustawiona na 0x55. Rejestr może być używany do sprawdzania, czy funkcjonuje komunikacja.
Po konwersji danych rejestry mogą być odczytane w dowolnej kolejności (to znaczy pierwszy MSB lub pierwszy jako LSB). Korzystanie z odczytów seryjnych nie jest obowiązkowe.

Procedura komunikacji i odczytu wyników pomiaru.

adres TWI sensora BMP180Adres odczytu sensora BMP180 na magistrali TWI wynosi &H EF (239), natomiast zapis wykonujemy pod adres &H EE.
Producent sugeruje następujący tok postępowania w celu ustalenia monitorowanych warunków otoczenia. Przed pierwszym odczytem danych z rejestrów sensora należy odczytać dane kalibracji indywidualne dla każdego czujnika z jego pamięci E²PROM (jednorazowo przy inicjalizacji oprogramowania – po załączeniu zasilania). Stanowi je 11 słów 16 bitowych, w rejestrze od adresu &H AA do &H BF. Dane te są niezbędne do przekształcenia „surowych” wartości ciśnienia i temperatury, na realne wartości, przez zawikłane i „ciężkie” dla AVR-ka obliczenia. Poprawność odczytu danych można skontrolować przez np dwukrotny ich odczyt i porównanie, a dodatkowo producent sugeruje, że żadna wartość nie powinna wynosić 0 lub 65535.  Ponieważ sensor może dostarczyć wyników o różnych stopniach precyzji (dla ciśnienia), należy wybrać odpowiedni tryb konwersji z pośród 4 trybów sprzętowych i jednego programowego. accuracy modes - sowtware dla sensora BMP181Od tego zależy czas konwersji danych w pamięci sensora oraz zużycie energii przez jego logikę. Otrzymane wyniki dla ciśnienia (UP) mogą zawierać 16 – 19 bitów, dla temperatury (UT) 16 bitów. Wszystkie tryby mogą być wykonywane przy wyższych prędkościach, np do 128 razy na sekundę w trybie standardowym, a pobór prądu wzrasta proporcjonalnie do częstotliwości próbkowania. Tryb programowy realizowany jest przez podanie wyniku uśrednionego z kilkukrotnie przeprowadzonych konwersji. Stąd wydłużony czas przeprowadzanych operacji.  Dla próbkowania z maksymalną prędkością temperaturę  wystarczy odczytywać raz na sekundę i dla tej wartości dokonywać wyliczeń ciśnienia.
Po dokonaniu odczytu i weryfikacji danych kalibracyjnych można przystąpić do wydania polecenia konwersji temperatury. Po odczekaniu wymaganego czasu dane można odczytać z odpowiednich rejestrów sensora. Kolejno należy wydać polecenie konwersji danych dla ciśnienia, odczekać wymagany okres czasu i przystąpić do odczytu wartości z rejestrów. Wartości temperatury bądź ciśnienia atmosferycznego odczytamy pod adresami &H F6 (MSB), &H F7 (LSB), i dodatkowo dla trybu ultra hihg resolution kolejne dane pod adresem &H F8 (XLSB), tak by otrzymać łącznie 19 bitów
Postępując w ten sposób otrzymamy wszystkie niezbędne dane, z których będzie można wyliczyć aktualne wartości dla temperatury i ciśnienia atmosferycznego. Rozdzielczość uzyskanych wyników wynosi 0,01hPa (0.01mbar) dla ciśnienia i 0,1 °C dla temperatury. Przykładowy kod BMP180 Bascom dla odczytu wszystkich tych wartości może wyglądać następująco:

kod pochodzi z forum MCS.

Zwariowane obliczenia …

No to w tym miejscu nie przyznam się co powiedziałem gdy zobaczyłem zestaw obliczeń, gdyż było by to „nie smaczne” … Schemat obliczeń przedstawia poniższy wycinek z notki: zwariowane obliczenia dla BMP180Widząc te wszystkie wielobajtowe dzielenia i mnożenia , zastanawiałem się czy to wszystko musi być niezbędne … i jaki jest ich sens, pewno dało by się je uprościć czy coś z nimi zrobić by odciążyć nasze 8-bitowe AVR. Ale biorąc pod uwagę, że BMP180 jest zwykłym elementem, który może być używany w różnych systemach i platformach sprzętowych …

Tak, że przy doborze µC do takiego projektu na pewno trzeba wsiąść pod uwagę, z czym będzie musiał się zmierzyć, i że to wszystko wymaga czasu i wygeneruje obfity kod wynikowy. Z załącznikami do pobrania zamieszczam gotowy kod w dwóch wersjach zawierający te zwariowane obliczenia dla BMP180 Bascom. Tam gdzie się dało zastąpiłem dzielenia i mnożenia przez wielokrotność 2 stosowną funkcją 😉 Obie wersje kodu pochodzą z forum MCS do którego odnośnik umieściłem powyżej.

 

Wytyczne zasilnia i napięcia na pinach IO.

Heh … spotkałem się z opinią, że sensor można sterować liniami IO jednostki µC zasilanego 5V, 😆  z argumentacją „bo działa” …

Ja bym powiedział jeszcze działa:mrgreen: i skończę komentarz na tych słowach … Przedstawiam wytyczne z noty w postaci wycinków precyzujących te zagadnienie, i sensowny komentarz pozostawiam dla każdego z osobna …

charakterystyka Vcc dla BMP180dopuszczalne napiecia magistrali TWI dla BMP180aplikacja dla BMP180

Ciekawostką jest możliwość rozdzielenia napięcia zasilania głównego od napięcia zasilania linii IO, gdzie może wystąpić niewielka różnica w napięciu.

No i jeszcze jeden obrazek ale „na Boga” absolute maximum ratings oznacza graniczne napięcie przy jakim układ nie zostanie jeszcze zniszczony, a nie przy jakim będzie prawidłowo działał …

maximum Vcc dla BMP180

A.D. 2017-04-02 Jakiś czas temu podczas prywatnych rozmówek z zaznajomionym BARTkiem otrzymałem informację:

… w razie czego już mogę napisać Ci że obsługa BMP280 i BME280 pod względem temperatury i ciśnienia jest taka sama i układy są zamienne i jak podłączę to pokazują dokładnie to samo tyle, że BME ma dodatkowo wilgotność …

Dodatkowo zwrócił też uwagę na istotny fakt, że przy korzystaniu z polecenia SHIFT powinno stosować się parametr SIGNED. Jest to opcja, która działa tylko z przesunięciami w prawo. Zachowuje bit znaku, który w przeciwnym razie zostałby wyczyszczony przez pierwsze przesunięcie. Zatem prezentowane kody należy uzupełnić o ten parametr w instrukcjach używających przesunięcia w prawo, inaczej obliczenia w pewnych warunkach mogą być błędne.


ciekawe wiadomości o podobnych czujnikach łącznie z kodami do obsługi w Bascom AVR można przeczytać tu. 😉

nota katalogowa BST-BMP180-DS000-09.pdf (3905 pobrań ) wersja 2.5 z 2013-04
nowa nota katalogowa BST-BMP180-DS000-121-1.pdf (5306 pobrań ) wersja 2.8 z 2015-05
nota katalogowa stabilizatora XC6206P332MR.pdf (3678 pobrań )
kod dla BMP180 Bascom AVR BMP180.bas_.zip (277 pobrań ) dwa przykłady

Otagowano , , , .Dodaj do zakładek Link.

2 odpowiedzi na „BMP180 Bascom i pomiar wysokości … taaak to nie pomyłka.

  1. BMP280 komentarz:

    Cześć,
    Używając aplikacji w telefonie do pomiaru ciśnienia i wysokości otrzymałem 983,7 hPa i 204 m n.p.m..
    Użyłem Twojego wzoru do obliczenia wysokości. Podstawiłem zmierzone ciśnienie 983,7 i ciśnienie p0. Wyliczyłem wysokość i wyszło 249 m. Czy możesz wytłumaczyć dlaczego te wysokości się nie zgadzają. W jaki sposób mam wyliczyć prawidłową wartość?

    • kaktus komentarz:

      Witam.
      Na wstępie polecę się zapoznać z notką katalogowa wersja 2.8 z 2015-05. Strona 16 prezentuje ten wzór i trochę wyjaśnień.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

pięć × pięć =

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.