Forum: Projekte & Code Luftdruckmessungen mit dem Bosch BMP085 auf ATMEGAx8 in C


von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

Luftdruckmessungen mit dem Bosch BMP085 auf ATMEGAx8 in C

Wer schon einmal einen Luftdruckmesser mit analogen Sensoren aufgebaut 
hat, der weiß das einfache Handling der kalibrierten und digital 
auslesbaren Sensoren zu schätzen.

Es gibt es eine sehr gute Dokumentation zum BMP085 und auch zahlreiche 
Programmbeispiele.
Aber in den von mir gesichteten waren die Oversampling Modes nur 
teilweise implementiert.

Daher habe ich - aufbauend auf den Standardvorlagen - den C-Code für die 
ATMEGA's etwas umgehäkelt.

In der "bmp085_a.h" kann eingestellt werden:
- Oversampling Mode [0 .. 3] für die Pressure-Werte
- optionales Software Oversampling der Pressure-Wert
- Einlesen von 16 oder 19-Bit-Pressure-Messwerten (bei OSS > 0)
- optionale gleitende Mittelwertbildung der Druckmesswerte

Die Ausgabe erfolgt via serieller Schnittstelle.
Angezeigt werden zuerst die Raw-Werte des Sensors und anschließend die 
umgerechneten Temperatur- und Luftdruckwerte (siehe Beispiel 
"messwerte_1.jpg").

Da in die Berechnung des Luftdruckes auch die Temperatur eingeht - und 
deren Messwerte natürlich auch rauschen, werden die Temperaturwerte als 
gleitender Mittelwert aus den letzten 8 Messungen berechnet.

Das Rauschen der Pressure-Werte wird beeinflusst durch die Anzahl der 
Messungen (und dem daraus ermittelten Durchschittswert).
Je nach Einstellung des OSS werden bereits vom Chip Mittelwerte über 0 
bis 8 Einzelmessungen geliefert.
Dadurch reduziert sich der Datenverkehr mit dem Sensor und die Messzeit.

Zusätzlich kann per Software gemittelt werden.

Die Abbildung "messwerte_1.jpg" zeigt Messwerte, im Abstand von ca. 1 
Sekunde gemessen.
Die gewählte Programmeinstellung ist:

OSS  = 3 (hardwareseitig 8 Samples),
SOFTWARE_SAMPLING 4 = (softwareseitig 4 Samples -> 4 * 8 = 32 Messungen 
je  Messwert),
READ_DATA_BITS = 19 (Messwerte des Druckes bis zu 19 Bit breit 
einlesen),
FLOATING_AVERAGE = FALSE (keine gleitende Mittelwertbildung der 
Druckwerte).

Die umgerechneten Druckwerte weichen um bis zu +- 5 Pa ab, die 
Temperaturwerte sind während des Messzeitraumes unverändert.

Die Wahl kleinerer Werte für OSS und Software-Sampling beschleunigt die 
Messung, die Reduktion auf 16-Bit Messwerte verkleinert den 
Rechen/Speicheraufwand (der liegt übrigens in der Größenordnung von 3 
Kb).

Um die Messwerte zu filtern, kann wie bei der Temperatur ein gleitender 
Mittelwert über z.B. 4 Messungen eingeführt werden: das Ergebnis zeigt 
"messreihe_2.jpg".
Die Luftdruckwerte differieren hier nur noch um +- 2 Pa, allerdings 
werden Veränderungen auch mit leichter Verzögerung weitergegeben.


Viel Spaß beim Messen


Michael S.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.