AVR ADC und Temperaturdrift

Gast #5195056
Lesenswert?

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?
Moderator #5195092
Lesenswert?

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.
#5195103
Lesenswert?

@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.
Gast #5195107
Lesenswert?

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.
#5195128
Lesenswert?

@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.
Gast #5195130
Lesenswert?

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.
Gast #5195228
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren