In der folgenden Schaltung soll mithilfe des temperaturabhängigen Widerstandes PT100 Temperatur im Bereich von 0°C bis
100°C gemessen werden. Die Temperatursensoren PT100 und PT1000 sind in der Industrie sehr verbreitet. Sie werden aus Platin hergestellt
und im Temperaturbereich −200 °C bis 850 °C eingesetzt. Die Sensoren weisen weitgehend eine lineare Kennlinie auf und erlauben präzise
Temperatur Messungen. In dem Versuch kommt der Platinfühler PT100 Model H2-012010 der Fa. Fühlerdirekt zum Einsatz. Anhand der beigefügten
Werte-Tabelle kann ersehen werden, dass die Temperaturänderungen des Fühlers in Abhängigkeit von der Temperatur nahezu
linear verlaufen:
PT100 Temperaturverlauf
Als Meßsignal dient der Spannungsabfall an dem PT100 Fühler. Um den Einfluss der Eigenerwärmung durch den Strom zu
begrenzen, wird der Fühler von einer Konstantstromquelle mit Strom versorgt. Dabei ist zu beachten, dass der Strom den Wert von
1 mA möglichst nicht überschreitet. Als Stromquelle verwenden wir in dem Versuch den einstellbaren Spannungsregler LM317, der als
Stromregler verdrahtet wird. Die Maßnahme ist sinnvoll. Der Widerstand des Fühlers ist sehr gering und liegt in unserem Messbereich
bei 100 bis 140 Ohm. Bei einem Strom von 1mA entsteht hier eine Spannungsdifferenz von gerade 40 mV. Der Wert ist äußerst klein und
kann schnell durch Eigenerwärmung verfälscht werden. Die Einstellung des LM317 auf den gewünschten Strom ist sehr leicht und wird mit
nur einem Widerstand realisiert (R1). Die Berechnungen des Widerstandes kann man mit E-Rechner schnell
erledigen:
Damit Arduino an seinem analogen Eingang mit dem Meßsignal etwas anfangen kann, muss es verstärkt werden. Die Aufgabe
übernimmt der Operationsverstärker (OPV) TL071CP. Die Operationsverstärker können auch sehr schwache Signale sehr stark verstärken. In
unserem Fall wollen wir den maximalen Spannungsabfall am PT100 von 40 mV auf 5 V erweitern. Damit beträgt der Verstärkungsfaktor
(V=Ua/Ue=5 / 0,04) 125. Um eine gewünschte Verstärkung an einem OPV zu erreichen, werden zwei Widerstände benötigt (hier R2 und R3).
Die Berechnung der Widerstände kann ebenfalls der E-Rechner übernehmen:
Es bleibt nur noch das Problem der Offset-Spannung. Bei der Temperatur von 0 °C beträgt der Widerstand des Fühlers 100 Ohm.
Im Punkt A (Messsignal) messen wir jetzt (U=I*R=100*0,001) 0,1 V. Wenn wir hier nichts unternehmen, bekommen wir an dem Ausgang des OPV
eine Spannung im Wert von 12,5 V (Ua = 125 * 0,1V). Das wäre eine Katastrophe. Es gilt jetzt, diese Spannung auf 0 V zu reduzieren.
Hierzu nutzen wir zwei weitere Anschlüsse (Pin 1 und 5) des Operationsverstärkers. Mit weiteren Widerständen lässt sich diese
Spannung beseitigen.
Damit das möglich ist, wird der Bereich der Spannungsversorgung des OPV erweitert. Mit einem DC/DC-Wandler drehen wir die
Versorgungsspannung in Minus-Bereich und versorgen damit den Baustein. Der OPV wird jetzt mit einer Spannung -9 V bis +9 V versorgt.
Anschließend werden drei Widerstände R4, R5 und R6 zusammen mit dem Potenziometer P1 an die Anschlüsse Pin 1 und 5 des OPV angeschlossen.
Bei der Inbetriebnahme wird an die Anschlüsse A und B ein 100 Ohm Widerstand angeschlossen. Mit dem Potenziometer P1 kann dann
die Offset-Spannung genullt werden. Sobald dies erreicht ist, kann der Widerstand gegen PT100 getauscht und der Ausgang des OPV an den
analogen Eingang des Arduino angeschlossen werden. Die Spannungsdifferenz von 0 bis 40 mV wird verstärkt und an Arduino weitergeleitet.
Der Rest der Aufgabe, die Anzeige der Messwerte, muss jetzt Arduino übernehmen.
Die Messwerte werden auf einem 2x16 Display angezeigt. Das Display wird dank des Treibers FC-113 über den I2C-Bus
angesteuert. Für die Spannungsversorgung des Displays sorgt der Festspannungsregler L78L05, der konstant
5 VDC liefert.
Die Aufgabe des Programms ist es, den aktuellen Wert am analogen Eingang auszulesen, daraus den aktuellen Widerstand
des Fühlers zu bestimmen und anschließend die aktuelle Temperatur zu ermitteln.
Da die ausgelesenen Werte am analogen Eingang etwas hin und her springen, wird aus den letzten 20 Werten ein Mittelwert gebildet.
Dadurch wird die Anzeige deutlich beruhigt.
Im zweiten Schritt wird der aktuelle Widerstand des PT100 Sensors ermittelt. Dabei gehen wir davon aus, dass wir 5 V am analogen
Eingang des Arduino bei 140 Ohm erreichen.
Durch PT100 fließt ein Strom von ca. 1 mA. Daraus ergibt sich ein Spannungsabfall von U = 40 Ohm * 0,001 A = 0,04 V. Diese Spannung
wird um den Faktor 125 verstärkt. Das ergibt am Ausgang des Verstärkers eine Spannung im Wert von U = 0,04 V * 125 = 5 V. Bei den
Berechnungen werden nur die 40 Ohm berücksichtigt. Den Einfluss von restlichen 100 Ohm haben wir durch Offset-Manipulationen beseitigt.
Somit gilt:
R = (Eingangswert * 40 / 1023) + 100.
Während der praktischen Tests ergab sich eine Messabweichung von einigen Prozenten. Um zufriedenstellende Ergebnisse zu bekommen,
müssen diese Abweichungen korrigiert werden. Hier wird also zusätzlich ein Korrekturfaktor eingeführt.
Die Berechnung der Temperatur ergibt sich aus der Formel:
Formel
Konstanten
Anschließend werden die Werte auf dem Display angezeigt.
// ----------------------------------------------------------
// Temperaturmessung mit PT100
// mit LM317, DC/DC-Wandler, Operationsvertärker
// Arduino Nano, IDE 1.8.13
// ----------------------------------------------------------
#include<LiquidCrystal_I2C.h> // Display Bibliothek
LiquidCrystal_I2C lcd(0x27,16,2); // Display 16x2, Adresse 0x27
float MFeld [20]; // Tabelle für Mittelwert
void setup() {
lcd.init(); // Display initialisieren
lcd.backlight(); // Hintergrundbeleuchtung
}
void loop() {
lcd.clear();
// Wert auslesen
float A_Wert = analogRead(A0);
// Mittelwert festlegen
float Mittelwert = 0;
for (int i = 19; i > 0; i--) {
MFeld [i] = MFeld [i-1];
Mittelwert = Mittelwert + MFeld [i]; }
MFeld [0] = A_Wert;
Mittelwert = (Mittelwert + MFeld[0]) / 20;
// Widerstand berechnen
float R = Mittelwert * 40 / 1023;
float Korrektur = R * 0.1; // Korrektur in %
R = R - Korrektur + 100;
// Widerstand ausgeben
lcd.setCursor(1, 0); // Start Anzeige R
lcd.print("R = ");
String Text = String(R);
lcd.setCursor(5, 0);
lcd.print(Text + " Ohm");
// Temperatur
float a = -0.00005775; // = 100 * -5.775E-07
float b = 0.39083; // = 100 * 3.9083E-03
float c = 100 - R;
float D = sq(b) - (4 * a * c);
float T = (-b + sqrt(D)) / (2 * a);
lcd.setCursor(1, 1); // Start Anzeige T
lcd.print("T = ");
Text = String(T);
lcd.setCursor(5, 1);
lcd.print(Text + " *C");
delay(1000);
}
// ***************************************************************************************