Forum: Analoge Elektronik und Schaltungstechnik Temperaturmessung (MCP3424, versch. Sensoren)


von Lisa (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Mikrocontroller Gemeinde :)

Ich bin gerade dabei mir die Welt der Microcontroller näher zu bringen 
und wollte mal ein Projekt mit Temperatursensoren realisieren.

- Messbereich ca.: -20 bis +250°C

- gewünschte Genauigkeit: +- 0.5K unterhalb von 100°C (+- 1K wäre auch 
noch okay)

- Versorgungsspannung: 5,2V

Nach längerer Recherche in diversen Foren denke ich, dass ich für die 
gewünschte Genauigkeit einen ADC benötige. Mein Favorit bisher ist der 
MCP3424 (auch offen für andere Wandler oder Konzepte)

Als Vorauswahl habe ich mich jetzt mal auf folgende Sensoren beschränkt 
(gerne offen für andere/bessere) und würde gerne zum lernen alle 3 mal 
testen:
Thermistor NTC 100k Ohm, Thermoelement Typ T und Pt1000 
(2-Anschlusskabel, Anschlusslänge von Sensor bis ADC ist weniger als 
20cm)

- Erste Frage: Mit einer geeigneten Schaltung vor den Input Channels des 
MCP3424 sollte ich alle 3 Sensoren auswerten können, richtig? Oder sind 
da andere ADCs besser geeignet?

Den Thermistor und PT1000 würde ich über eine Spannungsteilerschaltung 
auswerten. Der Vorwiderstand sollte hier wahrscheinlich ein 
Präzisionswiderstand sein oder?  So wie im Schaltplan eingezeichnet 
sollte das eine ratiometrische Messung sein, hab ich das richtig 
gemacht?
- Der MCP Chip hat jetzt ja noch eine interne Referenzspannung (2.048V ± 
0.05%), das hab ich noch nicht ganz verstanden wofür die gut ist und ob 
ich die irgendwie geschickt nutzen kann.. Kann mir da jemand auf die 
Sprünge helfen?

Das Thermoelement Typ T induziert mir eine Spannung, welche der ADC 
direkt auswerten kann. Zur Berechnung der Temperatur benötige ich dann 
noch die Temperatur der Cold-Junction die ich mittels Thermistor/PT1000 
o.ä. bestimmen kann.
Laut einem öfters zitierten Elektronik Kompendium 
(http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.32) muss ich 
jetzt mittels Tabelle (!?) die Temp. Der Cold-Junction in eine Spannung 
wandeln (bsp. 20°C entspricht 0,833 mV) dann rechne ich diese auf meine 
am ADC gemessene Spannung drauf (bsp. 8,550 mV) macht 9,383 mV und diese 
wandele ich wieder in eine Temp. Um --> irgendwas zwischen 202 und 203 
°C.
- Diese Methode scheint mir etwas überholt, gibt’s da was besseres? Ich 
denke hier wird die Programmierung sonst sehr umständlich :/

Da ich als Maschinenbauerin (mit wenig µC Erfahrung) noch ziemlicher 
Laie bin würde ich mich sehr über eine Rückmeldung freuen was meine 
Planung angeht. Bin über jede Hilfe dankbar 😊
Hoffe ihr habt alle Infos die ihr braucht, sonst einfach nachfragen! 
Vielen Dank an alle die sich schonmal diesen langen Text hier 
durchgelesen haben^^

LG Lisa

von MaWin (Gast)


Lesenswert?

Lisa schrieb:
> Nach längerer Recherche in diversen Foren denke ich, dass ich für die
> gewünschte Genauigkeit einen ADC benötige

Na ja, für -20 bis +250 mit 0.5K braucht man eine Auflösung von 540, 
also täte es ein 10 bit A/D Wandler auch.

Lisa schrieb:
> Mein Favorit bisher ist der MCP3424

Der misst gegen eine absolute interne Spannungsreferenz. Zumindest dein 
NTC liegt aber an der schwankenden 5V Versorgung. Jede Abweichung 
zwischen den 5V und den 2.048V geht also ins Messergebnis ein. Und man 
kommt an die interne Referenz nicht ran, um sie als Versorgung für den 
NTC nutzen zu können. Besser wäre es, ratiometrisch gegen die 5V zu 
messen, das kann der MCP aber nicht.

Zur Messen per Thermoelement könnte man ihn nehmen, muss aber den PGA 
einschalten und der bringt einen erheblichen Fehler mit sich, da bleibt 
von den 18 bit nicht mehr viel übrig. Ein einfacher (10 bit) A/D Wandler 
mit vorgeschalteten PRÄZISEN OpAmp-Verstärker könnte da genauere 
Ergebnisse liefern.

https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.32

von MaWin (Gast)


Lesenswert?

Lisa schrieb:
> Laut einem öfters zitierten Elektronik Kompendium
> (http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.32) muss ich
> jetzt mittels Tabelle (!?) die Temp. Der Cold-Junction in eine Spannung
> wandeln (bsp. 20°C entspricht 0,833 mV) dann rechne ich diese auf meine
> am ADC gemessene Spannung drauf (bsp. 8,550 mV) macht 9,383 mV und diese
> wandele ich wieder in eine Temp. Um --> irgendwas zwischen 202 und 203
> °C.
>
> Diese Methode scheint mir etwas überholt, gibt’s da was besseres? Ich
> denke hier wird die Programmierung sonst sehr umständlich :/

Gerade die dse faq sagt dass die von dir beschriebene Methode Spannungen 
zu addieren nichts taugt:

"Weil die Spannung des Thermoelementes unlinear mit der Temperatur 
steigt, addiert man zur Kaltstellentemperatur nicht etwa die 
Klemmenspannung des Thermoelementes nach Tabelle umgerechnet hinzu, 
sondern sucht ausgehend von der Kaltstellentemperatur in der Tabelle bei 
welcher Differenztemperatur man die gemessene Spannung bekommen würde:"

von Gerald K. (geku)


Lesenswert?

MaWin schrieb:
> Der misst gegen eine absolute interne Spannungsreferenz. Zumindest dein
> NTC liegt aber an der schwankenden 5V Versorgung. Jede Abweichung
> zwischen den 5V und den 2.048V geht also ins Messergebnis ein.

Man könnte den CH1- in die Mitte eines 100k : 100k Spannungsteilers 
legen, dann reduziert sich die Abhängigkeit von der 5V 
Spannungsversorgung.

von Chris (Gast)


Lesenswert?

MaWin schrieb:
> Besser wäre es, ratiometrisch gegen die 5V zu
> messen, das kann der MCP aber nicht.

Für ratiometrische Messungen nehme ich gerne den ADS1100 
https://www.ti.com/product/ADS1100, nicht zu verwechseln mit dem 
ADS1110, der hat wieder eine interne Referenz und kann keine 
Ratiometrie.

von Peter (Gast)


Lesenswert?

Hallo Lisa,

Du schreibst, Du möchtest Erfahrungen in der Welt der Mikrocontroller 
machen.

Dann mache sie doch einfach! Es ist ja nicht die Welt etwas 
diesbezüglich aufzubauen, wenn es nicht gerade edel, mit Platine sein 
muss (vielleicht zuletzt). Eignende Erfahrungen sind immer die besten.

Eine kleine Anmerkung hierzu noch: Du bewegst Dich aber hier in erster 
Linie in der Analogen Welt "bis" zum ADC bzw. suche Dir einen Prozessor, 
Board mit 12bit z. b.:"Blue pill" oder so. Auch wenn diese ADC's nicht 
so gut sind reichen sie.
Lege einen besonderen Wert auf die Versorgung deiner Analogen Schaltung. 
Da reicht kein Spannungsteiler oder ein Widerstand besonderer Güte aus, 
um eine gute Genauigkeit zu bekommen. Hier muss die Brücke stimmen, 
keine Eigenerwärmung, kein Rauschen. Du willst 0,5% das hört sich 
schlicht an, aber auf 120°C, so nie.

Aufgrund des Temperaturmessbereichs solltest Du als erstes vielleicht 
Dich auf einen Sensor festlegen. NTC und Thermoelement ist "pi mal 
Daumen" im Bastelmodus. Der PTC hat die Genauigkeit (Klasse+ teuer) und 
den Bereich.

Eine andere Lösung ist natürlich der Sensor an sich. zB.: MCP9808--I2C 
fertig bis < 125°C, günstig. Teuer, gute Feuchtigkeitssensoren (0~80°C).

Danach kannst Du sicher auch die anderen Sensoren untersuchen.

Peter

von Lisa (Gast)


Lesenswert?

Danke euch für die schnelle Rückmeldung und die viele Hilfe!

MaWin schrieb:
> Der misst gegen eine absolute interne Spannungsreferenz.

Ah okay, das macht Sinn, dann fällt der wieder raus.

MaWin schrieb:
> Gerade die dse faq sagt dass die von dir beschriebene Methode Spannungen
> zu addieren nichts taugt:

Zitat dse faq:
"
- Beispielrechnung Thermoelement Typ K:
- Gemessen 2,230 mV
- Kaltstellentemperatur 22 °C [entspricht 0,879 mV laut Tabelle]
- 2,230 mV + 0,879 mV = 3,109 mV
- 3,109 mV = 76 °C
- NICHT rechnen: 55 °C [das wären die 2,230 mV] + 22 °C = 77 °C"

heißt doch, Spannungen addieren ist richtig, falsch wäre die gemessene 
Spannung in 55°C umrechnen und auf die 22°C Kaltstellentemp aufaddieren? 
Oder hab ich hier einen Denkfehler?

MaWin schrieb:
> Ein einfacher (10 bit) A/D Wandler
> mit vorgeschalteten PRÄZISEN OpAmp-Verstärker könnte da genauere
> Ergebnisse liefern.

Okay einen einfachen A/D Wandler hab ich im Atmega328 (10 BIT +/-2LBS), 
dann probiere ich es vllt erstmal damit? Mit OpAmps hab ich mich noch 
nie beschäftigt, daher muss ich erstmal ein wenig recherchieren um zu 
verstehen wie die funktionieren. Dann habe ich sicherleich weitere 
Fragen dazu an euch :P

Chris schrieb:
> Für ratiometrische Messungen nehme ich gerne den ADS1100
> https://www.ti.com/product/ADS1100

Danke!! Den schaue ich mir mal genauer an :) hast du zufällig auch nen 
Tip für einen mit mehr Eingängen? (4 wäre optimal) Fände ich ganz 
elegant, sonst kann man natürlich auch mehrere der ADS1100 nehmen für 
mehrere Sensoren.

LG Lisa

von Peter (Gast)


Lesenswert?

ADS1115

Theorie ist nicht alles, leider.

Peter

von Chris (Gast)


Lesenswert?

Peter schrieb:
> ADS1115

Der hat wieder eine interne Referenz und kann nicht ratiometrisch. Man 
kann aber mehrere ADS1100 parallel an den I2C-Bus hängen, es gibt den 
ADS1100 nämlich mit 8 unterschiedlichen I2C-Adressen ADS1100A0 bis 
ADS1100A7

von Chris (Gast)


Lesenswert?

Der ADS1119 käme noch infrage https://www.ti.com/product/ADS1119 da kann 
man interne Referenz abschalten und Vdd nehmen

von dummschwaetzer (Gast)


Lesenswert?

>PT1000 würde ich über eine Spannungsteilerschaltung
Ich nicht. Nimm einen ADC mit eingebauten Stomquellen und PGA.
Beispielschaltungen siehe deren APP-Notes.

von hacker-tobi (Gast)


Lesenswert?

Hi Lisa,

ich habe für ein bereits realisiertes Projekt ein brauchbares 
Thermometer zusammen gesetzt.

Ist zwar primär für Raumtemperatur gedacht, misst aber 0 bis 110 grad 
mit Auflösung von 0,12 grad und ist kalibriert bis auf etwa +-1 grad 
genau. Eventuell gehts auch besser wenn du mind eine genaue 
referenztemperatur hast.
Messwerte werden mittels median verfahren gemittelt um rauschen etc zu 
reduzieren.

Zutaten:

Atmega168 mit interner oder wahlweise externer Referenz.
Lm35 Sensor
Ubliche Analogbeschaltung.

Das komplette Projekt (hard/Software) findest du hier:
Beitrag "Röhrenuhr IV-18"

Die temperaturermittlung passiert im wesentlichen in der funktion 
read_temperature() welche in der Datei temperature.c zu finden ist, die 
Initialisierung des ADC findest du in init.c

Gruss tobi

von Chris (Gast)


Lesenswert?

LM35: da passt der Temperaturbereich nicht.

von hacker-tobi (Gast)


Lesenswert?

Das ist richtig, aber es lassen sich mit geringen Anpassungen auch 
andere Sensoren verwenden.

von Peter (Gast)


Lesenswert?

Hi,

frage mich gerade warum kostet ein gutes Messgerät mehrere Hundert 
Euros? (nicht ernsthaft).

Wenn ich einfach ein ADS 1100, der mit Radiometrie, ein PTC (Version 
egal), irgend eine Versorgungsquelle, die sogar brummen kann 
(Radiometrie!!) und mit einer Anzeige zusammen zimmere und das gleiche 
habe.
Ernsthaft?

Schaltungen ohne Abgleich im Temperaturbereich halte ich (Ausnahme IC 
Laser getrimmt)für sehr ungenau.("Unsinn"). Ausnahme: dynamische 
Temperaturmessung bis 100°C (Elektor).

Lisa deine Schaltung, mit Spannungsfolger bzw. Kompensation (Datenblatt 
MCP3424) und Du hast ein Ergebnis.
Tobis Genauigkeit liegt eher bei +-2°C, nach meiner Erfahrung.

Man muss auch die Messgenauigkeit wiederholt darlegen können!!

Peter

von Rainer V. (a_zip)


Lesenswert?

Peter schrieb:
> Man muss auch die Messgenauigkeit wiederholt darlegen können!!

Man muß gar nichts...meine Raumtemperatur lese ich am Steuergerät der 
Heizung ab und das ist es auch schon. Wenn das Aussenthermometer 25°C 
sagt, dann wird mir eben richtig warm. Wenn ich die Raumtemperatur auf 
z.B. auf 19°C einstelle, dann ist es ungemütlich auf dem Sofa und da ist 
es mir egal, ob das nun 292 oder 293 Kelvin sind. Alles Andere ist 
relativ, auch wenn aus technischer Sicht gewisse Parameter möglichst gut 
und stabil sein sollten.
Gruß Rainer

von Peter (Gast)


Lesenswert?

Hallo Lisa,

schau mal hier, von Adafruit Max31865 als Referenz. Fix und fertig.
https://learn.adafruit.com/adafruit-max31865-rtd-pt100-amplifier/arduino-code

Peter

@Rainer

Du solltest deine Heizkosten am Ende des Jahres kontrollieren. 1°C kann 
zu viel sein.

von hacker-tobi (Gast)


Lesenswert?

@Peter:

Welche Erfahrung? Hast du meine Uhr nachgebaut oder beziehst du dich auf 
allgemeine Erfahrung mit dem LM35?

Ich denke schon, das es genauer geht. Ich verwende LM35CZ, die etwas 
genauere Version.

Nach meiner Erfahrung kommt es bei meiner Schaltung auf die Genauigkeit 
der Kalibrierung und der Referenzspannungsquelle im yC an.
Die Referenzspannung im yC hat eine leichte Temperaturabhängigkeit. 
Gemessen steigt die Spannung um ca 5 mV an, wenn ich den yC gegenüber 
Raumtemperatur um 40 grad erwärme. Das spielt in meiner Anwendung kaum 
eine Rolle (bei ca 60 Grad Raumtemperatur hätte ich andere Probleme 
g).
Wenn nicht die Raumluft-Temperatur gemessen wird, wird der Einfluss der 
Temperaturdrift hier sogar noch geringer. Außerdem kann eine externe 
Referenzspannung verwendet werden.

Damit verbleibt die Kalibrierung.
Diese ist bei meiner Schaltung insbesondere bei Verwendung der Referenz 
im yC wichtig, da die Referenzspannung leider einer Exemplarstreuung 
unterliegt.
Die Kalibrierung sollte möglichst genau bei bekannten und präzise 
bestimmten Temperaturen (z.B. 0 und 100 Grad) erfolgen.
Zusätzlich kann in der SW noch eine Feinjustierung erfolgen.

gruß

tobi

von Rainer V. (a_zip)


Lesenswert?

Peter schrieb:
> Du solltest deine Heizkosten am Ende des Jahres kontrollieren. 1°C kann
> zu viel sein.

Ich habe einen Gastank im Garten und muß den seit Jahrzehnten 3x pro 
Heizperiode füllen (je 1000). Da brauche ich nichts überprüfen...und 
wenn mir die im Wohnzimmer angezeigten 19°C zu kalt sind, dann stelle 
ich das Ding höher! So einfach :-)
Gruß Rainer

von Peter (Gast)


Lesenswert?

Hallo Tobi,

etwas abweichend vom Lisa's Thema,

aber nein, nicht dein Aufbau sondern ein Eigener. Ist sicher auch schon 
20 bis 30 Jahre her und die guten hat man damals auch nicht bekommen, zu 
teuer. Sieht man von den Copper und BB OP's ab, ist heute vielleicht 
eine bessere Genauigkeit zu erreichen. Leider liegt mir an Layouts 
nichts mehr vor.

Im privaten Bereich bleibt Dir nur EIS_Wasser und Flüssig_Gasübergang 
und ein sehr gutes altes Messinstrument. Da hast Du schon +-0,3°C 
Abweichung um 0 Grad und sicher > 0,5 -0,7°C Abweichung um 100°C, die 
bekommst du nicht weg. Ich kenne auch keinen Klimaschrank ("normal!!" 
kosten soviel wie ein Mittelklassewagen) der nicht ein zwei Grad 
schwingt, ob -70°C oder 0°C egal. normal braucht das auch keiner.

Exemplarstreuung, aus diesem Grund habe ich damals auf die Dynamische 
Temperaturmessung zurückgegriffen. Erst durch den Nachbau dann durch den 
Einsatz von LTC1043 wesentlich verkleinert. Es blieb aber beim 
Kalibrierungsfehler.

@Lisa
es gibt auch noch ein Adafruit Max31856 Thermoelemente mit SW.

@Rainer
habe ich leider nicht verstand.

Peter

von Rainer V. (a_zip)


Lesenswert?

Peter schrieb:
> @Rainer
> habe ich leider nicht verstand.

...mach dir keine Sorgen, ich habe genug :-)

von ElektroFH (Gast)


Lesenswert?

Hallo Lisa,

540 Schritte (~10bit) heißt nicht, dass man direkt einen einfachen ADC 
in uC nehmen kann.
Sie sind 10-bit in Atmege zum Beispiel, aber Effective Number of Bits 
(ENOB) wird deutlich geringer... Grob 2-3 bits im Daumenregel.
Das heißt die wahre Datei du nimmst wird ungenauer.

Hier bist du mit 13 bit oder höher im sicheren Bereich.
Deswegen gibt es dedizierte ADCs im Markt dafür :-)

Ich habe gesehen es gibt AD7124-4 oder -8 für Temperatur Messungen.
Ratiometric oder Absolute, beide Möglich.
Falls nötig, kann es auch durch Diagnosis für Funktionale Sichere 
Anforderungen anpassen.
Es gibt  Funktionen für NTC, RTD und TE (z.B. Typ T oder K).

Oder es gibt LTC2983 / 2984 usw.
Das sieht aber eher als sehr angefertigte Lösung. Also, wie Plug und 
Play.

von W.S. (Gast)


Lesenswert?

Lisa schrieb:
> MaWin schrieb:
>> Ein einfacher (10 bit) A/D Wandler
>> mit vorgeschalteten PRÄZISEN OpAmp-Verstärker könnte da genauere
>> Ergebnisse liefern.
>
> Okay

Nix Okay...
Mawin will auf die früher übliche rein analoge Kompensation per OpV 
hinaus. Das kann man noch immer machen, es funktioniert - aber es ist 
nicht der Stand der Technik. Der heißt etwa so: AD-Wandlung per 
hochauflösendem ADC und danach erst das Abziehen des Offsets und 
Applizieren der gewünschten Spreizung im Digitalen.

Nebenher gesagt: Für sowas benutze ich seit langem den AD7714. Der ist 
für sowas immer noch gut geeignet, obwohl er mittlerweile nicht mehr der 
Neueste ist.

W.S.

von Peter (Gast)


Lesenswert?

Hi,

warum kann man keinen "einfachen ADC" des Prozessor benutzen, für 
welchen Nutzer sind diese dann implementiert worden.

Mir fällt da die Autoindustrie ein, oder glaubst Du das separate ADC 
eingebaut werden, mehr als selten. Zu teuer.

Mal abgesehen von der Tatsache das auch 12bit'er am Start sind, wie ST32 
(im Bastelrahmen). Es kommt doch darauf an wie Du deine Schaltung 
aufbaust und die möglichen Referenzen oder evtl. OP's nutzt. Mal 
abgesehen von den Möglichkeiten über die SW.

Wenn Lisa Ihr Projekt Blockweise aufbauen will muss auch jeder Block 
einmal im Focus stehen. Es gibt zahlreiche Sensoren Exampels von 
"Herstellern".

Lisa schrieb:
> Ich bin gerade dabei mir die Welt der Microcontroller näher zu bringen
> und wollte mal ein Projekt mit Temperatursensoren realisieren.

AD7124-x und LTC2983 passen die zu ihren Projekt?

Lisa hat sich inzwischen sicher schon ausgeklinkt.

Ich denke Max 31856 (alle Thermoelemente) oder besser Max 31865 (4 
Leiter) (~4 Euro)wären eine gute Wahl.

Peter

von Michael L. (Gast)


Lesenswert?

Lisa schrieb:
> jetzt mittels Tabelle (!?) die Temp. Der Cold-Junction in eine Spannung
> wandeln (bsp. 20°C entspricht 0,833 mV) dann rechne ich diese auf meine
> am ADC gemessene Spannung drauf (bsp. 8,550 mV) macht 9,383 mV und diese
> wandele ich wieder in eine Temp. Um --> irgendwas zwischen 202 und 203
> °C.

Temp-Sensor Tabellen findest du bei Afug-Info für NTC und PT Typen
Waren mir eine große Hilfe

http://www.afug-info.de/Download/tab/NTC/

http://www.afug-info.de/Download/tab/PT-X-100-500-1000/

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.