PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Drucksensor MPX 4115



avrflo
19.07.2005, 14:01
Hallo,
ich bin gerade dabei, mir eine Wetterstation mit zwei Tempsensoren (DS1820),
ner RTC (DS1307) und nem Drucksensor (MPX 4115 von Freescale) zu bauen. Nun funktioniert bis auf den Drucksensor alles soweit. Der Drucksensor gibt eine dem Druck proportionale Spannung aus, diese lese ich mit dem 10 bit ADC des mega8 aus. dann berechne ich den Druck mit Hilfe folgender Formel aus dem Datasheet:

P=((Vout/Vin)+0.095)/0.009

Ich nun bekomme ich immer einen viel zu niedrigen Luftdruck heraus:
Momentan zeigt mir mein Sensor ca 970 mbar an, laut der nächstgelegenen Wetterstation (Stuttgart-Flughafen:http://www.wetteronline.de/Baden-Wuerttemb/Stuttgart.htm)
müsste der jedoch bei ca 1019 mbar liegen.
Die Sensor- und die Eingangsspannung messe ich über einen 2,11:1 Spgteiler (82k:39k). Wenn ich nun mit meinem Multimeter die Spanungen nachmesse erhalte ich um ca 0.2V höhere Werte.
Hat jemand ne Idee, wo der Fehler liegen könnte?

Achja, hier noch der link zum Datasheet des Sensors:
http://www.freescale.com/files/sensors/doc/data_sheet/MPX4115A.pdf

Und hier noch mein Code, ich progge in BASCOM:






$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config 1wire = Portb.0




Dim Help As Single
Dim Help1 As Single
Dim Volt As Word
Dim ___lcdno As Bit
Dim Ar(2) As Integer
Dim T1 As Integer
Dim N As Byte
Dim I As Byte
Dim Luft As Word
Dim Luft2 As Single
Dim Temp As Single
Dim Bar1 As Single
Dim Volt1 As Single
Dim Luft1 As Single




___lcdno = 0
Initlcd
Cls
Cursor Off

___lcdno = 1
Initlcd
Cls
Cursor Off


Do

Start Adc 'adc werte für batteriespannung und mpx4115 auslesen
Luft = Getadc(0)
Volt = Getadc(1)
Stop Adc


Volt1 = Volt * 2.56 'batteriespannung Berechnen , 2:1 spgteiler
Volt1 = Volt1 / 1023
Help1 = Volt1 * 2.11111
Volt1 = Help1 + Volt1


Bar1 = Luft * 2.56 'Sensorspannung berechnen
Bar1 = Bar1 / 1023
Help = Bar1 * 2.13157
Bar1 = Bar1 + Help


1wreset 'temp aus ds1820 auslesen
1wwrite &HCC
1wwrite &H44
Waitms 200
1wreset
1wwrite &HCC
1wwrite &HBE
For I = 1 To 2
Ar(i) = 1wread()
Next
T1 = Ar(1) + Ar(2)
T1 = T1 / 2

Luft1 = Bar1 / Volt1 'druck aus sensor und eingangsspannung berechnen
Luft1 = Luft1 + 0.095
Luft1 = Luft1 / 0.009
Luft1 = Luft1 * 10
'empirisch ermittelte Abweichung vom Referenzwert



If N = 0 Or N = 1 Or N = 2 Or N = 3 Or N = 4 Or N = 5 Then 'Mittelwertbildung
Incr N
Luft2 = Luft2 + Luft1


Else
N = 0
Temp = Luft2 / 6
Luft2 = 0
End If





___lcdno = 0 'lcd ausgabe



Upperline
Lcd "Eingangsspannung: " ; Volt1
Lowerline
Lcd "Momentanwert P: " ; Luft1

___lcdno = 1



Upperline
Lcd "Spg sensor: " ; Bar1
Lowerline
Lcd "Mittelwert P: " ; Temp


'ausgabe über uart, nur versuchsweise

Print "Eingangsspannung :" ; Volt1
Print " "
Print "Momentanwert Luftdruck :" ; Luft1
Print " "
Print "Spg sensor :" ; Bar1
Print " "
Print "Mittelwert Luftdruck" ; Temp
Print " "
Print "---------------------------------------"





Waitms 500
Loop




MfG
Florian[/url]

Manf
19.07.2005, 14:22
Dann stimmt ja der Offset mit dem im Datenblatt angegebenen Wert überein, da sind es typisch 0,2; max 0,27V.
Dann ist es wohl der richtige Weg, sich über den Wetterdienst die Originalwerte zur Bestimmung der Korrekturwerte zu besorgen.
Manfred

avrflo
19.07.2005, 15:15
Hallo,
ich glaube da liegt ein Missverständnis vor, der Offset besteht ja bei dem Sensor immer, auch wenn ich mit meinem Multimeter nachmesse, auch bei der Eingangsspannung ist der vom adc gemessene Wert niedriger als der meines Multimeters. Der Fehler muss doch eine Ursache haben, zumal der Sensor kalibiriert ist, ich möchte da nicht einfach an schlechten Messwerte rumdoktorn.
Gruß
Florian

Manf
19.07.2005, 16:05
Das ist allerding richtig.
Irgenwie könnte man den Thread dann auch
"kein Problem mit Drucksensor MPX 4115 nennen". O:)

Also muss man sich den Mega8 noch mal daraufhin ansehen.
Manfred

Dirk
19.07.2005, 16:44
Hallo Florian,

ich weiss nicht genau, woran es bei Dir liegt,- würde nur 2 Dinge beachten:

1. Der Sensor liefert der Absolutluftdruck in Messhöhe. Am Flughafen bekommst Du den Relativluftdruck (in Meereshöhe), der immer höher als Dein Absolutluftdruck ist (es sei denn, Du wohnst auch in Meereshöhe). Du must dann umrechnen.

2. Ich kann nicht genau erkennen, wie Du den (krummen) Spannungsteiler (82k / 39k = 2,10 / 1) im Programm berücksichtigst. Wenn er direkt am Sensorausgang liegt (und der A/D-Wandlereingang am 39k-Widerstand gegen Masse), gilt:

Spannung [V] = Digitalwert * Auflösung * 3,10

Wenn der A/D-Wandler z.B. 4,096 V messen kann bei Digitalwerten von 0 bis 1023, beträgt die Auflösung 0,004 V (4,096 / 1024).
Dein Spannungsteiler könnte damit Spannungen bis 12,69 V messen.
4,096 V fallen dabei am 39k-Widerstand ab, der Rest (Anteil 2,1) am 82k-Widerstand.
Rechne das 'mal für Deinen A/D-Wandler nach!

Gruß Dirk

avrflo
20.07.2005, 10:50
Hallo,
danke erstmal für die Tipps, ich hab nochmal alles nachgerechnet und komm immer wieder auf das zu niedrige Ergebnis: der ADC des mega8 liefert einen zu niedrigen wert. Doch auch mit den mit dem Multimeter gemessenen Werte bekomme ich einen zu niedrigen Druck heraus. Der mit dem ADC Wert berechnete Druck liegt bei ca 965 mbar, mit dem Multimeterwert bei ca 985 mbar. Er müsste laut Wetterstation am Flughafen jedoch bei ca 1022 liegen. Ich glaube nicht, dass diese große Diskrepanz nur am Höhenunterschied liegt, ich befinde mich hier auf ca 335 m.ü.M.
Hat jemand vllt noch ne Idee, woran die Abweichung liegen könnte?
Und hat vllt. gerade jemand die Formel parat um den Druck in Abhängigkeit der Höhe zu berechnen?

MfG
Florian

ZwieBack
20.07.2005, 13:00
Schau mal da nach vielleicht hilft Dir das weiter.

www.keller-druck.ch/german/homeg/painfog/generalg.html

Gruss ZwieBack

Manf
20.07.2005, 13:00
Der Fehler muss doch eine Ursache haben, zumal der Sensor kalibiriert ist, ich möchte da nicht einfach an schlechten Messwerte rumdoktorn.
Wer hat denn den Sensor kalibriert?, (nach Datenblatt ist er das nicht).

Luftdruck:
http://de.wikipedia.org/wiki/Luftdruck

Dirk
20.07.2005, 19:23
Hallo Florian,

als Unterprogramm (BASIC) für die Luftdruckreduktion kannst Du nehmen:



REM Luftdruckreduktion
TK=T0+273.15 : REM Umrechnung °C (T0) in K (TK)
D0=DA*10**(ZA*273.15/(18286.3812*(TK+ZA*0.00325)))
RETURN


Hierbei ist:
T0 -> Temperatur (°C) in Messhöhe
TK -> Temperatur (K) in Messhöhe
DA -> Absoluter Luftdruck (hPa) = Messwert des Drucksensors
D0 -> Relativer Luftdruck in Meereshöhe (0 m)
ZA -> Messhöhe (m)

Die Formel geht von einer "Standardatmosphäre" und einer geografischen Breite von 45° aus.

Gruß Dirk

avrflo
20.07.2005, 20:31
Hallo,
danke für die Tipps, muss ich morgen mal ausprobieren.
Im Datasheet steht schon in der Überschrift:
"Temperature Compensated and Calibrated"

MfG
Florian

Manf
20.07.2005, 20:47
Im Datasheet steht schon in der Überschrift:
"Temperature Compensated and Calibrated"

Ich meine auch, man hätte den Rest von Datenblatt weglassen sollen, wenn ihn keiner liest: O:)

Minimum Pressure Offset(2) (0 to 85°C) @ VS = 5.1 Volts
Voff
min 0.135 Vdc
typ 0.204 Vdc
max 0.273 Vdc

Manfred

Dirk
21.07.2005, 17:41
Hallo Florian,


danke erstmal für die Tipps, ich hab nochmal alles nachgerechnet und komm immer wieder auf das zu niedrige Ergebnis: der ADC des mega8 liefert einen zu niedrigen wert.

Ich hatte es ja schon weiter oben geschrieben:
Ich denke weiterhin, dass Du den Spannungsteiler nicht richtig einrechnest!
Wenn die Widerstände sich wie 2,1 : 1 verhalten, musst Du in der Spannungsberechnung nicht mit 2,1xxx, sondern mit [highlight=red:699a2143fe]3,1[/highlight:699a2143fe] (= 2,1 + 1) multiplizieren, weil die Eingangsspannung (=Ausgang Drucksensor) des Spannungsteilers (82k : 39k) mehr als das dreifache der Ausgangsspannung (=Eingang A/D-Wandler an 39k) ist.
In Deiner Berechnung must Du am Anfang dann nicht mit 2,56 multiplizieren, sondern mit 2,50, wenn Dein A/D-Wandler bis 2,5 V messen kann.

Gruß Dirk

avrflo
21.07.2005, 20:05
Hallo Dirk,
ch habe den Spgteiler schon richtig eingerechnet, ich habe eine zweite Variable *2,11 genommen und dann zum Adcwert dazugezählt ist halt sehr viel umständlicher. Warum soll mein ADC nur bis 2.5 V messen können, er kann doch von 0V bis Vref messen, und da Vref auf Internal, also 2,56V steht kann er doch bis 2,56V messen.
MfG
Florian

Dirk
22.07.2005, 13:42
Hallo Florian,

jetzt hab' ich Deinen Code mit der Zwischenvariable verstanden.
Scheint alles so o.k.! Du kannst das aber alles in einer Formel ohne Zwischenergebnis machen, dann ist's übersichtlicher (aber vom Ergebnis her auch nicht besser).

Auch Deinen A/D-Wandler kenne ich nicht,- wenn der bis 2,56 V geht, dann ist natürlich alles so richtig.

Bleibt also nur noch die Luftdruckreduktion übrig.

... und noch eine andere Idee:
Ich hatte das Problem eines zu niedrigen Wandlerwerts im Vergleich zu einem Mulitmeter auch einmal bei einer Schaltung mit dem Temperatursensor AD592AN. Ich hatte hier auch hin- und hergerechnet und den Fehler (-0,06 Volt) nicht gefunden. Erst als ich einen 100nF Kondensator parallel zum Eingang des A/D-Wandlers gelegt hatte, stimmten wieder alle Werte! Probier das doch auch 'mal!

Gruß Dirk