PHP Dashboard für HmIP Smartmeter
09.10.2024
Elektronik | Funk | Software
Der Technik-Blog
Beim PT100 handelt es sich um einen Temperatursensor mit einem positiven Temperatur-Koeffizienten (PTC), der überwiegend in der industriellen Messtechnik verwendet wird. Der Sensor hat bei 0 °C einen Widerstand von genau 100 Ohm. Steigt die Temperatur an, so steigt auch der Widerstandswert vom PT100 annähernd linear an. Problematisch ist die Datenauswertung mit einem Mikrocontroller, da sich der Widerstandswert bei einer Temperaturänderung nur geringfügig ändert und dies nicht ohne weiteres über einen einfachen Spannungsteiler eingelesen werden kann. In diesem Artikel geht es um den Bau eines sehr einfachen Messverstärkers für das Einlesen von PT100 Temperatursensoren mit dem Arduino.
Hinweis: Bei dieser Schaltung handelt es sich um einen sehr vereinfachten Messverstärker, der eine Temperaturmessung mit einem PT100 Sensor am Arduino ermöglicht. Der Leitungswiderstand wird nicht berücksichtigt, daher ist ein Abgleich mit dem Beispielprogramm und einem Potentiometer erforderlich.
Der PT100 kommt aus dem Bereich Industrietechnik und kann sehr kleine Temperaturveränderungen (0,1 Grad Celsius und besser) messen. Diese Auflösung wird aber nur erreicht, wenn die Elektronik zur Auswertung entsprechend präzise arbeitet. Der Kennlinie nach ändert sich bei einem typischen PT100 der Widerstandswert pro 1 °C um etwa 0,39 Ohm. Nicht selten kommt es vor, dass eine lange Messleitung zum Sensor einen Eigenwiderstand von 0,5 bis 1 Ohm aufweist. Deshalb kann es vorkommen, dass durch die Messleitung die gemessene Temperatur schon um einen Grad Celsius zu hoch ist. Um dies zu kompensieren, wird mit einem Drei- oder Vierleitersystem gearbeitet. Problematisch ist auch die Auswertung des Sensors mit einem Mikrocontroller, da sich der Widerstand vom PT100 nur sehr geringfügig ändert und dies nicht mit einem einfachen Spannungsteiler ausgewertet werden kann. Zudem beträgt die Auflösung analoger Eingänge bei vielen Mikrocontrollern oft nur 10 Bit, was das Messen kleiner Spannungsänderungen praktisch unmöglich macht. Zuletzt sei noch erwähnt, dass auch der Messstrom, der durch den PT100 fließt, sehr klein gewählt werden sollte, um eine Eigenerwärmung möglichst zu verhindern.
Mit der Temperatur ändert sich der Widerstand vom PT100. Damit diese Änderung mit einem Mikrocontroller gemessen werden kann, muss der Widerstand in eine Spannung umgewandelt werden. Schaltet man einen PT100 und einen 10K (0,1 % Toleranz) Widerstand seriell zu einer Spannungsquelle, dann kann in der Mitte eine Spannung gemessen werden, welche sich in Abhängigkeit von der Temperatur ändert:
Betrachtet man die Tabelle, so fällt auf, dass sich die Spannung bei einer Temperaturänderung von 25 °C nur um etwa 4,75 mV ändert. Ein Mikrocontroller wie beispielsweise der Arduino Uno kann den analogen Eingang mit 10 Bit (0-1023) auflösen. Eine Spannungsmessung von 0 bis 5 Volt ist damit in 4,88 mV Schritten (5000 mV/1023 = 4,88 mV) möglich. Folglich bedeutet das, dass der Arduino über den Spannungsteiler die Temperatur vom PT100 nur in rund 25 °C Schritten messen kann und diese Art von Schaltung unbrauchbar ist. Aufgabe ist es nun, die Spannungsänderung so zu verstärken, sodass der Arduino mit seiner 10-Bit Auflösung den PT100 zumindest in 0,5 °C Schritten einlesen kann.
Die Wheatstonesche Messbrücke ist ein Schaltungsaufbau mit vier Widerständen. Damit ist es möglich, sehr kleine Widerstandsveränderungen zu messen. Im Wesentlichen besteht diese Schaltung aus zwei Spannungsteilern (R1,R3 und R2,R4). In der Mitte wird ein Multimeter angeschlossen. Sind die Widerstandswerte von R1 und R3 identisch mit R2 und R4, so ist die Spannung zwischen den beiden Teilern in der Mitte gleich null:
Wird der Widerstand R3 durch den PT100 ersetzt, so weist dieser bei 25 °C einen Widerstand von 109.73 Ohm auf. Es entsteht eine Unsymmetrie in der Messbrücke und dadurch steigt die Spannung zwischen den Spannungsteilern:
Anstelle des Multimeters wird jetzt ein Operationsverstärker angeschlossen, welcher die entstandene Spannungsdifferenz vergleicht und verstärkt.
Der LM358 ist ein einfacher Operationsverstärker, welcher in der folgenden Schaltung die Spannung zwischen den Spannungsteilern der Wheatstone-Brücke vergleicht und die Differenz als Spannung ausgibt. Der Widerstand R5 befindet sich zwischen dem Ausgang und dem invertierenden Eingang und bildet eine Rückkopplung (Gegenkopplung). Dadurch wird der Verstärkungsfaktor des Operationsverstärkers eingestellt.
Die fertige Schaltung muss jetzt einmalig kalibriert werden. Dazu wird ein Potentiometer oder noch besser ein Trimmer verwendet, der idealerweise 200 Ohm hat. Mit einem Multimeter wird der Trimmer zuerst auf genau 100 Ohm eingestellt und anschließend wird die Ausgangsspannung von der Schaltung gemessen. Beim Versuchsaufbau wurde eine Spannung von 0,079 Volt gemessen. Nun kann notiert werden, dass eine Temperatur von 0 °C einer Spannung von 0,0079 Volt entspricht. Anschließend werden weitere Messungen bei 25 °C, 50 °C, 100 °C und 150 °C vorgenommen. Das Potentiometer oder der Trimmer wird nach folgender Tabelle eingestellt:
Temp. | Ω | Volt |
---|---|---|
0°C | 100 | 0.079 |
25°C | 109.73 | 0.560 |
50°C | 119.40 | 1.040 |
100°C | 138.51 | 1.990 |
150°C | 157.91 | 2.950 |
*Die Werte für die Ausgangsspannung stammen vom Versuchsaufbau bei einer Betriebsspannung von 5.0 Volt und können abweichen. Sie sind daher nur als Beispielwerte zu verstehen!
Beobachtet man die Ausgangsspannungen bei verschiedenen Eingangswiderständen, so stellt man fest, dass das Verhältnis zwischen Widerstand und Spannung nicht linear ist. Im Beispielcode vom Ardunio wird dieser Fehler teilweise Softwareseitig kompensiert.
Der vollständige Beispielcode kann von dieser Seite kopiert werden. Das Offset ist auf 0 °C eingestellt und sollte an den Leitungswiderstand angepasst werden. Die ermittelten Kalibrierungswerte werden an folgender Stelle eingefügt:
// Define known points (voltage & temperature) const float voltages[] = { 0.079, 0.56, 1.04, 1.99, 2.95 }; // Voltages in Volts const float temperatures[] = { 0, 25.0, 50.0, 100.0, 150.0 }; // Temperatures in Celsius
Die Software wandelt die Eingangsspannung von Pin A0 in einen Temperaturwert um. Anhand der Kalibrierwerte sucht sich das Programm die nächste größere Spannung im Array "voltages" mit dem zugehörigen Temperaturwert und rechnet sich zwischen den vorherigen Wert im Array die Interpolation aus. Das Array kann noch um weitere Daten ergänzt werden, um einen bestimmten Messbereich noch präziser auflösen zu können.
Um die Temperatur noch präziser auflösen zu können, kann man einen anderen Mikrocontroller mit einer 12-Bit-Auflösung oder einen externen AD-Wandler mit einer Auflösung von 16-Bit verwenden. Zuletzt sei auch noch erwähnt, dass der über 50 Jahre alte LM358 zwar sehr beliebt und einfach ist, aber längst durch bessere Operationsverstärker ersetzt werden könnte. Der zweite freie Eingang vom LM358 könnte eventuell für die Messung des Leitungswiderstandes verwendet werden, um diesen automatisch mit der Software zu kompensieren.
PT1000 Sensoren können nicht direkt analog mit einem Mikrocontroller gemessen werden. Wie baut man einen Messwandler mit dem LM358 für den PT1000 und Arduino?
WeiterlesenDer PT100 ist ein sehr präziser industrieller Temperatursensor. In diesem Artikel geht es um den Bau eines Messverstärkers zum Einlesen eines PT100 am Arduino
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved