Forum: Mikrocontroller und Digitale Elektronik Absoluter Luftdrucksensor


von Cronix (Gast)


Lesenswert?

Hey,

als Alternative zur Höhenmessung mit GPS soll ich, im Rahmen von einer 
Arbeit von mir, die Höhenmessung mit Hilfe des Luftdrucks ausprobieren.

Dazu habe ich mir folgenden Sensor geholt: MPX 5100 AP

http://www.datasheetcatalog.org/datasheet/motorola/MPX5100D.pdf

Es handelt sich dabei um einen absoulten Sensor, d.h. es sollte kein 
Problem sein diesen Druck zu messen.

Nun habe ich ihn mit Hilfe des AD-Wandlers ausgelesen und er zeigt mir 
einen Wert von 15494 an. Leider kann ich nur den aktuellen Luftdruck in 
unserer Umgebung (aktuell 1004.5 hPA) messen.


1. Nun ist die erste Frage da ich leider noch wenig Erfahrung habe und 
nicht aus dem Datenblatt schlau werde, wie sollte ich den eingelesenen 
ADC Wert am geschicktesten in hPA umrechnen?

Folgend sieht die Funktion bisher aus:
1
// ADC Channel 1 (AN1) wird verwendet
2
set_adc_channel(1);                  
3
// ADC Wert wird eingelesen   
4
value_pressure = read_adc();                  
5
// Skalierung des ADC Wertes ---> Noch zu erledigen!
6
value_pressure = value_pressure;
7
// Ausgabe des Zwischenergebnisses
8
printf(usb_putc,"%Ld - ",value_pressure);
9
// Höhenberechnung
10
height = 18400 * log(1013.2/value_pressure);
11
// Ausgabe des Ergebnisses
12
printf(usb_putc,"%Ld - ", height);

Ich hoffe, ich verwende die richtigen Formeln, bei Fehlern bitte ich 
mich zu korrigieren. Aber ich habe ausführlich diese recherchiert, 
sollte stimmen.. Man kann sie ja leider nur Näherungsweise bestimmen!


2. Ich habe mich entschlossen eine zweite Messung durchzuführen, bei der 
ich die Temperatur beachte (wirkt sich ja auf Luftdruck aus). Nun sieht 
die Formel wie folgt aus. Ich hoffe das wurde alles korrekt von mir 
umgesetzt.
1
// Umrechnung in Kelvin
2
value_temp = value_temp * 274;
3
4
height = -29.255861365953 * (loh(value_pressure) - 6.9208689181275) * value_temp;
5
// Ausgabe per USB
6
printf(usb_putc,"%Ld - ", height);



Ich danke euch im voraus, ihr habt mir schon mehrmals geholfen!!! :) 
Habe leider keinen ähnlichen Thread gefunden :(

l.g.

von kutte (Gast)


Lesenswert?

guck mal hier:
http://www.umnicom.de/Elektronik/Projekte/Wetterstation/Sensoren/Luftdruck/Luftdruck.htm
ist zwar ein anderer Sensor aber sehr schön alles beschrieben. Kutte

von Jackenkoffer (Gast)


Lesenswert?

Also : ich muss sagen : ich kenn mich nicht so gut mit C aus , aber ich 
könnte dir sagen was du machen kannst. du hast doch sicher eine ANZEIGE 
( vllt ein LCD DISPLAY) . du kennst die höhe an zwei verschieden hohen 
orten, und misst dort den Luftdruck. dann hast du Werte die ADC werte , 
die du den höhen zuordnen kannst, und soweit ich weiß ist die 
Luftdruckabnahme in der höhe doch Konstant , dann kannst du einfach eine 
Tabelle erstellen und dann weisst du´s.
Außerdem wäre es vorteilhaft zu wissen was du für mikrocontroller 
verwendest( wenn du einen ADC wert von 15494 hast .. ( welche auflösung 
hat das TEIL ?!?!? XD ), ( und ich glaub ich hab mich geirrt , es ist 
nicht "C" )

Außerdem Hängt das auch der Luftdruck extrem vom Wetter ab .., da würde 
ich evtl noch ein Paar luftfeuchtesensoren ( und wie du es schon machst 
) ein Paar temperatursensoren Verwenden , dann kannst du eine Tabele 
erstellen,  z.B
wenns winter iss, KAlt ; niedrige luftfeuchtigkeit ; ist meist ein " 
tief" und du hast niedrigen luftdruck, dann kanste sagen , den Wert für 
luftdruck etwas erhöhen um die höhe Korrekt zu halten .

MFG aus MÜnchen !!

von Ralli (Gast)


Lesenswert?

Vout = VS (P x 0.009 + 0.04)
       ± (Pressure Error x Temp. Mult. x 0.009 x VS)

Ohne Korrektur bei 1004,5 hPa = 100,45 kPa:

Vout = VS * (100,45 * 0,009 + 0,04)
     = VS * (0,90405 + 0,04) = VS * 0,90805

1: Wie hoch ist VS?
2: Wie hoch ist die Referenzspannung des AD-Wandlers?
3: Was ist der Maximalwert des AD-Wandlers?

"ratiometric" bedeutet: Wenn die Referenzspannung
des AD-Wandlers die Betriebsspannung des Sensors ist,
kürzt sich schon mal einiges raus...

Erst mal vernünftig die Druckwerte erfassen,
dann die Temperaturkorrektur, dann die barometrische
Höhenformel!

Und dann kann man sich über den Rest Gedanken machen.

von Frank B. (f-baer)


Lesenswert?

> 1. Nun ist die erste Frage da ich leider noch wenig Erfahrung habe und
> nicht aus dem Datenblatt schlau werde, wie sollte ich den eingelesenen
> ADC Wert am geschicktesten in hPA umrechnen?

Die im Datenblatt angegebene Übertragungsfunktion in C umzusetzen, 
sollte doch nicht allzu schwer sein, oder? Damit kriegst du auch ohne 
irgendeine an den Haaren hergezogene logarithmische Näherung die 
Korrektur von Nichtlinearität und Offset des Sensors hin.

@Jackenkoffer: Deine Antwort ist nichts als geballter Unfug. Nur weil 
eine Größe linear ist, heisst das noch lange nicht, dass die Messung 
auch linear wäre. Alles andere klärt sich mit einem nicht allzu 
oberflächlichen Blick in das Datenblatt.

von Cronix (Gast)


Lesenswert?

Danke erstmal für die viele Hilfe! :) Habe ganz vergessen zu schreiben 
dass ich den 18F4550 benutze!

Ralli schrieb:
> 1: Wie hoch ist VS?
>
> 2: Wie hoch ist die Referenzspannung des AD-Wandlers?
>
> 3: Was ist der Maximalwert des AD-Wandlers?

1. 5V

2. 5V (USB-Versorgung)

3. Er ist folgend initialisiert:
1
// Init des ADCs
2
   setup_adc(adc_clock_div_32);
3
   setup_adc_ports( AN0_TO_AN1_ANALOG );      // Ref=Vdd

Bei der im Datenblatt genannten Gleichung für Vout versteh ich nur 
nicht, wieso sie wichtig ist. Da er ja bereits Vout einliest. Muss ich 
sie nur nach P umformen und ich habe meine kPa?? ;)

von Dominik R. (drdontknow)


Lesenswert?

Hallo,

ich würde das Signal verstärken:
 150mbar => mehr    12000 m üNN =>0,2V
 800mbar => etwa     2000 m üNN =>3,5V
1050mbar => weniger  0    m üNN =>4,8V

und einen Sensor mit Schlauchanschluss nehmen. Den kannst mit einer 
Luftpumpe etwas Aquariumschlauch, einem T-Stück und einem Zollstock sehr 
gut auf einen neuen Messbereich kalibrieren. Stichwort U-Rohrmanometer
100mBar ~ 1m Wassersäule. (p_ü = p_abs + dichte(Wasser) * 9,81m/s * 
Höhe)

Als Referenz für p_abs ein gutes altes Quecksilberbarometer oder der 
Luftdruck von der Apotheke um die Ecke.

Die Korrektur des Wetters würde ich über die Eingabe des aktuellen 
Luftdrucks bei bekannter Höhe einer nahegelegenen Wetterstation/Apotheke 
vornehmen.

Der Einfluss der Luftfeuchte ist nicht durch einen Sensor möglich da die 
Feuchte der Luftsäule über dir (bis über die Wolken) gemessen werden 
müsste.

Die Berechnung mit Temperaturkorrektur ist hier gut erklärt:
http://de.wikipedia.org/wiki/Barometrische_H%C3%B6henformel

Gruß Dominik

von Cronix (Gast)


Lesenswert?

Danke danke =)

Ich benötige nicht eine hohe Genaugigkeit.. ;) Es sollten nur ungefähre 
Messungen sein. Danke eurer Hilfe habe ich die Skalierung in hPA dank 
einer Schlussrechnugn geschafft. War einfacher wie gedacht :P

Nun gehe ich davon richtig aus, wenn ich nur anhand des Luftdrucks die 
Höhe ermittle es zu einem Höhenmessfehler von bis zu 300 M kommen kann? 
Oder wurde die von mir verwendete Formel falsch angenährt?
1
 h = 18400 * log(1013.2/value_pressure);

von Rubelus (Gast)


Lesenswert?

Ich hatte mal einen Barometrischen Höhenmesser für ein Segelflieger 
gebaut. Da sie die Formel für die Höhenmessung und Nullpunktausrichtung 
aber noch ein wenig anders aus ;)

Beitrag "Barometrische Höhenformel"

Nach fast einem Jahr "Probefliegen" bin ich dann doch über die 
Genauigkeit sehr erstaunt, jedoch, so wie du es sagtest ist bei extrem 
ungünstigen Wetterbedingungen auch mal eine Toleranz von ca. 300m 
drinne. Nur alleine aus den Unterschiedlichen Tief- / Hochdruckgebieten.

von Ralli (Gast)


Lesenswert?

> Bei der im Datenblatt genannten Gleichung für Vout
> versteh ich nur nicht, wieso sie wichtig ist. Da er
> ja bereits Vout  einliest. Muss ich sie nur nach P
> umformen und ich habe meine kPa??

So ist es.

Allerdings wundert mich der Wert 15494 ein wenig.

Ich kenne den 18F4550 nicht. Hat der einen 14-Bit-
DA-Wandler??? (ungewöhnlich...)

Wäre aber das naheliegendste, weil in diesem Falle

0,90805 x 16384 = 14877

herauskommen müsste.

von Ralli (Gast)


Lesenswert?

Nachtrag:

Versorgungsspannung des Sensors und Referenzspannung
des AD-Wandlers dürfen nicht 2 verschiedene 5 V Spannungen
(mit jeweils +/5%, und eigenem Temperaturgang) sein, sondern
aus der gleichen Quelle kommen!

Das KÖNNTE den Unterschied von 4% zwischen erwartetem
und erhaltenem Wert erklären.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

wenn ich das richtig verstanden habe, willst du ja nicht den Luftdruck 
messen, sondern die Höhe. Die Basis-Kalibrierung muss daher von einer 
bekannten Höhe ausgehen - bei Flugzeugen wird beim Start die Anzeige auf 
die Höhe des Flugplatzes eingestellt. Dank Google Maps geht das heute 
überall, und wenn du einen Berg in der Nähe hast wie ich gleich hinterm 
Haus, kannst du auch mal 200 m höher gehen und prüfen, ob das richtig 
angezeigt wird. Das ist die Einstellung auf die Wetterlage, zusätzliche 
Messungen von Temperatur und Feuchtigkeit sind zusätzliche Feinheiten.

Eine Kalibrierung nach dem Wetterbericht reicht nicht, selbst wenn du 
Kachelmann fragst.

Gruss Reinhard

von Wichtig (Gast)


Lesenswert?

Jackenkoffer schrieb:
> Also : ich muss sagen : ich kenn mich nicht so gut mit C aus
und mit Sensor und Datenaufbereitung anscheinend auch nicht.

Guck dir vielleicht das mal an:
http://www.youtube.com/watch?v=vNc6mIwH9lI

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.