Forum: Mikrocontroller und Digitale Elektronik BMP280 Kalibrierwerte falsch


von Hans Pater Barometer (Gast)


Lesenswert?

Das Ding zeigt bei mir falsche Tempwerte an. Erst dachte ich mein Code 
stimmt nicht, mit den Beispielwerten aus dem Datenblatt liefert er aber 
genau das korrekte Ergebniss, sowohl die Fixpointumsetzung als auch die 
mit Fliesskommanzahlen aus dem Datasheet.
Divese Libs habe ich auch probiert, deren Code sieht auch nicht anders 
aus und liefert die gleichen falschen Werte wie meiner bzw. die 
richtigen Werte wenn ich die Beispielwerte aus dem Datasheet einsetze.
Ergo können nur die Kalibirierdaten im Sensor falsch sein (27° zu 
wenig).

Hat jemand ne Idee wie man die drei Werte von Hand ermitteln kann?

Druckmessung habe ich noch nicht gemacht.

Sensor wurde als Modul "vom Chinesen" auf ebay gekauft, vermutlich war 
es deshalb so günstig, weil sie einem den Ausschuss andrehen.

von Hans Pater Barometer (Gast)


Lesenswert?

Jetzt habe ich mal den Druck ausgelesen, funktioniert, Werte sind wohl 
korrekt wenn ich die mit den aktuellen Daten von Wetterdiensten zu 
meinem Standort vergleiche.

von Wolfgang (Gast)


Lesenswert?

Hans Pater Barometer schrieb:
> Hat jemand ne Idee wie man die drei Werte von Hand ermitteln kann?

Ich würde ein Excel Worksheet nehmen und dazu das Solver Add-In.

In die Formel zur Berechnung der Temperatur gehen lt. Datenblatt 3 
Kalibrierparameter (dig_T1..T3) ein. Also brauchst du 3 Messungen bei 
bekannter Temperatur, die deinen gewünschten Messbereich vernünftig 
abdecken.
Die Berechnungsformel gefüttert mit den 3 Datensätzen ergibt 3 
Gleichungen, die sich nach den 3 Kalibrierkonstanten auflösen lassen 
sollten - oder du lässt den Solver suchen.

von Hans Pater Barometer (Gast)


Lesenswert?

Stimmt, da hätte ich auch selbst drauf kommen können. Manchmal sieht man 
den Wald vor lauter Bäumen nicht.

von Rene K. (xdraconix)


Lesenswert?

Im übrigen... Mal von den 27°C abgesehen, wo ich denke das da ein 
Rechenfehler ist. Sei dir Bewusst das der Sensor KEINE 
Umgebungstemperatur wiedergibt, sondern die PCB Temperatur des Sensors 
zur Temperaturkompensation des Luftdrucksensors.

Siehe Datenblatt Seite 8:

"Temperature measured by the internal temperature sensor. This 
temperature value depends on the PCB temperature, sensor
element self-heating and ambient temperature and is typically above 
ambient temperature. "

: Bearbeitet durch User
von Kesselhaus (Gast)


Lesenswert?

Rene K. schrieb:
> Im übrigen... Mal von den 27°C abgesehen, wo ich denke das da ein
> Rechenfehler ist. Sei dir Bewusst das der Sensor KEINE
> Umgebungstemperatur wiedergibt, sondern die PCB Temperatur des Sensors
> zur Temperaturkompensation des Luftdrucksensors.
Die Raumtemp ist 27°C, der Sensor zeigt 0.05°C an. Der Sensor wird wohl 
kaum kälter sein als die Umgebung.

Ein Rechenfehler kann ich ausschliessen weil es mit den Beispieldaten 
aus dem Datasheet problemlos funktioniert, mit jeder der dort angegeben 
Umrechnungsroutinen, nur mit dem realen Werten aus dem Sensor geht es 
nicht. Die Routine habe ich übernommen für die Druckmessung, den entspr. 
Formelpart und Registeraddressen geändert, das funktionierte auf Anhieb.

Wenn man den Sensor nicht für Tempmessung aktiviert und ihn trotzdem 
ausliest liefert er 0x80 0x00 0x00 (MSB, LSB, XLSB), daran erkennt man 
dass eben die Tempmessung nicht aktiviert wurde, das ist aber nicht der 
Fall.
Sie ist konfiguriert und aktiviert und liefert einen anderen Wert wie 
oben, also ist sie aktiv.

Schaut man sich die drei bytes an die er ausliest sind sie von 0x80 0x00 
0x00 verschieden, LSB ändert sich wenn man den Sensor z.B. anhaucht, der 
misst also schon irgendwas und reagiert auf Änderungen, nur halt mit dem 
Offset von ca 27°C.

Aktuell liefert er 0x7E, 0x06, 0x00 rechnet man das mit den 
Korrekturdaten aus dem Sensor um (32-Bit-Variante hinten im Datasheet, 
fixpoint) kommt 0.05 °C raus, mit den anderen Umrechnungsroutinen 
ebenso,
ein anderes Thermometer zeigt Raumtemp 27°C an.

Die Korrekturdaten habe ich auch schon mehrmal ausgelesen, sind immer 
identisch, das ID-Register liefert auch den Korrekten Wert, beim Druck 
funktioniert auch alles und liefert korrekte Werte, I2C-Problem kann ich 
also auch ausschliessen.

Ich habe schon mit versch. Oversamplingeinstellungen und 
IIR-Filterkonfigs  probiert, Ergebniss immer mit dem Offset von 27°C.

von Oliver J. (skriptkiddy)


Lesenswert?

Ich habe bei den Bosch-Sensoren aufgehört den Code selber zu schreiben. 
Das ist sehr fehleranfällig und somit nicht zielführend, wenn man da 
ewig debuggen muss - Der Grund sind diverse Integerüberläufe, die bei 
der Berechnung sehr schnell auftreten können, wenn man mal einen Cast 
vergisst.

Es gibt von Bosch selbst C-Code [1] für den BMP280. Den kann man sich 
herunterladen und hat dann im Normalfall keinerlei Probleme. Es gibt 
dort in der Regel sogar verschiedene Berechnungsfunktionen, die wenn man 
auf Genauigkeit verzichten kann auch gut für kleine µC geeignet sind.

Grüße Oliver

[1] https://github.com/BoschSensortec/BMP280_driver

: Bearbeitet durch User
von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Kesselhaus schrieb:
> Die Raumtemp ist 27°C, der Sensor zeigt 0.05°C an. Der Sensor wird wohl
> kaum kälter sein als die Umgebung.
>
> Ich habe schon mit versch. Oversamplingeinstellungen und
> IIR-Filterkonfigs  probiert, Ergebniss immer mit dem Offset von 27°C.

Ja was denn nu?
Immer 27° Offset oder immer 0.05°?

von Kesselhaus (Gast)


Lesenswert?

Hatte mir auch einen BMP180 bestellt, kam gestern an. Auslese- und 
Umrechnungsfunktionen wieder selber geschrieben und mit Fremdlibs 
verglichen, unter armbian automatisch erkannt: Funktioniert sofort wie 
er soll keine Zicken, keine Ausreisser.
Jetzt merke ich dass die Druckwerte des 280er im Vergleich zum 180er 
auch verschoben sind (Ja ich habe die Höhe berücksichtigt), der 180er 
stimmt nach Umrechnung auf Meereshöhe sehr genau mit nahe gelegenen 
Wetterstationen (fast gleiche Höhe) überein, der 280 liegt konstant 
10-12 hPa drüber. Beim Luftdruck ist mir der Wert an sich egal, da 
interessiert mich nur der Verlauf, ob das jetzt x Einheiten nach 
oben/unter verschoben ist, interessiert mich nicht, dafür wäre er noch 
brauchbar aber dass die Temp so krass abweicht. Zeitweise scheint er 
auch nen Hänger zu haben, da ändert sich dann der Wert längere Zeit 
nicht, obwohl andere Sensoren deutlich abfallen/steigen.

Liest man sich in anderen Foren die Probleme zum BMP280/BME280 durch, 
ist das Teil ziemlicher Müll, zeigt generell zu hohe Temp an, weil er 
sich erhitzt im Normalmode, setzt man das Intervall rauf oder nimmt den 
ForcedMode wird es etwas besser, ist zwar innerhalb der Toleranz aber 
wenn zig andere Tempsensoren alle 1.5-2°C drunter liegen und nur um 
0,1-0.05° ausseinanderliegen, dann ist das Teil einfach minderwertig, 
bei mir ist die Tempmessung ja völlig daneben.
Der BME kann ja zusätzlich noch Luftfeuchte, da haben diverse Besitzer 
auch krasse Ausreisser. Der BMP280 ist wohl der Ausschuss der bei der 
Luftfeuchte komplett versagte und wird dann als abgespeckte Version 
verkauft.

Mit dem BMP180 hat keiner solche Problem, BMP/BME ist wohl ne 
Gurkenserie deren Ausschuss nach China verkauft wurde und jetzt dort via 
Banggood, ebay als Modulschund für Bastler vertickert wird.

Ab in den Mülleimer damit, jede weitere Beschäftigung damit ist 
Zeitverschwendung.

von Rene K. (xdraconix)


Lesenswert?

Und der nächste der es nicht verstanden hat das die Temperatur keine 
Umgebungstemperatur ist! Es ist die PCB- / Membran Temperatur!!!! 
Deswegen die 2-3°C höhere Temperatur! Diese Sensoren sind NICHT dafür 
Gedacht die Umgebungstemperatur zu messen! Sondern die Temperatur wird 
für die Kompensation und Dew-Point Berechnung gebraucht - zu nix weiter!

Man sollte das echt beim Absenden eines Textes in denen die Worte SHT, 
BMP etc... Und Temperatur vorkommenden nen rotes Hinweisfenster 
einblenden.

von Wolfgang (Gast)


Lesenswert?

Kesselhaus schrieb:
> der 180er stimmt nach Umrechnung auf Meereshöhe sehr genau mit nahe
> gelegenen Wetterstationen (fast gleiche Höhe) überein, der 280 liegt
> konstant 10-12 hPa drüber.

Wenn du beim BMP280 die Umrechnungsroutine für den Druck mit deinen 
falschen Temperaturen fütterst, wäre das ja verständlich.

von Oliver J. (skriptkiddy)


Lesenswert?

Ich hab hier diverse I2C-Sensoren am Start (alle aufm Steckbrett):

*** BMP085/BMP180-Test ***
Chip-ID: 0x55
Pressure/Temp: 95743 Pa  @  20.1 °C
Altitude: 476.41

*** BME280-Test ***
Chip-ID: 0x60
Pressure/Temp: 95799 Pa  @  20.2 °C and 71.4%RH

*** LM92-Test ***
Value:     21.6875°C  +021°C  (015B)

*** Sht21Test ***
Humidity    : 68.4
Temperature : 21.4


Alles aus China (mit Ausnahme des LM92).
Für meine Anwendungsfälle reicht die Genauigkeit durchaus. Dass man 
damit keine präzisen Messinstrumente bauen kann, sollte jedem klar sein.

Grüße Oliver

von Oliver J. (skriptkiddy)


Lesenswert?

Hans Pater Barometer schrieb:
> Ergo können nur die Kalibirierdaten im Sensor falsch sein

Kannst du bitte deinen Code posten? Eventuell ist ja ein Fehler beim 
interpretieren der Kalibrierdaten oder ähnliches (Da reicht schon ein 
falscher oder vergessener Cast aus und man hat verloren). Ich habe schon 
einige von den 1Euro-Chinateilen probiert und bei diesen Sensoren gab es 
bisher nur gravierende Abweichungen, wenn ich einen Fehler gemacht hab.

Grüße Oliver

von Wolfgang (Gast)


Lesenswert?

Oliver J. schrieb:
> *** BMP085/BMP180-Test ***
> Chip-ID: 0x55
> Pressure/Temp: 95743 Pa  @  20.1 °C
> Altitude: 476.41

Dann solltest du auch verraten, was du deinem Sensor als Input gegeben 
hast. Den Luftdruck kann er messen. Die Höhe nicht.

Damit die Höhe berechnet werden kann, musst du beispielsweise den 
Luftdruck auf NN vorgeben und kannst dann mit der barometrischen 
Höhenformel rechnen. Ohne Zusatzinformation wird das nichts. Und wenn 
die Eingabe falsch ist, kommt eine Hausnummer raus.

von Rene K. (xdraconix)


Lesenswert?

Der Luftdruck auf NN ist Normgerecht mit 101.325 Pa vorgegeben. Ob dies 
an diesem Tag, zu diesem Zeitpunkt wirklich so ist, sei dahingestellt - 
das spielt keine Rolle. Aber dies ist die Berechnungsgrundlage.

Beitrag #5094164 wurde vom Autor gelöscht.
von Wolfgang (Gast)


Lesenswert?

Rene K. schrieb:
> Der Luftdruck auf NN ist Normgerecht mit 101.325 Pa vorgegeben. Ob dies
> an diesem Tag, zu diesem Zeitpunkt wirklich so ist, sei dahingestellt -

> das spielt keine Rolle.

Das spielt es wohl. Der Sensor misst nicht irgendeinen "normgerechten" 
Druck auf Stationshöhe - was auch immer das sein soll, sondern den 
tatsächlichen.

von Oliver J. (skriptkiddy)


Lesenswert?

Wolfgang schrieb:
> Das spielt es wohl. Der Sensor misst nicht irgendeinen "normgerechten"
> Druck auf Stationshöhe - was auch immer das sein soll, sondern den
> tatsächlichen.

Deshalb wird so etwas vor Benutzung kalibriert. Aber das tut hier nichts 
zur Sache.

Grüße Oliver

von Wolfgang (Gast)


Lesenswert?

Oliver J. schrieb:
> Deshalb wird so etwas vor Benutzung kalibriert. Aber das tut hier nichts
> zur Sache.

Du kannst auf eine bekannten Stationshöhe gehen, dort aus dem gemessenen 
Druck und der bekannten Höhe den Druck auf NN ausrechnen und dann - 
solange der tatsächliche Druck auf NN sich nicht ändert - aus deinem 
tatsächlich gemessenen Luftdruck deine tatsächliche Höhe berechnen. Das 
hat aber nichts mit den 101325 Pa Normaldruck auf Meereshöhe zu tun.

Und mit kalibieren hat das auch wenig zu tun. Kalibrieren stellt alleine 
Abweichungen von einem Normal fest.
https://de.wikipedia.org/wiki/Kalibrierung

von Rene K. (xdraconix)


Lesenswert?

Wolfgang schrieb:
> Und mit kalibieren hat das auch wenig zu tun. Kalibrieren stellt alleine
> Abweichungen von einem Normal fest.
> https://de.wikipedia.org/wiki/Kalibrierung

Ja richtig, und das festgelegte Normal für Pa ü. NN ist halt nun mal 
101.325 Pa.

Ob ich den Sensor nun dann auf 500M mit dem dort aktuellen Pa auf 500M 
KALIBRIERE - dann kann dennoch der Pa auf 700M oder NN von dieser 
Kalibrierung abweichen. Der Pa ist immer Ortsabhängig - deswegen gibt es 
einen festgelegtes Normal mit dem alle rechnen, ja selbst die Luftfahrt.

Ich verstehe dein Problem da gerade nicht?!

von Wolfgang (Gast)


Lesenswert?

Rene K. schrieb:
> Ob ich den Sensor nun dann auf 500M mit dem dort aktuellen Pa auf 500M
> KALIBRIERE

Also hast du ihm den dort gemessenen Druckwert als Druck für 500m Höhe 
vorgegeben und rechnest mit Nichten aus dem NN Normaldruck und dem 
gemessenen Druck deine Höhe aus - das meinte ich mit 
"Zusatzinformation".

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.