Forum: Mikrocontroller und Digitale Elektronik Genauigkeit des BMP085 Drucksensors von Bosch?


von Christian J. (elektroniker1968)


Lesenswert?

Hallo,

seit kurzer Zeit betreibe ich an einem Arduino diesen Sensor mit I2c 
Interface und benutze dazu eine Lib von der Ard. Playground Seite, 
welcher scheinbar "gut bekannt" ist. Auch eine andere Lib sah ähnlich 
aus, was die Berechnungen des Druckes anging und ein vergleich gegen das 
Datenlatt schien "richtig".

Nur leider zeigt mir der BMP085 grad heute an: 1007 mBar

Die amtliche Angabe für meinen Wohnort aber ist: 1012 mBar und meine 
Wetterstation an der Wand zeigt 1012 an.

Der amtlichen Angabe durch kal. Messgeräte traue ich mehr und bestätigt 
wird das durch meine Mebus Station. Also: Arduino oder der Sensor 
rechnet falsch!

In meiner Not: Grübel.... ok, addieren wir doch einfach die 5mBar oder 
500 HPa drauf, wenn das vielleicht linear ist (Frickel-Lösung)

Was stimmt da nicht? Der Sensor ist werkskalibriert, die Werte liegen im 
EEPROM. Die Lib benutzen auch 1000 andere.


Der Punkt wo der Elefant das Pipi macht ist hier:

1
// do temperature calculations
2
  X1 = ((UT - (int32_t)ac6) * (int32_t)ac5) >> 15;
3
  X2 = ((int32_t)mc << 11) - (X1 + md)/2;     // round up
4
  X2 /= (X1 + md);
5
  B5 = X1 + X2;
6
7
  // do pressure calcs
8
  B6 = B5 - 4000;
9
  X1 = ((int32_t)b2 * ( (B6 * B6)>>12 )) >> 11;
10
  X2 = ((int32_t)ac2 * B6) >> 11;
11
  X3 = X1 + X2;
12
  B3 = ((((int32_t)ac1*4 + X3) << oversampling) + 2) / 4;
13
14
  X1 = ((int32_t)ac3 * B6) >> 13;
15
  X2 = ((int32_t)b1 * ((B6 * B6) >> 12)) >> 16;
16
  X3 = ((X1 + X2) + 2) >> 2;
17
  B4 = ((uint32_t)ac4 * (uint32_t)(X3 + 32768)) >> 15;
18
  B7 = ((uint32_t)UP - B3) * (uint32_t)( 50000UL >> oversampling );
19
20
  if (B7 < 0x80000000) {
21
    p = (B7 * 2) / B4;
22
  } else {
23
    p = (B7 * 2) / B3;
24
  }
25
  X1 = (p >> 8) * (p >> 8);
26
  X1 = (X1 * 3038) >> 16;
27
  X2 = (-7357 * p) >> 16;

Schön, glaube ich mal so, so stehts im Datenblatt auch....

Gruss,
Christian

von Michael (Gast)


Lesenswert?

Christian J. schrieb:
> Der amtlicen Angabe traue ich mehr und bestätigt wird das durch meine
> Mebus Station.

Woher wissen die amtlichen Angabe, auf welcher Höhe über NN du dein 
Barometer stehen hast und wie sieht es mit der angegebenen Genauigkeit 
deiner Mebus Station aus?
5hPa entspricht einem Höhenfehler von gerade 40 Metern.

von Christian J. (elektroniker1968)


Lesenswert?

Die Messwarte befindet sich in meinem Ort: Düsseldorf. Und das ist platt 
wie ein Pfannekuchen. Außerdem wird der Wert bestätigt durch meine 
Wetterstation. Ergo: 2 gegen 1.

von Hugo (Gast)


Lesenswert?

Probier mal meine Variante:


// Calculate the true pressure.
        b6 = b5 - 4000L;
        x1 = ((signed long)b2 * ((b6 * b6) >> 12)) >> 11;
        x2 = (signed long)ac2 * b6 >> 11;
        x3 = x1 + x2;
    b3 = ((((signed long)ac1 * 4L + x3) << OSS) + 2) >> 2;
        x1 = ((signed long)ac3 * b6) >> 13;
        x2 = ((signed long)b1 * (b6 * b6 >> 12)) >> 16;
        x3 = ((x1 + x2) + 2) >> 2;
        b4 = ((unsigned long)ac4 * (unsigned long)(x3 + 32768L)) >> 15;
        b7 = ((unsigned long)up - (unsigned long)b3) * (50000L >> OSS);
     if (b7<0x80000000) {p=(b7*2L)/b4;}
      else { p=(b7/b4)*2L;}

       // p = (signed long)((b7 < 0x80000000) ? (b7 * 2L) / b4 : (b7 / 
b4) * 2L);

        x1 = (p >> 8) * (p >> 8);
        x1 = (x1 * 3038L) >> 16;
        x2 = (-7357L * p) >> 16;
        *pressure = p + ((x1 + x2 + 3791L) >> 4);

von Michael (Gast)


Lesenswert?

Christian J. schrieb:
> Die Messwarte befindet sich in meinem Ort: Düsseldorf.

Kann man's wissen.
Andere Leute wohnen auf der Alm, 1000 m über'm nächsten Ort ;-)

> Und das ist platt wie ein Pfannekuchen:
Das ändert aber nichts daran, dass es 40..45m über NN liegt. Sind die 
Werte, die du von der Messwarte hast, der gemessene Bodendruck oder die 
auf NN korrigierten Angaben.

von Anja (Gast)


Lesenswert?

Christian J. schrieb:
> Die amtliche Angabe für meinen Wohnort aber ist: 1012 mBar

Das ist immer bezogen auf Meereshöhe (also höhenkorrigiert)

Gruß Anja

von Christian J. (elektroniker1968)


Lesenswert?

Na, da klingelts !!!! Wenn das normiert ist, dann verstehe ich den 
Unterschied, der zufällig so hoch ist wie mein Wohnort über NN liegt.

Wo finde ich denn die Normierungformel? Oder sind die BMP085 bereit 
normiert? Eher nicht denke ich....

Gefunden habe ich:

Luftdruck auf Meereshöhe = Barometeranzeige / 
(1-Temperaturgradient*Höhe/Temperatur auf Meereshöhe in 
Kelvin)^(0,03416/Temperaturgradient)

Da ist aber die Temperatur mit drin und die kenne ich natürlich nicht 
auf Meereshöhe sondern nur an meinem Standort.

von mik (Gast)


Lesenswert?

Beim BMP085 gab es irgendwo mal eine Abweichung von Beispiel-Code zu 
Datenblatt oder umgekehrt, recherchier das nochmal genau.

von Michael (Gast)


Lesenswert?

Christian J. schrieb:
> Die amtliche Angabe für meinen Wohnort aber ist: 1012 mBar und meine
> Wetterstation an der Wand zeigt 1012 an.

Bleibt noch die Frage, wie deine Wetterstation zu den amtlichen Werten 
kommt. Oder hast du der irgendwann einmal deine Wohnorthöhe in die 
Konfiguration eingegeben?

von Anja (Gast)


Lesenswert?

Christian J. schrieb:
> Oder sind die BMP085 bereit
> normiert? Eher nicht denke ich....

Nö beim Auto wird der reale Luftdruck benötigt um die richtige Menge 
Kraftstoff einzuspritzen.

Gruß Anja

von tmomas (Gast)


Lesenswert?

Bei meiner WS2300 Wetterstation wird unterschieden zwischen

- P_absolut
- P_relativ

P_absolut ist - wer hätte das gedacht - der absolute Druck (unabhängig 
von der likalen Höhe).

P_relativ ist der absolute Druck umgerechnet auf Meereshöhe (das ist der 
Wert, den man in Wettervorhersagen hört/sieht, und nur dieser 
interessiert).

Die Anleitung der Wetterstation sagt: Um den relativen Druck 
einzustellen guckt man nach, welchen Druck eine bekannte in der Nähe 
befindliche Wetterstation liefert - und stellt eben diesen Druck an der 
Wetterstation ein.

Demnach muß gelten: P_rel = P_abs - P_delta

Also einfach einen konstanten Wert (der abhängig ist von der lokalen 
Höhe) subtrahieren und fertig.

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.