BMP 180 Pressure Sensor

By | 11. Februar 2017

Bei dem BMP180 Sensor von Bosch handelt es sich um einen MEMS-Sensor, it dessen Hilfe der aktuellen Luftdruck und die Temperatur mit Hilfe eines Microcontrollers über das I2C Protokoll gemessen werden können.

Aus diesen beiden Werten lässt sich dann über die nebenstehenden Formel (aus dem Datenblatt entnommen) auch die aktuelle Höhe über NN berechnen.


Der Sensor ist auf einem Breakout-Board zu beziehen, er kann mit 5V oder 3.3V betrieben werden und hat die benötigten Pull-Up Widerstände des I2C Busses bereits integriert.

Wie in dem nebenstehenden Schaltbild (siehe Datenblatt)  dargestellt, ist der Sensor mit wenigen Verbindungen mit einem Microcontroller zu verbinden und direkt einsatzbereit. Daher ist er auch sehr geschätzt in der Maker Szene, wo es bereits verschiedene Bibliotheken gibt, die den Einsatz zusätzlich erleichtern. Beim BMP180 handelt es sich um den Nachfolger des BMP85, der etwas kleiner ist sonst aber die gleichen Funktionen aufweist.

Technische Daten

  • Vin 3.3V bis 5.0V
  • Logic: 3 to 5V compliant
  • I2C Adresse ist 1110111b (0x77h, 119d).
  • Luftdruck: Auflösung 16 bis 19 Bit bzw. 0,01 hPA. Messbereich von 300 bis 1100hPa.
  • Temperatur: Auflösung von 16 Bit bzw. 0,1°C. Messbereich von -40 bis 85°C.
  • Stromverbrauch bei Messung 1mA, Standby 4µA.

 

Praktische Verwendung
Der BMP180 hat in seinem EEPROM verschiedene Register. In diesen Registern stehen zum einen die Messwerte der Sensorzellen und zum anderen insgesamt 11 individuelle Koeffizienten (je 16 Bit), welche zur Kalibrierung des Messdaten herangezogen werden müssen. Die Koeffizienten werden am besten einmal initial vor der ersten Messung ausgelesen und gespeichert. Weitere relevante Register-Adressen sind in der folgenden Tabelle dargestellt:

Die Messung der Druck und Temperatur-Werte erfolgt nach folgendem Schema, das in aller Ausführlichkeit  im Datenblatt dokumentiert ist und daher hier nur schematisch beschrieben wird:

Die Auflösung der Messung wird über ein 2Bit großes Flag mit der Bezeichnung OSS (= oversampling_setting) bestimmt und die Werte (0,1,2,3) annehmen.

Alle diese Hardware-nahen Schritte sind erfreulicherweise von Experten bereits implementiert worden, und werden dem ungeübteren Nutzer in Form von Bibliotheken zur Verfügung gestellt. Im folgenden ist als Beispiel die Bibliothek von Adafruit verwendet worden. Es gibt aber noch viele weitere solcher Bibliotheken. Beispielsweise ist von der Firma SparcFun ist ebenfalls eine Bibliothek für diesen Sensor mit dem Namem SFE_BMP180 verfügbar.

Verwendung des Sensors mit der Adafruit Library

Das Programm liefert dann folgende Ausgabe:

 

Auslesen der Sensor-Daten ohne Library

Wenn man keine Library verwenden möchte, muss man die Datenregister des Sensors direkt ansprechen und auslesen. Wie das zu bewerkstelligen ist, kann man am einfachsten dadurch testen, in dem man die Sensor ID ausliest. Dazu ist ein typischer I2C Kommunikationsablauf durchzuführen.

In dem Programm-Listing wird eine Kommunikation mit dem Device mit der Adresse 0x77 aufgebaut und 1 Byte ab Adresse oxD0 eingelesen und in der Variable abgelegt und dann in Hexadezimaler Form ausgegeben.

Um nun auf die Messwerte von Druck und Temperatur zugreifen zu können, muss wie im oben vorgestellten Schema eine Messung durch Initialisieren des CTR-Registers gestartet werden. Dazu wird der Wert 0x2E in das Register geschrieben. Dadurch werden die Messwerte nach etwa 4.5 ms in die entsprechenden Register geschrieben und können dann ausgelesen werden.

Der Programmtext sieht für das Lesen der Temperatur wie folgt aus:

Um aus den Rohdaten nun die genauen Temperatur- und Druckdaten zu berechnen, sind noch einige weitere Schritte erforderlich. Insbesondere die Berücksichtigung der Korrektur-Parameter. Da dies alles andere als anschaulich ist, soll hier auf eine Darstellung verzichtet werden. Interessierte können sich aber die Berechnung in den oben schon erwähnten Bibliotheken im Detail anschauen.