Hallo zusammen,
ich habe je einen NXP Drucksensor am ADC eines AVR hängen:
1x Arduino micro (Atmega 32u4,
https://www.arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf)
1x ATMEGA 328 (AVCC hart an 5V, AREF an 100nF gegen 0V)
Ich stelle eine starke Temperaturabhängigkeit fest. Die Platinen mit den
Controllern sind jeweils im Außenbereich in Wetterfesten Gehäusen. Die
Drucksensoren habe ich jetzt mal testhalber hübsch warm eingepackt,
einigermaßen konstant bei 15°C.
Die Werte des ADC folgen sehr schön der aktuellen Außentemperatur (mit
DS18B20 gemessen) bei beiden Controllern.
Steigt die Außentemperatur um ein °C steigt der ADC um 1-2 bit.
Soweit zu meiner Feststellung, und jetzt zur eigentlichen Frage:
Ich nutze ja die interne Spannungsreferenz für den ADC. Würde sich das
Verhalten verbessern wenn ich eine externe Referenz verwende?
Im Wiki
(https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC#Externe_Referenzspannung)
lese ich das bringt nix, die Begründung bleibt uns (mir) der Author aber
Schuldig. Eine Aufklärung wäre nett.
Gibt es andere Möglichkeiten diese Temperaturdrift zu kompensieren?
Peter schrieb:> Ich nutze ja die interne Spannungsreferenz für den ADC.
Du siehst das Ergebnis!
Als 1. Verbesserung könntest Du die 5 V Versorgungsspannung als Referenz
nehmen, ansonsten mit einer ext. Referenz (LM336-2.5) die
Referenzspannung noch verbessern.
Sabberlott W. schrieb:> Probier's aus. Alternativ, einen NTC mitlaufen lassen und zur> Kompensation verwenden.
Nicht nötig.
Der ATMega328P hat einen eingebauten Temperatursensor.
Anhand dessen könntest du kompensieren.
Peter schrieb:> Würde sich das Verhalten verbessern wenn ich eine externe Referenz> verwende?
Wenn die Temperaturdrift der externen Referenz niedriger als die der
internen ist, wird das Ergebnis besser. Die Temperaturdrift der internen
Referenz hast du ja schon ermittelt, die der externen steht in deren
Datenblatt.
Oder du kompensierst die Temperaturdrift der internen Referenz wie vom
Arduino Fanboy vorgeschlagen.
Bevor du dir aber viele Gedanken über Temperaturdriften und deren
Kompensation machst, solltest du im Datenblatt des Drucksensors
nachschauen, ob er ratiometrisch misst. Ist dies der Fall, dann nimmst
du einfach die (hoffentlich gut geglättete) Versorgungsspannung des
Sensors als Spannungsreferenz.
Vielleicht fertige Einheiten verwenden, wo Du Dir die Msswerte direkt
via I2C z.b. abholen kannst?
Dann hast Du keine Probleme mit solchen Ungenauigkeitung und
Kompensation.
@Peter (Gast)
>Ich stelle eine starke Temperaturabhängigkeit fest. Die Platinen mit den>Controllern sind jeweils im Außenbereich in Wetterfesten Gehäusen. Die>Drucksensoren habe ich jetzt mal testhalber hübsch warm eingepackt,>einigermaßen konstant bei 15°C.
Das reicht nicht wirklich. Du GLAUBST, daß dein Sensorsignal konstant
wäre, wirklich nachweisen kannst du das aber nicht.
>Die Werte des ADC folgen sehr schön der aktuellen Außentemperatur (mit>DS18B20 gemessen) bei beiden Controllern.>Steigt die Außentemperatur um ein °C steigt der ADC um 1-2 bit.
Glaub ich kaum, das wären 1000-2000ppm/K. SOOO gurkig ist die interne
Referenz höchstwahrscheinlich nicht. Selbst so einfache und eher alte
Referenzen wie ein LM336 haben typisch 70, max. 230ppm/K.
https://www.mikrocontroller.net/articles/Standardbauelemente#Shuntregler.2FSpannungsreferenz>Soweit zu meiner Feststellung, und jetzt zur eigentlichen Frage:>Ich nutze ja die interne Spannungsreferenz für den ADC. Würde sich das>Verhalten verbessern wenn ich eine externe Referenz verwende?
Miss erstmal RICHIG nach, wie stark die interne Referenz driftet. Dazu
musst du eine WIRKLICH konstante Spannung aus einer guten Referenzquelle
einspeisen und diese natürlich auf konstanter Temperatur belassen. Den
AVR musst du in den Ofen stecken und erwärmen. Alternativ tut es auch
ein Heißluftgebläse. Dann kannst du ansatzweise sagen, was los ist.
Am Ende kommt eher raus, daß dein Sensor oder was anderes die Drift
verursacht. Ist die Versorgungsspannung stabil und ausreichend hoch?
>Im Wiki>(https://www.mikrocontroller.net/articles/AVR-Tutor...)>lese ich das bringt nix, die Begründung bleibt uns (mir) der Author aber>Schuldig. Eine Aufklärung wäre nett.
Ziemlich diffuses Geschreibsel. Natürlich kann man eine deutlich
bessere, externe Referenz verwenden, die hat dann auch ihre Vorteile.
Aber wie gesagt, sooo schlecht ist die interne sicher nicht, auch wenn
ich es selber nicht nachgemessen habe und das Datenblatt sich über die
thermische Drift ausschweigt.
Schonmal danke für die Hilfreichen Antworten!
Es sind MPX5050 als Drucksensoren verbaut. Lt. Datenblatt Ratiometrisch.
Ich muss jetzt erstmal lesen was dies genau bedeutet :-)
Die Spannungsversorgung besteht derzeit aus einem Recom 7805 Ersatz
(Schaltregler) ohne besondere Glättungsmaßnahmen (Datenblattbeschaltung
mit 4,7µF am Ausgang glaube ich). Vor dem Recom sind es 24V
Batteriegespeist, weshalb ein Normaler Linearregler nicht zum Einsatz
kommen kann.
Ich werde am Wochenende mal ein bisschen Hirnschmalz in die
Spannungsversorgung stecken um diese zu optimieren und als Referenz
nehmen. Vielleich per Schaltregler auf ~8V runter und einen LDO 5V
Linearregler die 5V bereitstellen.
Vielleicht finde ich auch noch Anregungen wie man solche Schaltregler
stabilisiert (bzw. dessen Spannung)
Alternativ werde ich es versuchen mit den Temperatursensoren zu
kompensieren oder eine externe Referenz zu verwenden.
@Peter (Gast)
>Es sind MPX5050 als Drucksensoren verbaut. Lt. Datenblatt Ratiometrisch.>Ich muss jetzt erstmal lesen was dies genau bedeutet :-)
Daß die Ausgangsspannung direkt proportional zur Versorgungsspannung
bzw. einer Referenzspannung ist, die man außen anlegen kann. Nimmt man
für den AVR VCC als Referenzspannung und diese ebenfalls als
Versorgung/Referenz für den Sensor, so wird die Temperaturdrift dieser
Spannung kompensiert. Denn bei sinkender VCC sinkt auch die
Ausgangsspannung des Sensors im gleichen Maße (bei konstantem
Eingangssignal).
>Die Spannungsversorgung besteht derzeit aus einem Recom 7805 Ersatz>(Schaltregler) ohne besondere Glättungsmaßnahmen (Datenblattbeschaltung>mit 4,7µF am Ausgang glaube ich).
AUA! Das ist eine Dreckschleuder!
>nehmen. Vielleich per Schaltregler auf ~8V runter und einen LDO 5V>Linearregler die 5V bereitstellen.
Naja, es reicht meist, einen passenden LC-Filter hinter deinen
Schaltregler zu platzieren, um die Störpulse vom Schaltregler
ausreichend zu dämpfen.
>Vielleicht finde ich auch noch Anregungen wie man solche Schaltregler>stabilisiert (bzw. dessen Spannung)
Das sind sie schon ;-)
Was du meinst ist die Filterung der Schaltstörungen.
>Alternativ werde ich es versuchen mit den Temperatursensoren zu>kompensieren oder eine externe Referenz zu verwenden.
Was ganz fix geht. Nimm probehalber einen 7805 + Kühlkörper, dann
siehst du recht schnell, ob es an den Schaltstörungen lag.
Peter schrieb:> Es sind MPX5050 als Drucksensoren verbaut. Lt. Datenblatt Ratiometrisch.
Fein!
Damit ist die interne Referenz aus dem Rennen, und irgendwelche
Kompensationen einer Referenz auch.
Peter schrieb:> Ich muss jetzt erstmal lesen was dies genau bedeutet :-)
Tue das!
Das hat offensichtlich Vorrang.
Den Rest vergiss erstmal.
-------
OK, Versorgung glätten, macht schon Sinn.
Arduino F. schrieb:> Peter schrieb:>> Ich muss jetzt erstmal lesen was dies genau bedeutet :-)> Tue das!> Das hat offensichtlich Vorrang.>> Den Rest vergiss erstmal.
Ratiometrisch-> d.h. evt. kannst Dir ir-wo deine Referenzspannung direkt
am Modul abgreifen. Schau Dir mal VOut an.
Hi
>Es sind MPX5050 als Drucksensoren verbaut.
Lt. Datenblatt sind das Drucksensoren für Differenz-Drücke von bis zu 50
kPa. Wie misst du da den atmosphärischen Luftdruck?
MfG Spess
IchMachs schrieb:> Ratiometrisch-> d.h. evt. kannst Dir ir-wo deine Referenzspannung direkt> am Modul abgreifen. Schau Dir mal VOut an.
Okay, war wohl ein Scherz. Keiner lacht. Der war doch gut.
Zum Glück muss ich mich nicht anmelden, dies verzeiht mir niemand.
IchMachs schrieb:> "Device is ratiometric within this specified excitation range.">> Könnte das heissen, das die Messspannung von der Versorgung abhängt?
ahrscheinlich, dass Sie nicht davon abhängt, vermute ich.
Nur um Missverständnissen vorzubeugen:
ich messe nicht den atmosphärischen Luftdruck, sondern die Differenz
zwischen zwei Belüftungskanälen um Blockaden oder Störungen zu erkennen.
Bei der Anwendung stören mich die genannten Effekte nicht. Ich hab es
nur bemerkt und dann mit einem zweiten System (dem Arduino)
reproduziert.
Jetzt möchte ich das nur so zum Spaß optimieren, man wird ja nicht
dümmer dadurch.
Ich habe jetzt erstmal genug Anregungen für die nächsten Abende. Danke
euch! Auch dafür das es hier sehr Sachlich geblieben ist.