Basierend auf AN1154 von Microchip zum 22-Bit-Delta-Sigma-A/D-Wandler MCP2550 habe ich mir ein kleines Thermometer gebaut. Details zum Messverfahren sind dieser Anwendungsidee zu entnehmen.
Es hat bestechende 0,01 °C Auflösung in einem breiten Temperaturbereich. Die absolute Genauigkeit liegt sicherlich bei gerade einmal 0,1°C, aber hey. Leider habe ich keine Möglichkeiten, um die Genauigkeit bei relativen Messungen zu testen. Der geplante Temperaturbereich von -80°C bis 600 °C ist riesig, und man sollte kein Genauigkeitswunder bei diesem Riesenbereich erwarten.
Dafür ist das Thermometer auch schnell aufgebaut und vor allem preiswert. Das LCD (0,95€) samt Stecker kommen von Pollin, der Rest von Reichelt. Oh, und nicht vergessen, einen den Pt100-Sensor mitzubestellen! Besonderes Augenmerk ist auf den Referenzwiderstand zu legen: Dieser sollte einen möglichst geringen Temperaturkoeffizienten besitzen, sein konkreter Wert ist durch die Kalibrierung eher nebensächlich. So einen Widerstand habe ich nicht bei Reichelt gefunden.
Ein MCP2550 misst den Widerstand des Pt100 ratiometrisch, ein AVR verarbeitet die Messwerte und schickt sie an das LCD. Der Widerstand wird mit Vierleitertechnik gemessen, sicher ist sicher. Die Platine wurde, wie üblich, einseitig gefräst, wodurch die Drahtbrücken notwendig sind. Ein ISP-Stecker ist zum Programmieren vorhanden, dazu noch Anschlüsse für die Versorgungsspannung und zum Kalibrieren.
Seit Version 1.2 wird außerdem über den Kalibrieranschluss die aktuelle Temperatur seriell mit 9600 Baud ausgegeben.
Messung
Die Umwandlung der Messwerte in eine Temperatur ist relativ umständlich: Meist findet man nur die Polynome, um Temperaturen auf die Pt100-Widerstandswerte abzubilden. Also nähert man die Umkehrfunktion mit einem Polynom 4. Ordnung an, was relativ gut geht. Diese Polynome (eines für ≤ 0 °C, eines für > 0°C) setzt man dann noch mit Ganzzahlrechnung in 32 Bit um. Der Code ist dementsprechend hässlich, um den Wertebereich auszuschöpfen, und wurde vollständig von Hand geschrieben. Im Gegensatz zur Gleitkommaversion haben wir im Bereich von -100 bis 100 °C einen zusätzlichen Fehler von -0,03°C bis +0,005°C. Bis 600 °C steigt der Fehler dann auf -0,06°C bis +0,014°C an. Die letzte Stelle sollte man also mit Vorsicht betrachten.
Dennoch ist das Thermometer so empfindlich, dass sich der angezeigte Wert allein dadurch erhöht, dass ich mich in ca. 50 cm Entfernung vor den Sensor stelle. Deswegen stecke ich den Sensor einfach in die Lötzinnrolle und kann am Tisch sitzen und an der Schaltung arbeiten, ohne dass die Temperatur sich dauernd ändert.
Kalibrierung
Damit das Thermometer nun halbwegs akkurate Werte anzeigt, muss es kalibriert werden. Dazu genügt es, den Wert des eingesetzten Referenzwiderstands zu bestimmen, da ratiometrisch gemessen wird. Eine Kalibrierung des Pt100-Elements an sich ist nicht vorgesehen. Die Schaltung besitzt nur einen Jumper, mit dem man in den Kalibrierungsmodus wechselt.
Die Temperatur, bei welcher die Kalibrierung erfolgt, ist auf 0°C festgesetzt. Somit hat das Pt100-Element angenommene 100 Ohm, auf den Punkt genau. Der tatsächliche gemessene Wert wird benutzt, um die Größe des Referenzwiderstands zu bestimmen, sodass schlussendlich 0°C als Temperatur unter diesen Bedingungen angezeigt wird. Ist man mit dem berechneten und angezeigten Wert des Referenzwiderstands zufrieden, entfernt man den Kalibrierungsjumper, der berechnete Referenzwiderstandswert wird in das EEPROM geschrieben und man landet in der normalen Temperaturanzeige.
Nur wie bekommt man die 0°C hin? Gar nicht. Als Besitzer eines hochauflösenden Multimeters habe ich einfach einen Zehngangtrimmer mit 200 Ohm genommen und damit auf 100,05 Ohm getrimmt – besser ging es mit meiner Feinmotorik nicht. Statt des Sensors den Trimmer angelötet, kalibriert, wieder den Sensor angelötet, fertig.
Das Herz
Dem geneigten Leser wird das Herz aufgefallen sein, das unten rechts angezeigt wird. Es handelt sich hierbei nicht um eine Liebesbekundung, sondern um eine Hommage an alte HP-Apollo-Workstations. Diese hatten eine LED mit Herzsymbol darunter oder später auch ein Herz im Info-LCD, das pulsierte: Bup, bup, …, bup, bup¸…, usf.
So konnte man sich sicher sein, dass zumindest einige Teile des Rechners noch funktionieren. :-) Genauso verhält es sich hier: Das Herz pulsiert und man ist sich sicher, dass die aktuelle Temperatur erfasst und angezeigt wird.
Nebenbei habe ich so anfangs die LCD-Bibliothek getestet, ob benutzerdefinierte Symbole funktionieren.
Dateien
Neu (2019): Die Temperatur wird via Software-UART am Kalibrier-Pin (A7) ausgegeben. Man kann das Thermometer also auch via USB, ohne den Spannungsregler, mit 5V versorgen und hat dann ein USB-Termometer.
Die Eagle-Dateien und die Software ist hier verfügbar (BSD-lizensiert):
Dateien |
---|
minipt100-r20191112.tar.bz2 |