Forum: Mikrocontroller und Digitale Elektronik BMP085 Druck Pa in Höhe umrechnen


von drucki (Gast)


Lesenswert?

der BMP085 ist ein Druckmesser von Bosch. Nachdem man die 
Kalibrierungsdaten und die Temperatur für die Korrektur ausgelesen hat, 
steht der Druckwert
in einem int32_t zur Verfügung. Die Einheit ist Pa (mBar).

Auch findet man im Datenblatt:

https://www.sparkfun.com/datasheets/Components/General/BST-BMP085-DS000-05.pdf

Seite 14

die Formel zum Berechnen der absoluten Höhe. für p0 kann man 101325 Pa 
wählen (das ist der Standart).

Wie lässt man den Mikrocontroller die Formel schön rechnen? Da ist ja 
ein Exponent drin.
p= gemessener Druck

altitude= 44330* ( (1-(p/p0)^(1/5.255) )

dieses "^" soll ein "hoch" darstellen.
Will keine Datei einbinden

von Micha (Gast)


Lesenswert?

Standard!

Wie hoch ist die tatsächliche Auflösung des Messwertes? Sicher nicht 32 
Bit... Nenn mal den Wertebereich und die "Schrittgröße".

Sehr wahrscheinlich kommst du mit einer recht übersichtlichen Tabelle 
und linearer Interpolation dazwischen aus, ohne einen nennenswerten 
zusätzlichen Fehler zu erzeugen.

von c-hater (Gast)


Lesenswert?

drucki schrieb:

> die Formel zum Berechnen der absoluten Höhe. für p0 kann man 101325 Pa
> wählen (das ist der Standart).

Vorsicht: Nur weil das irgendein Trottel aus unerfindlichen Gründen zum 
Standar_d_ erklärt hat, fühlt sich die Natur da absolut nicht dran 
gebunden und läßt ihn weiterhin örtlich und zeitlich nach Belieben 
schwanken.

D.h.: Wenn dich die Höhe wirklich interessiert, wirst du es so machen 
müssen, wie jeder Pilot auch: auf den lokalen Luftdruck in bekannter 
Höhenlage kalibrieren. Und zwar immer wieder neu, wenn du den Ort 
wechselst oder auch einfach nur etwas Zeit vergeht. Zur barometrischen 
Höhenmessung gehört also auch immer eine entsprechende 
Kalibriermöglichkeit in der Firmware, wo man eine Referenzhöhe und den 
dortigen Luftdruck eingeben kann.

> Will keine Datei einbinden

Dann wirst du selbst eine Exponentialfunktion schreiben müssen. Und auch 
gleich noch was zum Logarithmieren. Das brauchst du dann zum 
Kalibrieren.

Mein Vorschlag: binde doch besser einfach eine Datei ein. Wer so fragt 
wie du, der ist wahrscheinlich nicht in der Lage, sowas selber zu 
implementieren.

von Thomas (kosmos)


Lesenswert?

Nicht nur die Höhe selbst sondern auch dann Wetter verändert den 
Luftdruck. Deswegen kann man da nicht so genau die Höhe daraus ableiten. 
In der Fahrzeugtechnik wird das zur Anpassung der Einspritzmenge 
hergenommen und da speilt die Luftmasse ne Rolle unabhängig von der Höhe 
in der sich das Fahrzeug befindet.

von Cyblord -. (cyblord)


Lesenswert?


von Easylife (Gast)


Lesenswert?

Auch ein Mikrocontroller "kann" float, wenn man die entsprechende 
Library einbindet...
Für genau deinen Sensor hat sich schon mal jemand Gedanken und Mühe 
gemacht...:

http://www.sicklinger.com/atmel-avr-atmega-bmp085-library-in-c.html
http://www.sicklinger.com/en/component/remository/func-startdown/8/?Itemid=54

von Oldie (Gast)


Lesenswert?

Das kann man auch ohne externe Library mit etwas
"zu-Fuß-Integer-Rechnung" hinkriegen.

Bei einem ähnlichen Problem habe ich mir eine asm-Funktion
geschrieben, die den Log2 einer Zahl ermittelt hat.

Danach ist der Exponent (1/5,255) nur noch eine
Integer-Multiplikation mit 12471, wonach das Produkt
durch 65536 geteilt werden muss: untere 2 Byte des Ergebnisses
verwerfen.

Dann muss das Ganze wieder "entlogarithmiert" werden, was man
auch in asm bewerkstelligen kann.

Die log/antilog-Prozeduren erfordern somit keine extra
Library, aber doch schon einige 100 Byte asm-Code.

Ärgerlich bei diesem Sensor ist allerdings, dass er nur
von 0...65 °C Temperatur-kompensierbar ist.
Wenn du mal auf den Mt. Everest (8850 m) kletterst, solltest
du den Sensor unter der Jacke tragen, in freier Luft herrschen
dort auch bei sonnigem Wetter eisige MINUS-Temperaturen
von -20 bis -60 °C.

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.