Forum: Mikrocontroller und Digitale Elektronik Probleme mit Luftdruckmessung


von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo an Alle,

ich habe schon mehrmals hier einen Tread eröffnet.
Ich habe einen Luftdrucksensor MPX4100 an meinem AD-Eingang(10Bit)
ATMEGA8535 angeschlossen.Auf dem Display erscheint immer ein falscher
Luftdruckwert.Zur Zeit erscheint auf dem Display 1002hPa. In
wirklichkeit müssten es so 1020hPa sein.Diesen Luftdrucksensor habe ich
schon einemal an einem Siemenscontroller 80C535 angeschlossen. Da hat ja
auch alles toll geklappt.Nur bei dem ATMEGA8535 haut es nicht so hin.

C-Code:
Funktion AD-Wandler:
unsigned int readADC_10BIT(unsigned char channel)
{
  unsigned char i;
  unsigned int result;

  ADCSRA = 0x86;    // Frequenzvorteiler
                               // setzen auf 64 (1) und ADC aktivieren
(1)

  ADMUX = channel;    // Kanal waehlen
  ADMUX |=  0x40; // AVCC als Referenzspannung nutzen

  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man
liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu
lassen" */
  ADCSRA |= 0x40;              // eine ADC-Wandlung
  while(!(ADCSRA & 0x10));     // auf Abschluss der Konvertierung
warten (ADIF-bit)

  result = 0;

  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden
Wandlungen */
  for(i=0;i<4;i++)
  {
    ADCSRA |= 0x40;            // eine Wandlung "single conversion"
    while(!(ADCSRA & 0x10));   // auf Abschluss der Konvertierung
warten (ADIF-bit)

  result += (ADCL + (ADCH<<8));       // mit uint16_t x


  //result += ADC;        // Wandlungsergebnisse aufaddieren
  }

  ADCSRA &= ~0x80;             // ADC deaktivieren (2)

  result >>= 2;                     // Summe durch vier teilen =
arithm. Mittelwert

  return result;
}

Berechnung des Luftdruckes:
long_luftdruck = (188.1049927  * (5.02/1024))* readADC_10BIT(0) +
143.3427762;

Kann mir jemand sagen woran mein Problem liegen könnte?

von Uwe Nagel (Gast)


Lesenswert?

An der Messung ist wohl nichts auszusetzen. Aber nimm doch mal ein
Multimeter, messe die Spannung vom Sensor und die Referenzspannung.
Rechne aus, welcher 10-Bit Wert rauskommen müsste und vergleiche mit
dem was der Wandler ermittelt. Dann Kannst Du vielleicht den Wandler
als Fehlerquelle ausschliessen.

Jetz versuche ich noch, deine Umrechnung zu verstehen...

long_luftdruck = (188.1049927  * (5.02/1024))* readADC_10BIT(0) +
143.3427762

Im Datenblatt steht:
Vout/Vs = 0.01059*P-0.1518  mit P in kPa
oder P= (Vout/Vs+0.1518)/0.01059
oder P= (Vout/Vs+0.1518)*94.4827
oder P= Vout/Vs*94.4827+14.342
oder P= Vout/Vs*944.827+143.42 wenn P in hPa sein soll

rechne ich deine 188.1049927*5.02=944.287063354
dann sieht das nach einem Zahlendreher aus, aber selbst damit wird aus
1002 nicht 1020.

Hast Du die Abhängigkeit des Drucks von der Höhe berücksichtigt?
p(h)=p0*exp(-h/7991m) oder P0=p(h)/exp(-h/7991m)
Bei einer Höhe von 150m über NN musst Du den gemessenen absoluten Druck
mit 1,0189 multiplizieren, um den Druck auf Meereshöhe zu erhalten,
welcher im Wetterbericht angegeben wird. So wird zB. aus 1002hPa
1020hPa.

Noch was, das ist mir letztens bei der gleichen Anwendung passiert:
Ich habe , wie im MPX-Datenblatt empfohlen, ein RC-Glied zwischen
Sensor und AD-Eingang, allerdings mit 10kOhm.
Dann versehentlich am Prozessor den Pullup-Widerstand am AD-Wandler
Eingang aktiviert. Der wird zwar beim Anwählen des Eingangs
abgeschaltet, ist aber aktiv, wenn ein anderer Eingang angewählt ist.
Meine 10k und der Pullup bilden einen Spannungsteiler gegen Plus, der
den Kondensator auf einen zu hohen Wert auflädt. Während der Wandlung
ist nicht genug Zeit, um den Kondensator auf die richtige Spannung zu
bringen, der gemessene Wert war daher zu hoch. Aber das ist ja bei Dir
nicht der Fall...

Uwe

von ??? (Gast)


Lesenswert?

Die Höhenkorrektur ist schon berücksichtigt? Der Sensor liefert ein
Signal welches dem absoluten Druck entspricht. Die Wetterdienste messen
prinzipiell das gleiche, aber um die Werte vergleichen zu können werden
diese mittels der "barometrischen Höhenformel" korrigiert.
Meteorologische (Luft)drucksensoren sind somit auf Meereshöhe bezogen.
Die Physiker machen das teilweise nicht. Deshalb weichen auch
Präzisionsgeräte durchaus mal voneinander ab.

http://www.google.de/search?q=%22barometrischen+H%C3%B6henformel%22&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:de-DE:official

von Michael (Gast)


Lesenswert?

Hallo,

ja was ist jetzt korrekt? Muss ich jetzt bei meiner Rechnung noch einen
Höhenkorrekturfaktor miteinfügen oder nicht?Weil Uwe schrieb was von,
Faktor "1,0189".Stimmt dies jetzt zu 100%?Der Andere schrieb was von
die Höhenkorrektur ist schon in der Formel mit drin! Hmmm....

Ich verstehe das jetzt so zu meinem errechneten Wert "long_luftdruck"
soll ich noch den Faktor "1,0189" dazu multiplizieren.

von Holger (Gast)


Lesenswert?

Hallo,

also die Wetterdienste messen ersteinmal den Luftdruck vor Ort. Das ist
der sogenannte Luftdruck in Barometerhöhe. Dieser wird entweder
elektronisch, mit Aneroidbarometern oder auch mit Hg-Barometern
berechnet.
Dieser Luftdruck wird bei synoptischen Stationen auch gemeldet. Handelt
es sich nun um eine Meldung für den Flugwetterdienst, dann wird der
Luftdruck anhand der ICAO-Standardatmosphäre auf NN korrigiert.
Bei synoptischen Stationen wird der Luftdruck anhand der aktuellen
Temperatur und eines langjährigen Dampfdruckmittels ebenfalls auf NN
korrigiert. Dieser Luftdruck wird ebenfalls verbreitet.

Der MPX ermittelt den Luftdruck wie er vor Ort herrscht. Daher ist eine
Höhenkorrektur nicht erforderlich.

Gruß
Holger

von Uwe Nagel (Gast)


Lesenswert?

Hallo,

die Wettermeldungen im Fernsehen, Zeitung oder zB. bei Wetter.com geben
immer den auf Normal-Null bezogenen Druck an. Dein Sensor misst jedoch
den absoluten Druck der bei Dir herrscht, er weis ja auch nichts von
seiner Höhe über dem Meeresspiegel.
Du musst also den absoluten Druck messen und umrechnen um Deinen Wert
mit der Wetterkarte vergleichen zu können.
Diese 1,0189 habe ich nach der angegebenen Formel für 150m berechnet,
sie würden Deinen Fehler kompensieren. In einem anderen Thread hast Du
als Wohnort Bruchsal genannt, das liegt so etwa 120m hoch.

@Holger
Synoptische Wettermeldungen sind für den Normalbürger eher
ungebräuchlich, wo bekommt man diese Meldungen her?

Uwe

von Holger (Gast)


Lesenswert?

@Uwe Nagel

Die aktuellen gibt es hier:

http://www.uradio.ku.dk/%7Ect/aktuelobs.txt



10015 12881 82109 10175 20130 30170 40180 56004 60001 8457/
  333 31/// 55301 84657 87358=

Bsp. Helgoland

30170 = 1017,0 hPa korrigierter Luftdruck
40180 = 1018,0 hPa (QFF, NN)


Gruß
Holger

von Michael (Gast)


Lesenswert?

Hi Uwe,

wie kommst du auf diesen Faktor 1,0189?
Du hast diese Formel verwendet p(h)=p0*exp(-h/7991m) oder
P0=p(h)/exp(-h/7991m).

Wenn ich da für h 150 eingebe dann komme ich nicht auf den Faktor

von Uwe Nagel (Gast)


Lesenswert?

Hallo Michael,

der Faktor rechnet absoluten Luftdruck in der Höhe h, also p(h), in den
auf Meereshöhe bezogenen, p0, um.
Etwas anders geschrieben:
p0=p(h) * (1/exp(-h/7991m)) oder p(h) * exp(h/7991m)
und dieser Klammerausdruck ist laut meinem Taschenrechner 1,0189 wenn
ich für h 150m einsetze.

@Holger

Diese Synop-Meldungen kannte ich bislang nur von RTTY-Empfangsversuchen
mit meinem Weltempfänger. Ich wuste nicht, dass sie ihren Weg ins
Internet gefunden haben...
Was ich auf die schnelle nicht ergoogeln konnte, ist, wie diese
Meldungen verschlüsselt sind. Hast du da auch einen Link?

Uwe

von Michael (Gast)


Lesenswert?

Ok jetzt hab ichs verstanden.
Also zu meiner Formel müsste ich dann nur noch (1/exp(-h/7991m))
multiplizieren.
Bei mir sind es 120m vom Meeresspiegel. Für h muss ich dann 120m
einsetzen.

Sind diese Angaben auch richtig?

von Michael (Gast)


Lesenswert?

Ach und noch was, woher stammt diese Formel
p0=p(h) * (1/exp(-h/7991m)) oder p(h) * exp(h/7991m)???

von Uwe Nagel (Gast)


Lesenswert?

Abiprüfung Mathe Grundkurs:
http://www.bildung-mv.de/download/abitur/abi-05-ma-gk.pdf
oder http://www.unibw-muenchen.de/campus/LRT/LRT10/formelsammlung.pdf
oder weiter 850 Seiten über Google, wenn man 'Barometrische
Höhenformel' eingibt.

Für 120m erhalte ich 1,01513. Damit wird aus deinem gemessenen 1002hPa
noch nicht ganz 1020 sondern nur 1017, aber vielleicht wohnst du ja
doch etwas höher, oder in einem Hochhaus? Der Rest könnte aber auch
ein´fach ein Messfehler des Sensors sein. Da steht doch auch was von
+-Error im Datenblatt.
Ich habe mal einfach über 24 Stunden die Messwerte aufgezeichnet und
mit denen von wetter.com verglichen. Dabei ergab sich auch ein
Offset-Fehler. Allerdings ist meine Schaltung aufwändiger, um eine
höhere Auflösung zu erreichen. Da kommen noch zwei Spannungsteiler vor,
davon ein Trimmpoti. Deshalb kann ich gerade nicht genau sagen wie gross
die absolute Abweichung war.

Uwe

von Volker (Gast)


Lesenswert?

Hallo zusammen,

hier gibts ne ganz nette Übersicht über die unterschiedlichen
Berechnungsformeln:

http://www.explorermagazin.de/service/hoehform.htm

und nen passenden Rechner dazu:

http://www.explorermagazin.de/suunrech.htm

oder hier:

http://www.mikrocontroller.net/forum/read-1-212615.html#212615

Viele Grüsse

Volker

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die Infos.

In diesem Dokument steht die Formel p(h)=po*e(-(h/b))

po:1013.25hPa
h: 120m(Bruchsal)
b:Konstante = 7991m

Wenn diese Werte einsetze dann komme ich da auf 998.14..hPa.

Vorhin hat einer das hier geschrieben:
p0=p(h) * (1/exp(-h/7991m)) oder p(h) * exp(h/7991m)

Bin jetzt total durcheinander.
Kann ich den Faktor (1/exp(-h/7991m)) nicht zu meinem gemessenen
Luftdruck hinzu multiplizieren?

von Michael (Gast)


Lesenswert?

Was ist damit gemeint:
po:Luftdruck an der Erdoberfläche,po=101325Pa
Ist das hier nur ein angenommener Wert oder muss dieser Wert immer
hinzugefügt werden?

von Michael (Gast)


Lesenswert?

Ich habe jetzt den Faktor mal angehängt.Auf dem Display erscheint noch
immer der gleiche Fehler.
Irgendwas stimmt nicht mit der Hoehenkorrekturberechnung.Was mache ich
da falsch?

//Deklaration
long long_luftdruck,long_temperatur,hoehenkorrektur;
//Berechnung
hoehenkorrektur=exp(120/7991);
long_luftdruck = ((188.1049927  * (5.02/1024))* readADC_10BIT(0) +
143.5316336) * hoehenkorrektur;

von Wolle (Gast)


Lesenswert?

Hier ist (noch einmal) eine gute Seite mit Grundlagen :

http://www.freunde-alter-wetterinstrumente.de/13bartec.htm

von Michael (Gast)


Lesenswert?

Kann mir dazu niemand eine Antwort geben. Es sind so viele
Informationen.Bisher konnte mir keiner was zu meinen oben geschrieben
beiträge sagen.

Mehr will auch auch nicht wissen.

Vielen Dank nochmals die mir geholfen haben!

von Arno H. (Gast)


Lesenswert?

Die 102325 Pa sind der Luftdruckwert der ICAO- Standardatmosphäre mit
plus 15°C und 0% Luftfeuchtigkeit auf Meereshöhe. Daraus berechnen alle
Flugplätze ihren anhand des örtlichen Luftdrucks und der eigenen Höhe
den  zugehörigen Luftdruck bezogen auf NN.
Da du 120m Höhe über NN angibst, scheint das auch mehr eine Schätzung
als das Ergebnis einer zuverlässigen Messung zu sein.
Ich wiederhole noch mal meinen Tipp: Geh zum nächsten Flugplatz, dort
kannst Du anhand der dort vorhandenen kalibrierten Geräte dein
Messinstrument vergleichend überprüfen und einstellen.
Zur weiteren Berechnung musst Du dich dann für eine der
berechnungsmethoden entscheiden, da eine absolute barometrische
Höhenmessung nur beim ständigen Vergleich mit bekannten Höhen überhaupt
Sinn macht. Es sei denn, die Wetterlage ist so stabil, dass sich über
mehrere Stunden der Luftdruck nicht ändert.
Arno

von Uwe Nagel (Gast)


Lesenswert?

Mit p0 meine ich den Luftdruck auf Normal-Null, den du angezeigt haben
möchtest. Mit p(h) den Luftdruck, den du in einer Höhe h gemessen
hast.

Das mit dem Multiplizieren stimmt schon, jedoch verwendest du in deinem
Beispielprogramm für höhenkorrektur einen long Typ. Hier must du wohl
oder übel mit float rechnen, den 1,01... wird bei der Umwandlung in
einen ganzzahligen Typ zu 1 und dieser Faktor wird dein Problem nicht
ändern...

Uwe

von Der2te_Michael (Gast)


Lesenswert?

Hi,

also ich an deiner Stelle würde mir das Datenblatt durchlesen, die
Formeln aus dem Datenblatt verwenden, und mich damit abfinden, dass der
Sensor nur den Absolutdruck vorort misst und nicht irgendwelche
sonstigen Werte.

Den Drucksensor hängst du an eine konstante Spannungsquelle mit 5V.

Wenn du um einige mbar von den Wetterwerten daneben bist, ist das auch
egal, denn für eine Wetterstation, die du ja bauen willst, ist die
Tendenz und nicht der Absolutwert interessant.

Weiters würde ich dir raten, dich etwas in das Thema Messtechnik
einzulesen, damit man z.B. die Kennlinie eines PTC kennt.

Grüße,
Der2te_Michael

von Michael (Gast)


Lesenswert?

Also ich möchte in meiner Wetterstation nicht den Luftdruck auf
Meereshöhe berechnen sonder ich will den Luftdruck messen der z.B. bei
mir herrscht. In dem Falle tue ich die 120m miteinberechnen.
Es muss ja nicht exakt sein. Zur Zeit zeigt mein Display 1022hPa an.
Auf der Wetterkarte im Internet steht was von 1023hPa.Dann ist doch
meine Messung eigentlich gut oder?

von Michael (Gast)


Lesenswert?

Also ich möchte in meiner Wetterstation nicht den Luftdruck auf
Meereshöhe berechnen sonder ich will den Luftdruck messen der z.B. bei
mir herrscht. In dem Falle tue ich die 120m miteinberechnen.
Es muss ja nicht exakt sein. Zur Zeit zeigt mein Display 1022hPa an.
Auf der Wetterkarte im Internet steht was von 1023hPa.Dann ist doch
meine Messung eigentlich gut oder?

von Uwe Nagel (Gast)


Lesenswert?

eigentlich gut... aber schau mal für welche Höhe das Internet den Druck
angibt! Wenn Du vergleichen willst, musst du auch die Höhe der beiden
Barometer berücksichtigen. Das ist ja gerade der Grund, weshalb man die
Messwerte auf NormalNull bezieht. Wie sonst willst du sonst eine Messung
in Bruchsal mit einer Messung 5km entfernt auf einem der Hügel hinter
Bruchsal vergleichen?

von Michael (Gast)


Lesenswert?

Im Internet bei Google habe ich Luftdruck Bruchsal eingegeben.Da komme
ich auf eine Seite "Meteo24.de" da wird alles angezeigt. Sogar die
Höhe.Also dann ist doch alles ok oder?

So jetzt muss ich nur nochmal schauen wie ich die Temperaturmessung
besser hinbekomme. Das ist der Wert bei mir um 3 bis 4 Grad höher.

von Michael (Gast)


Lesenswert?

Diesesmal weicht mein Luftdruck einwenig mehr ab.
Im Internet habe ich noch meinem Ort gesucht. Da wurde die Höhe von
110m angegeben und einen Luftdruck von 1014.7hPa.Meine Display zeigt
gerade 1016hPa an.Warum drifftet mein Wert so ab?

luftdruck = ((188.8574127 * (5.01/1024))* readADC_10BIT(0) +
143.5316336) * 1.015130214;//hoehenkorrektur=exp(110/7991);

(hoehenkorrektur=exp(110/7991)=1.015130214)

Wie kann ich meine Messung noch genauer machen?

von Arno H. (Gast)


Lesenswert?

Der Luftdruckwert auf der meteo-Seite wird in Karlsruhe gemessen, also
ca. 20km entfernt. Und dazu noch in Abständen von mehreren Stunden!! Je
nach Wettersituation sind das mehrere hPa. Deine genaue Höhe ist bis
jetzt ebensowenig rübergekommen. Wenn für einen Ort eine Höhe angegeben
wird, ist das ein Mittelwert. Der Luftdruck nimmt in niedrigeren Höhen
mit ca 1hPa pro 8m ab, das heisst eine Wohnung im 10. Stock hat einen
um fast 4hPa niedrigeren Luftdruck als eine im Erdgeschoss. Dabei sind
fehler des sensors und der Auswerteelektronik noch nicht
berücksichtigt.
Begib Dich  mit Deinem Messinstrument endlich mal dorthin, wo Dein
Referenzwert auch gemessen wird. Kalibrier das Ding dort und begib Dich
dann wieder auf Deine Luftdruckinsel. Alles andere ist brotlose Kunst.
Grundlagen gibt es auch hier:
http://www.meteoschweiz.ch/de/Wissen/Wissenswertes/wetterlexikon.shtml

Arno

von Hans-Christian (Gast)


Lesenswert?

Hallo Michael,

ich weiß nicht, ob's noch interessiert, aber die analogen Eingänge des
AVR ziehen meines Wissens zuviel Strom, so daß der Sensor zu stark
belastet ist und in die Knie geht. Ich habe zwischen meinem MPX4115 und
ATmega8 einen Spannungsfolger als Impedanzwandler gesetzt und nun
klappt's wunderbar.

Gruss
Hans-Christian

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.