Messen von Temperaturen mit LM135 / LM235 / LM335 und Mikrocontrollern

Auf der Vorseite wurden zahlreiche Schaltungsvorschläge für die Verwendung der LMx35 gezeigt. Die meisten haben aber für das Messen mit ADC-Eingängen von Mikrocontrollern (MCU) den Nachteil, dass die Messspannung nicht für den den vorgesehenen Messbereich zwischen Masse und Aref des MCUs liegen wird.

Außerdem sind auf der Vorseite die meisten Schaltungen für eine Steigung von 10 mV/K, der natürlichen Steigung der LMx35er, ausgelegt. Diese geringe Steigung kann bei der Messung mit ADCs zu ungenauen Werten führen. Beispiel: Der AtMega im Arduino hat einen ADC mit einer 10 bit Auflösung, was bei Vref = VDD = 5 V eine Stufung von 4,8 mV/Stufe bedeutet. Das entspricht 0,5 K. Zieht man noch in Betracht, dass der Wandlungsfehler des ADCs ±2 bit betragen kann, dann hat man eine Genauigkeit von
±1 K bei einer Temperaturmessung. Das kann eine hohe Ungenauigkeit sein!

Selbst wenn man den Aref -Eingang auf 3,8 V ( = 100 °C) herabsetzte, ergäbe das immer noch 3,7 mV/Stufe.

Es kann deshalb sinnvoll sein, einen Sensor so zu betreiben, dass ein Messbereich von z. B.
ΔT = 100 K (z. B. 0 °C - 100 °C) auf 0 V - 5 V abgebildet wird. Dieser wird in 1023 Stufen codiert, das sind ca. 0,1 K/Stufe. Damit erreicht man eine wesentlich bessere Genauigkeit. Legt man die Differenz noch geringer aus, z. B. ΔT = 30 K, was für ein Zimmerthermometer sinnvoll sein könnte, so kommt man auf 0,03 K/Stufe. Was 30 mK physikalisch auch immer bedeuten?

Wenn man eine analoge Lösung wünscht, kann man mit nebenstehender Schaltung arbeiten. Die gezeigte Dimensionierung ist für Ubat =12 V ausgelegt, muss aber auf andere Spannungen und Anforderungen umdimensioniert werden.

Hier "hängen" der LMx35 und die Referenzspannung an Vbat (Plus) und stehen nicht, wie üblich, auf Masse. Vref liegt mindestens (P1 = 0) um -2V5 unter Vbat, was einer unteren Messbereichs-Temperatur von -23,15 °C entspricht. Vref lässt sich durch P1 anheben. Der Spannungsabfall am LMx35 steigt mit 10 mV/K, Vtemp sinkt deshalb. Diese Spannung wird durch die gesteuerte Stromquelle um U1 in einen Strom Imess umgewandelt, der an Rmess einen Spannungsabfall erzeugt, der dann gemessen wird. Durch die Spannungs-Strom-Wandlung darf Ubat etwas Schwanken, es werden also keine großen Anforderderungen an die Stabilität gestellt.

LM135 oder LM335? Nach meiner Erfahrung ist der LM135 besser selektiert in der absoluten Genauigkeit (0 °C = 2,7315 V) und der exakten Steigung mit 10 mV/K, in der Linearität der Steigung sind beide aber sehr nahe beieinander. Da diese Schaltung, wie unten beschrieben, eh zu eichen ist, kann der weitaus billigere LM335 hier gut benutzt werden.

Dimensionierung:

Das Pferd wird von hinten aufgezäumt:

Will man einen ADC in einem Mikrocontroller anfahren, dann liegt die erlaubte maximale Eingangsspannung üblicherweise auf VDD des MCUs. Das sind meistens 3V3 oder 5V. Die ADC-Eingänge sind oft sehr hochohmig, es gibt aber auch MCUs, bei denen ein Engangsstrom von ca. 1 µA angegeben wird. Deshalb wird hier ein Imess von ca. 500 µA angesetzt. Für 3V3 wird Rmess dann zu 6k8, für 5V zu 10k. (Einige) Atmel MCUs lassen die interne Aref-Spannung des ADCs auf 1V1 setzen, Rmess liegt dann bei 2k2. Die interne Auflösung beträgt dann ca. 1 mV/Schritt, was m. E. einen Einfluss auf die Genauigkeit haben könnte. Ich ziehe größere Schritte vor.

P2 steuert die Umsetzung der vom LMx35 erzeugten temperaturabhängigen Spannung in den Mess-Strom. Die Größe bestimmt den Messbereich. Soll der Messumfang
ΔT z. B. 100 K betragen, dann ist ΔV = 1V, P2 wird dann zu 1 V / 500 µA = 2k. Will man ΔT kleiner wählen, dannn wird auch P2 entsprechen kleiner. Die gezeigten 250 Ω galten für ein ΔT = 10 K. Mit P2 wird der Umsetzungsfaktor bestimmt, es empfiehlt sich deshalb, immer eine Serienschaltung aus Festwiderstand und Poti zu wählen, also z. B. 1k5 + 1k für 2k2 usw. Das erleichtert das Justieren erheblich, insbesondere bei der Verwendung mehrgängiger Präzisionspotis.

Ist ein bestimmter Messbereich ausgesucht und damit der Spannungsabfall über P2 bekannt, dass ergibt sich für die Mindestversorgungsspannung Umess-max + 0,5 V +
ΔV + |Vref|. Umess ist die maximale Messspannung ( 3V3 oder 5V), 0,5 V spendieren wir dem Reihentransistor, ΔV ist der Spannungsabfall über P2 und Vref die Referenzspannung "für Null".

Das kann ein Pferdefuß sein: Es wird kaum gelingen, die Schaltung für Umess = 3V3 mit Ubat = 5 V zu betreiben, weil Vref dann bei 2V5 zu liegen kommt und Vref nicht unter Umess liegen darf. Ubat-min muss für Umess 3V3 ca. 7V5, für 5 V  9 V betragen. Eine 9 V Blockbatterie sollte lange laufen, besonders, wenn die Schaltung nur zum Messen eingeschaltet wird, s. unten.

Hat man ein Ubat ausgesucht, kann man R3 und R4 auslegen. R4 ergibt sich aus (Ubat - ULMx35-max) / 0,001 A. Beispiel für Ubat = 12 V und Tmax = 100 °C: (12 - 3,71) = 8,3 / 0,001 = 8k2, also der nächstniedrigere Normwert. Für R3 gilt (Ubat - Vref) / 0,002 A. Beispiel für 12 V und Tmin = 0 °C: (12 - 2,73) = 9,3 / 0,002 = 3k9

Schließlich die Auslegung für P1: Durch R1 ist der Strom in diesem Zweig auf ca. 1,1 mA gesetzt. An P1 muss also (Vref - 2V5) abfallen. Für Tmin = 0 °C muss Vref auf 2,73 V eingestellt werden, der Spannungsabfall muss 0,23 V betragen. (0,23 / 0,0011) = 209
Ω. In Praxis wäre eine Reihenschaltung Festwiderstand - Poti von 150R + 100R zu empfehlen. Der Widerstandswert kann für höhere untere Temperaturen höher sein, s. unten Abgleichen.

Für den Operationsverstärker, dessen Anschlüsse an Masse und Ubat nicht eingezeichnet sind, eignen sich viele: Vom klassischen µA741 bis zu ganz neuen Typen sollten alle problemlos laufen, weil weder Masse noch Ubat an einen der Eingänge oder den Ausgang kommen können.

Zum Anschluss der Ausgangsspannung an den MCU: Bei begrenzten Messbereichen kann die obere Grenze überschritten werden, z. B. das Zimmerthermometer wird direkt von der Sonne beschienen. In diesem Fall kann die Temperatur deutlich über 40 °C liegen. Ein klassisches Flüssigkeitsthermometer könnte dann platzen (zur Vermeidung  gehen fast alle Skalen bis über 50 °C), die Schaltung hier erzeugt dann eine Ausgangsspannung, die über Aref des MCU-Eingangs liegt. Diese wird über die Eingangsschutzdioden des MCUs nach VDD des MCUs abgeleitet. Dieser Strom kann dann etwas höher als die gewählten 500 µA sein, was die Dioden nicht gefährden sollte. Vorsichtige setzen deshalb in diesen Pfad noch einen Schutzwiderstand, die hier ca. 10k betragen sollte. Bei hochohmigen Eingängen wie beim Arduino kann dieser auch erheblich größer sein. Aber bei anderen, die z. B. einen Eingangsstrom von 1 µA ziehen, können 10k schon viel sein, weil daran eine konstante(?) Fehlspannung von 10 mV entsteht.

Rmess kann im Prinzip auch ein Strom-Zeigerinstrument sein. Dieser Strom Imess darf nicht zu groß werden, 10 mA sind eine vernüftige Obergrenze, P2 wird entsprechend klein.

Abgleichen:

Man misst den benutzten
LMx35, keinen Anderen(!), aus. Als Mess-Schaltung kann man z. B. eine 9 V-Blockbatterie und einen 5k6 Widerstand in Reihe (s. oben LM335 und R4, geht hier auch in umgekehrter Reihenfolge) zusammenlöten oder stecken. Die Spannung über dem LMx35 misst man bei den auf der Hauptseite beschrieben Eichpunkten 0 °C und Achseltemperatur und hat damit zwei Werte für eine Geradengleichung y = ax + b. "b" ist die Spannung bei 0 °C, "a" errechnet sich aus der Umstellung der Gleichung mit a = (y - b)/x . "y" ist hier die Spannung bei der Temperatur "x" in der Achselhöhle. Damit sind die Parameter a, der nahe bei 0,01 liegen sollte, denn es sind die nominellen 10 mV/K, und auch b bestimmt, man kann Vref (= yref) für den unteren Anzeigewert xu ausrechnen. Vref stellt man nach dem Aufbau der Mess-Schaltung mit einem DVM über dem TL431 durch Drehen an P1 ein.

Die Spannungs-Strom-Wandlung über U1 wird mit P2 justiert. Am genauesten lässt sich dies mit einer Hilfsschaltung einstellen, referierte Werte sind mit ' markiert, die man vorübergehend auf eine Steckbrett aufbaut und genau der Gruppe um den TL431 oben links entspricht, allerdings mit einem höheren Wert für P1', um Vtemp-max zu simulieren. Für ein
ΔT = 100 K wäre Vtemp-max 100 x "a", also ca. 1 V, für geringe ΔT entsprechend weniger. P1' muss für 100 K ca. 900 Ω betragen, für ein kleineres ΔT entsprechend weniger. Mit dieser Schaltung ersetzt man den LMx35 vorübergehend. Mit einem DVM misst man die Spannung zwischen Vref und Vtemp und stellt jetzt mit P1' die Spannungsdifferenz auf den zuvor gerechneten Wert ein. Dann geht man an Rmess, misst die dort anliegende Spannung und justiert diese mit P2 auf den Wert von Aref des ADCs im MCU. Alternativ kann man ein kleines Programm für den MCU schreiben, das in einer Schleife ständig den ADC ausließt und die ermittelte Zahl (am PC) ständig anzeigt. Mit P2 wird diese für einen 10-bit ADC auf 1023, für einen 12-bit ADC auf 4095 eingestellt.

Die Justierung ist damit abgeschlossen und der LMx35 wird jetzt angeschlossen.

Fällt die Achseltemperatur in den vorgesehenen Messbereich, kann man natürlich auch versuchen, auf die auf der Hauptseite gezeigten Weg zu eichen. Der zuerst empfohlene Weg scheint einfacher und genauer.



Auf der Hauptseite wurde der Messfehler durch die Eigenerwärmung der LMx35 angesprochen. Dieser lässt sich vermeiden, indem die Messanordnung nur für kurze Zeit, wenige µs, angeschaltet wird. Das lässt sich mit der nebenstehenden Schaltung erreichen.

Liegt der Ausgang des MCUs auf Null, dann ist der untere Transistor gesperrt und
damit der obere auch, er erhält keinen Basisstrom. Setzt man den Ausgang auf 1, so wird der untere Transistor geöffnet und der obere macht durch den jetzt fließenden Basisstrom ebenfalls auf. Man sollte der Messschaltung etwas Zeit zum Einschwingen geben, die Einschwingzeit eines LM335 liegt bei 5 µs, des TL431 bei 1 µs, 10 µs sollten also ausreichen. Danach mehrere Messungen sofort hintereinander ausführen und wieder abschalten.  Der Mittelwert mehrerer Messungen streut nicht so stark. Temperaturen ändern sich i. A. nicht schnell, Pausen von 5 s bis 10 s oder länger zwischen jeder Messung sollten möglich sein.

Version: 1.2  Copyright: Rolf Süßbrich, Dortmund,  08.09.2020