Genauigkeit des BMP085 Drucksensors von Bosch?

OP #3256932
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
Gast #3256956
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.
Gast #3256965
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);
Gast #3256979
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.
OP #3257422
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.
Gast #3257435
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?
Gast #3257741
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren