Forum: Mikrocontroller und Digitale Elektronik AVR ADC und Temperaturdrift


von Peter (Gast)


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?

von Pandur S. (jetztnicht)


Lesenswert?

Probier's aus. Alternativ, einen NTC mitlaufen lassen und zur 
Kompensation verwenden.

von m.n. (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


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.

von IchMachs (Gast)


Lesenswert?

Wie werden die Drucksensoren gespeist?

von IchMachs (Gast)


Lesenswert?

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.

von Falk B. (falk)


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.

von Peter (Gast)


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.

von Falk B. (falk)


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.

von Einer K. (Gast)


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.

von IchMachs (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Holger (Gast)


Lesenswert?

Vakuumkammer im Chip eingebaut?


Holger

von spess53 (Gast)


Lesenswert?

Hi

>Vakuumkammer im Chip eingebaut?

Dann müsste das 'Vakuum' aber einen Druck von ca. 80 kPa aufweisen.

MfG Spess

von IchMachs (Gast)


Lesenswert?

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.

von IchMachs (Gast)


Lesenswert?

"Device is ratiometric within this specified excitation range."

Könnte das heissen, das die Messspannung von der Versorgung abhängt?

von IchMachs (Gast)


Lesenswert?

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.

von Peter (Gast)


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.

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.