Pt100 / Pt1000 Temperaturmessung mit dem MCP3208

  • Pt100 / Pt1000 -Temperaturmessung mit den analogen Kanälen des Hubo


    Motivation

    Die Motivation der vorliegenden Betrachtung geht auf diesen Beitrag (HUBO und Pt1000) zur Temperaturmessung mittels eines Pt1000 Temperatursensors in einer Solaranlage zurück. Da für die vorliegenden Untersuchungen kein Pt1000 Sensor zur Verfügung stand, wurde auf einen Pt100 Sensor zurückgegriffen, um aufzuzeigen welche Ergebnisse bei einer direkten Messung an einem 12 Bit AD-Wandler ohne weiterer Zusatzbeschaltung als der eines Spannungsteilerwiderstandes erwartet werden können.


    Kritik

    Vorab muß angemerkt werden, daß eine Pt100/1000 Temperaturmessung per Spannungsteiler ohne weitere Vorverstärkung wenig ideal ist. Zum einen fällt der Signalhub gegenüber der Speisespannung recht gering aus, zum anderen ist die Speisespannung nach oben begrenzt, da es aufgrund des Stromflusses durch den Sensor zu einer nicht vernachlässigbaren Selbsterwärmung kommt. Im Sinne einer geringeren Unlinearität des Meßsignals sowie der Eliminierung von Störgrößen auf dem Signalübertragungsweg sind Brückenschaltungen mit Differenz(vor)verstärker besser geeignet. Oft wird der Weg vom Sensor zum Meß(vor)verstärker auch in Mehrleitertechnik ausgelegt, um Übertragungsverluste bzw. Störungen kompensieren zu können.

    Als Alternative zu Pt100/1000 Sensoren empfehlen sich Kaltleiter (z.B. KTY81-xxx), wenn eine höhere Auflösung im oberen Temperaturbereich gefordert ist bzw. Heißleiter (z.B. NTC10k, NTC20k), wenn eine höhere Auflösung im niedrigen Temperaturbereich gefordert wird.



    Wenn die Infrastruktur nun aber gegeben ist und es doch irgendwie gehen muß…



    Theoretische Vorbetrachtungen

    In Solaranalgen treten zuweilen Temperaturen jenseits von 100°C auf, womit Halbleitertechnik mit integriertem Vorverstärker langsam an ihre Grenzen stößt (der MCP9700 ist z.B. bis max. 150°C spezifiziert) und der PT100/1000 Sensor daher gern eingesetzt wird. Dieser erlaubt bei entsprechender Vorverstärkung einen sehr hohen Meßbereich, der zwar oft nicht Anwendung findet, jedoch Temperaturen bis 200°C spielend abdeckt. Sollte die Applikation keine allzu großen Anforderungen an die Genauigkeit stellen, so kann unter Umständen ein Pt100/1000 Sensor in einfacher Spannungsteilerschaltung eingesetzt werden.


    Was kann man von so einem Konzept erwarten?


    Betrachten wir einen Pt100 Widerstand an einem Spannungsteiler 1:2, d.h. mit einem Vorwiderstand von seinerseits 100 Ohm. Die Brückenspannung betrage 5V und die Referenzspannung des 12Bit (4096 Digit) AD-Wandlers 2,5V. Bild 1 zeigt die erwarteten Spannungen und Digits des Wandlers bei Temperaturen zwischen 0°C ... 150°C.


    Tabelle 1: Spannungen, Ströme und Wärmebelastung des Pt100 bei Temperaturen zwischen 0°C und 150°C.


    Leicht erkennt man die mittlere Auflösung zwischen 0°C und 100°C/(4095-3434) = 0,1512 °C/Digit.


    Anmerkung:

    Die Wärmebelastung des Pt100 durch Eigenerwärmung ist aufgrund des hohen Stromes sehr hoch. Nachdem der anschließende Versuchsaufbau jedoch für eine gute Wärmeübertragung sorgt, kann dieser Effekt hier vernachlässigt werden. In der Praxis werden häufig (die für diesen Einsatzzweck besser geeigneten) Pt1000 Sensoren verwendet. Tauscht man hier den 100 Ohm Widerstand gegen einen 1000 Ohm Widerstand aus, ergeben sich die gleichen Auflösungen wie im obigen Rechenbeispiel jedoch bei lediglich 1/10tel der Wärmeentwicklung.


    Versuchsaufbau und Durchführung

    Der Versuch wurde bewußt mit „Hausmannsmitteln“ durchgeführt, da hier nur aufgezeigt werden soll, in welcher ungefähren Größenordnung Theorie und Praxis zueinander liegen.

    Als Referenztemperaturen kommen 0°C in Form einer Eis-Wassermischung und 100°C in Form von siedendem Wasser zum Einsatz. Durchgeführt wird das Experiment in einem ausgedienten Wasserkocher. Bild 1 zeigt den Versuchsaufbau mit dem Sensorstab im Eiswasser.


    Bild 1: Versuchsaufbau – Sensor im Eiswasser des Wasserkochers.


    Die Temperaturmessung wurde nach dem Einfüllen von Leitungswasser gestartet (0s ... etwa 200s). Nach einiger Zeit wurden die Eiswürfel hinzugegeben (bei etwa 200s) und mehrfach umgerührt, bis die Minimaltemperatur (0°C) erwartungsgemäß den maximalen Meßbereich von 4095 Digits erreicht hatte. Bei der Versuchszeit von ungefähr 1700s wurde der Wasserkocher eingeschaltet, was an einem Spannungsabfall bis etwas über 1800s zu erkennen ist. Anschließend stellt sich dann die Temperatur von 100°C bei einem Minimum von 3484 Digit ein. Bild 2 zeigt den Temperaturverlauf während des Versuchs.


    Bild 2: Temperaturverlauf während des Versuchs.


    Das Rauschen der Gesamtanordnung lag bei ungefähr +-3 Digit (also +-0,5°C), ermittelt während der „Eiswasserphase“ (Versuchszeit 900s ... 1100s). Bild 3 zeigt das diesbezügliche Signal.


    Bild 3: Signalrauschen um 0°C (Eiswasser).


    Die Auswertung der Meßergebnisse der AD-Wandlerwerte zeigt die folgenden Maximalwerte und Minimalwerte für die Temperaturen 0°C und 100°C (Tabelle 2).


    Tabelle 2: Gemessene Grenzwerte des AD-Wandlers bei 0°C und 100°C.


    Die mittlere meßtechnische Auflösung ergibt sich zwischen 0°C und 100°C somit als 100°C/(4095-3484) = 0,1637 °C/Digit.


    Fehlerbetrachtung

    Dem aufmerksamen Leser ist nicht entgangen, daß die im Versuch ermittelte Auflösung (0,1637° C/Digit) mit etwa 8% doch recht erheblich von der rechnerischen Auflösung abweicht (0,1512 °C/Digit). Die Ursachen hierfür sind vielfältig. Die Brückenspeisespannung wurde dem gleichen Netzteil entnommen, woraus auch der Raspberry Pi gespeist wurde, weicht von 5V ab und besitzt auch nicht die Spannungsstabilität der Referenzspannungsquelle (siehe Rauschen), der Brückenwiderstandswert beträgt nicht genau 100 Ohm und die Referenzspannung ist zwar stabil, liegt aber ebenfalls nicht genau bei 2,5V. Diese und andere Umstände (z.B. die Temperaturdrift des Vorwiderstandes) führen zu einer Verfälschung der Meßergebnisse.


    Fazit

    Wie man der Fehlerbetrachtung entnehmen kann, bedarf eine solche Meßkette einer zwingenden Kalibrierung. Aufgrund dessen, daß eine so ausgelegte Spannungsteilerschaltung das an sich lineare Widerstandssignal der Pt100/1000 Sensoren krümmt, sollte nicht allein auf eine 2-Punktkalibrierung abgestellt werden. Je mehr Stützpunkte verwendet werden, umso besser.

    Ebenfalls verbessert werden kann das Ergebnis durch Einsatz einer Vollbrücke, ggf. sogar unter Verwendung zweier Sensoren mit nachgelagerter differentieller Spannungsmessung am AD-Wandler. Erwartungsgemäß sollten Auflösung und Linearität steigen.


    Gereicht die Größenordnung der hier ermittelten Auflösung und Genauigkeit (unter Einsatz einer Kalibrierung) der Anwendung, so kann eine Temperaturmessung behelfsmäßig per Pt100/1000 mittels einfachem Spannungsteiler erfolgen. Aufgrund der niedrigeren Stromaufnahme (und damit geringeren Selbsterwärmung) bei gleicher Auflösung ist der Pt1000-Variante der Vorzug zu geben.


    Schöne Grüße


    schnasseldag

  • Hallo Schasseldag,


    sehr interessant, ich würde das gerne mit dem Pt1000 mal nachbauen, blicke aber nicht so ganz durch, wo das was angeschlossen wird.

    Meine Pt1000 haben 2 Adern,

    1 Kabel geht an den analogen Port AI1 (orange/gelbes Kabel) und dann?

    Und das andere?

    Anstelle des 100 Ohm nehme ich einen 1000 Ohm Widerstand, das habe ich auch verstanden, aber viel mehr nicht :-(

    Quote

    Gereicht die Größenordnung der hier ermittelten Auflösung und Genauigkeit (unter Einsatz einer Kalibrierung) der Anwendung, so kann eine Temperaturmessung behelfsmäßig per Pt100/1000 mittels einfachem Spannungsteiler erfolgen.


    Was ist ein einfacher Spannungsteiler?
    Hat das was mit Messwerterweiterung zu tun ?


    Besten Dank für die Mühe


    Gruß Fine

  • Hallo Fine,


    der Anschluß erfolgt recht einfach und zwar so:


    Masse --- 1k-Widerstand --- AI0-Eingang --- Pt1000-Sensor --- +5V


    Auf diese Weise kannst Du bis zu 0°C messen (da hat der Pt1000 seinen 1k Wert). Um auf der sicheren Seite zu liegen, könntest Du auch einen - sagen wir mal - 800 Ohm Widerstand einsetzen. Dann geht zwar ein wenig Auflösung flöten, dafür kämst Du aber unter 0°C mit dem Meßbereich.


    Du schreibst oben, den AI1 Eingang verwenden zu wollen. Das kannst Du natürlich. Allerdings verwendet das Python-Demo den AI0. Hier mußt Du also den Eingang abändern.

    Was ist ein einfacher Spannungsteiler?

    Die Antwort auf diese Frage überlasse ich mal der Suchmaschine Deines Vertrauens :-)

    Hat das was mit Messwerterweiterung zu tun ?

    Jein. Um eine Widerstands/Spannungswandlung kommst Du nicht umhin. Hättest Du den Hubo nicht schon komplett zusammengelötet, dann könntest Du den Kondensator des Eingangstiefpasses durch den 1k Widerstand ersetzen und so Deinen Sensor zwischen AI0 (oder einen der anderen Analogeingang) und 5V anschließen. Prinzipiell geht das auch jetzt noch, wenn Du parallel zum 100nF Kondensator den 1k Widerstand lötest. Aber probier erst mal mit einem "fliegenden" Widerstand. Ist dessen Wert erst einmal endgültig gefunden, dann kannst Du ihn ja immer noch Huckepack drauflöten.


    Schöne Grüße


    schnasseldag

  • Hallo,

    jetzt habe ich den Testaufbau wie oben beschrieben durchgeführt und etwas gemessen.

    Basis war das Beispiel Script Einlesen der analogen Eingänge des Hubo mittels Python von hier, dort wird eine Variable count benutzt, sind das die "Digits" im obigen Beitrag?

    Ich habe den Pt1000 in einen Wasserkocher gesteckt und das Wasser kochen lassen und parallel dazu ein DS18B20 mitmessen lassen und dabei jede Menge Werte bekommen, nur weiß ich nicht so recht, wie ich diese Werte in Grad Celsius umrechne.


    Kann mir wer bitte bei der Umrechnung helfen?


    Danke

    Gruß Fine



  • Du musst dir die Funktion zu deinen Werten bestimmen. Da sie Linear ist:

    Steigungsfaktor = (1868-2708)/(100-18) = -10,25

    Nullpunkt: 2708-(-10,25*18) = 2892


    Die Formel ist dann: Temperatur = 2892-10,25x (x ist der Messwert)

    Quatsch, es muss natürlich heißen x = 2892-10,25*Temperatur wobei x der Messwert ist...


    Ich habs nochmal in Excel automatisiert mit allen Werten rechnen lassen, damit werden nicht nur zwei Werte bei der Formelbildung berücksichtigt.

    Excel bekommt als Formel raus: 2917-10,5x (Grafisch sehe ich da einen Ausreißer bei 55 °C, der könnte die Abweichung im Wesentlichen verursachen.)


    PS: Nimm doch mal einen Messwert in Eiswasser (0° C) - dann hast du den genauen Nullpunkt und bist auch sicher, dass nicht dein Vergleichsthermometer falsch misst. Vorausgesetzt der Sensor arbeitet sauber linear, sind diese beiden Werte (definitionsgemäß) die beste Möglichkeit, deine Messung zu kalibrieren. (Jaja, Normaldruck, 0,002519, 99,9839 usw. - nicht dass wieder einer kommt und es besser weiß!)

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited 2 times, last by Gnom ().

  • Hallo,


    ich habe jetzt noch bei 0° C im Eiswasser gemessen und dabei als Count Wert 3048 und 1,88267578125 V erhalten.

    Wenn ich das oben richtig interpretiere, ist die "18" in der 2. Klammer der tiefste Wert und da ich jetzt 0 °C als tiefsten Wert habe, müsste der Steigungsfaktor lauten: (1868-3048)/100 = -11,78

    Der Nullpunkt müsste demnach sein 3048-(-11,78) = 3060

    So, und jetzt hänge ich:
    Temperatur = 3060-11,78 x Volt)? ergibt immer eine große 4 stellige Zahl, bei 100° = 1.15258300781 V kommt da 3073,83 raus bzw. wenn ich die Klammern anders setze, -13,577

    Da stimmt ja eine wichtige Kleinigkeit noch nicht, nur bekomme ich es weder am Taschenrechner noch sonstwie hin, dass da 100 rauskommt


    Wo ist der Fehler?

    Danke

    Gruß Fine

  • Der Fehler war bei mir - ich hab die Formel falsch geschrieben und vergessen nach T umzustellen.


    Wenn ich es jetzt nochmal mit der Messung für 0 °C mache, erhalte ich:


    (1868 - 3048) / 100 = -11,8

    Temperatur = (3048 - Messwert) / 11,8


    Allerdings korrelieren die Werte extrem schlecht. Laut Hersteller hat der Sensor einen linearen Messverlauf.

    Mit deinen Messwerten kann was nicht stimmen - die Werte von 50 °C und 55 °C sind identisch. Kannst du das prüfen?

    Außerdem erscheint mir dein gemessener Wert für 0 °C sehr hoch. kannst du das nochmal (für 0 und 100 °C und vielleicht für ein paar Zwischenwerte) wiederholen?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited 2 times, last by Gnom ().

  • So, ich habe jetzt nochmals eine Messreihe gemacht und ähnliche Ergebnisse rausbekommen



    Die Werte aus der 1. Spalte wurden mit einem DS18x ermittelt, die beiden anderen Werte aus o.g. Python Script

    Genau 100°C hat der DS18x nicht angezeigt, obwohl das Wasser sehr stark gekocht hat, aber auf das Grad genau muss das ja auch nicht sein.


    Umgesetzt auf die neuen Werte sind das bei 0°C 3061 Count und bei 100°C 1865 Count


    Gemäß Deiner Formel oben ergibt das:

    (1865 - 3061) / 100 = -11,96

    Temperatur = (3061 - Messwert in Count) / 11,96

    Passt leider irgendwie nicht, da kommen meistens Differenzen von 5-7° raus :-(


    Was mach ich jetzt falsch?


    Danke

    Gruß Fine

  • Hm, angeblich soll dieser Sensor linear arbeiten und sehr genau sein...

    Vielleicht fragst du mal beim Hersteller.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!