Start AVR-KursStartseitenicht verfügbar

25. Thermostat zum Kühlen und Heizen

Ein kleines Wochenendprojekt oder
wenn der Kühlschrank plötzlich den Geist aufgibt

Wichtiger Hinweis:

An der Schaltung liegt eine Spannung von 230V! Bei unsachgemäßem Hantieren damit besteht Lebensgefahr. Der Autor lehnt jegliche Haftungsansprüche, die aus welchgearteter Verwendung von Schaltung und Programm entstehen, ausdrücklich ab. Setzen Sie diese Anleitung also nur dann um, wenn Sie genau wissen was Sie tun!


Wir brauchen
Der Schaltplan
Layout und Bestückung
Das Assemblerprogramm
Etwas Mathematik


Fragt mich ein Kollege kürzlich, was man denn tun kann, wenn einem das Thermostat vom noch recht neuen Kühlgerät verreckt. Auskunft vom Siemenstechniker war: "Ach das Ersatzteil ist so teuer, da kaufen Sie am besten gleich einen neuen (Gefrierschrank), da kommen sie günstiger weg.

Definitiv war es wohl der NTC-Widerstand vom Kühlraum, der Probleme machte. Da gibt es zwei Möglichkeiten, das Reparaturkit für knapp 200 Euronen kaufen oder ... mal sehen.

Wir brauchen:

Gesamtpreis der Teile gut unter 10 Euronen. Wir stellen fest, Preis-Leistungsverhältnis 20 : 1 - das Angebot nehmen wir doch glatt zusammen mit der Herausforderung eine Schaltung und ein Programm für den ATTiny13 zu entwickeln an.

Ans Werk, flugs einen Schaltplan gezimmert. Der Tiny ist mit den Vorgaben bei weitem nicht ausgelastet, daher müssen wir mit den Anforderungen an die Schaltung auch nicht sparsam sein. Da integrieren wir doch mittles Jumper die Option eine Heizung oder wahlweise eine Kühlung mit dem Ding zu steuern. Über ein Trimmpoti realisieren wir eine Einstellmöglichkeit der Schaltschwelle zur Laufzeit. Wenn der serielle Programmer Port (SPI) während der Laufzeit nicht benötigt wird, könnten wir der Schaltung per weiterem Jumper auch noch eine variable Hysterese verpassen. In der Basisversion lasse ich das aber erst mal weg.

Der Schaltplan

Der Schaltplan offenbart keine großen Schaltungstricks. Der Sensor von 10k ist mit einem Serienwiderstand von 10K zwischen die Betriebsspannung von 5V geschaltet. Bei 20 °C Raumtemperatur ergibt sich eine Spannung von ca. 2,5V am Eingangspin 2 des Tiny13 (=PB3/ADC3). Je nach Einsatzzweck wird der Wert des Vorwiderstands variiert. bei kühleren Werten steigt der Widerstand des NTC und ein höherer Wert des Vorschaltwiderstands wird dann sinnvoll. Es wäre gut, wenn die Schaltschwelle etwa bei 2,5 V eingestellt wird. Es ist dazu sinnvoll, das Datenblatt des verwendeten NTCs zu Rate zu ziehen. NTC-Widerstände haben eine in etwa exponentielle R-T-Kennlinie, die gegen höhere Temperaturen abfällt und immer flacher wird. Das bedeutet, dass die Genauigkeit der Schalttemperatur mit steigender Temperatur der Messumgebung abnimmt. Keinesfalls ist die Temperaturkennlinie eines NTCs als linear zu betrachten, wenn es um mehr als 10°C Temperaturdifferenz geht. Das ist für die Softwareentwicklung von elektronischen Thermometern wichtig - aber so weit wollen wir hier ja gar nicht gehen.

Das Trimmpoti von 20k liefert die Vergleichsspannung für den NTC und gibt damit die Schaltschwelle vor. Der Jumper an PB1 (Pin 6) benötigt keinen extra Widerstand, weil wir im Programm den im Tiny13 integrierten Pullup-Widerstand benutzen. Der Elko puffert Schankungen auf dem Versorgungsnetz. Die zugeführte (gesiebte) Gleichspannung kann zwischen 8V und 35V liegen und wird durch den 78L05 auf die erforderlichen 5V herabgesetzt. Die Schwingneigung der 78-er-Reihe wird durch zwei 0µ1 Kondensatoren zwischen Masse und Ein- bzw. Ausgang abgepuffert. Die Belastungsgrenze des Reglers wird durch die verwendeten Bauteile, insbesondere das Relais (5V/40mA) bei weitem nicht ausgereizt und liegt bei ca 50-60mA. Angesteuert wird das Relais durch einen NPN-Transistor BC548, der vom Port PB2 an Pin7 über einen 2k2-Widerstand angesteuert wird.

Bei Bedarf bekommt die Platine zwei lötbare Lüsterklemmen für die Spannungsversorgung und die Relaiskontakte und einen 6-poligen Port zur Programmierung des ATTiny13 spendiert. Das SPI ist, wie bei mir üblich, eine 6-polige Reihe von gedrehten IC-Sockeln.

 

Layout und Bestückung

Die Bestückung der 56x32mm großen Platine ist nicht schwer, lediglich die paar SMD-Bausteine müssen mit der Pinzette beim Einlöten gehalten werden und es sind die ersten Bausteine, die appliziert werden. Dann kommen die flacheren Teile auf der Bestückungsseite und zum Schluss folgt das klobige Relais.

Das Lyout, hier im Maßstab 3:1, ist als PDF-Datei direkt für den Laserausdruck zum Herstellen einer Bügelvorlage gedacht. Auf Transparentpapier ausgedruckt, kann man ebenfalls Druckschicht auf Lackschicht legen.

 

Das Assemblerprogramm

Mit ca. 140 Befehlsworten von 1024 liegt die Auslastung des ATTiny13 sehr niedrig. Es werden faktisch auch keine RAM-Speicherstellen und EEPROM-Zellen verwendet auch wenn im Programm zwei RAM-Bytes angefordert werden. Die Kommentare im Programm sind so detailliert, dass ich mir hier eine genauere Beschreibung spare.

Etwas gewöhnungsbedürftig ist das Verhalten der Schaltung auf Temperaturänderungen, weil einer steigenden Temperatur ein abfallender Widerstand und hier eine abfallende Spannung entspricht. Diesen Sachverhalt habe ich fatalerweise erst nach dem Erstellen des Layouts realisiert. Allerdings erachtete ich das von der Bedeutung für so gering, dass ich das Layout deswegen nicht mehr geändert habe.

Wenn die Temperatur steigt, sinkt der Wert des NTC-Widerstands. Weil der sich nun aber im unteren Teil des Spannungsteilers, also gegen Masse, befindet, zieht der kleiner werdende Wert des NTC den Spannungspegel gegen Masse, die Spannung am Pin PB3 des ATTiny13. Mit Hilfe der Programmlogik ist das aber gut zu lösen - ein wenig umdenken ist halt erforderlich. Der NTC-Spannungswert -nur um diesen handelt es sich hier- ist niedriger, wenn der Widerstand kleiner ist und das bedeutet, dass die Temperatur über dem Wert liegt, der mit dem Poti eingestellt wurde. Bei der Kühlung heißt das, Kompressor anwerfen, bei der Heizung bedeutet es ausschalten. Bei der Kühlung wird die Hystereseschwelle zur Vorgabe addiert, bei der Heizung subtrahiert. Sieht man keine Hysterese vor, dann flattert das Relais, weil der Sollwert und umgekehrt auch der Istwert jeweils schnell erreicht werden und ein erneutes Umschalten provozieren. Andererseits bringt ein zu hoher Hysteresewert starke Temperaturschwankungen, weil allzusehr überheizt oder unterkühlt wird. Die Hysterese ist also dem Anwendungszweck entsprechend einzustellen. Angedacht ist die Abtastung eines weiteren Potis vor der Hauptschleife, welches dann den Hysteresewert einstellt.

In diesem Fall muss man an der Schaltung eine kleine Veränderung vornehmen und das Relais statt an PB2 (pin7) an PB1 (pin6) anschließen, damit der ADC1 an PB2 frei wird. Eine weitere Folge ist das Verschieben des Jumper-Eingangs von PB1 (pin6) auf PB0 (pin5). Natürlich muss dann auch das Layout angepasst werden. Das geänderte Layout ist unten abgebildet, ebenso der neue Bestückungsplan. Im Zuge der Änderung wurde ferner der Abstand zwischen Niederspannungs- und Netzspannungsbereich vergrößert, was einer verbesserten Betriebssicherheit zu gute kommt.

Die erweiterte Platine ist etwas breiter, 65x31mm.

Die Version 0.1 des Programms und das zugehörige HEX-File kann man herunterladen. Beide stehen ebenso wie das Layout unter meinem Copyright, dürfen aber unter der Maßgabe von GPL und CC frei genutzt und weitergegeben werden, sofern Copyrightvermerke nicht verändert werden.

Ein bisschen Mathematik

NTC-Widerstände haben eine exponentiell abfallende Kennlinie, wenigstens so ungefähr. Ein Messversuch brachte dann auch die Bestätigung. Dazu wurde ein NTC mit einem Schrumpfschlauch gegen eindringende Feuchtigkeit umhüllt und zusammen mit dem Fühler eines elektrischen Thermometers zunächst in ein Wasserbad gesteckt, welches bis 65°C erhitzt wurde. Für die negativen Temperaturen habe ich eine 0,5-Liter Petflasche mit Wasser befüllt (natürlich nicht ganz) und in die Tiefkühltruhe gelegt. In das Eis wurde dann ein Loch von 8mm gebohrt, in dem Thermometer und NTC versenkt wurden. Dann noch einmal ab in die Gefriertruhe.

Bei -20°C hatte der NTC knapp 100kOhm. Nach dem Herausnehmen der Flasche stieg die Temperatur trotz verstopfter Öffnung im Bohrloch doch verhältnismäßig rasch in ca. 25 Minuten auf 0°C. Eis ist also doch ein ganz passabler Wärmeleiter. Die ersten beiden Spalten der folgenden Tabelle (Download EXCEL-Tabelle) waren das Ergebnis der Messungen.

 

Hieraus ist als erstes schon mal ersichtlich, dass der aufgedruckte Widerstandswert (103 = 10kOhm) für 25 °C gilt. Die grafische Darstellung in EXCEL brachte anhand der Trendlinie schnell die Gewissheit, dass das mit der Exponentialfunktion wohl doch nicht ganz stimmen kann. Die gemessenen Werte sind blau dargestellt und liegen im positiven Temperaturbereich deutlich unter der Trendlinie, diese wiederum bleibt aber im negativen Bereich gewaltig hinter den Messwerten zurück.

Zum Vergleich setzte ich nun eine eigene Trendlinie in Form der pinken Punkte ein. Sie ergeben sich aus dem bei 0°C gemessenen Widerstand von Ro = 33,2 kOhm und einem vorgegebenen Temperaturkoeffizienten k in der Grundformel (siehe dritte Spalte der Tabelle). Den Faktor k habe ich aus den willkürlich gewählten Wertepaaren zu -10°C und -20°C berechnet.

Nach Ro aufgelöst:

Werte eingesetzt:

gleichsetzen und umformen:

Zur Kontrolle wurde auch noch der Widerstand bei 0 °C berechnet:

 

Gemessen wurden 33,2 kOhm also noch im grünen Bereich. Da meine berechneten Werte im negativen Temperaturbereich recht gut zu den gemessenen passten, kam ich auf die Idee, einmal nur diesen Bereich im Diagramm darzustellen. Siehe da, jetzt passt auch die Trendlinie und die von EXCEL berechnete Gleichung der Kurve. Auch der Temperaturkoeffizient liegt nahe bei meinen berechneten 0,0563.

 

Bei positiven Temperaturen versagt die Trendlinie von EXCEL wieder weitgehend, nähert man sich den 0 °C an. Für die Berechnung einer Temperatur aus dem Widerstandswert bedeutet das, dass man mindestens mit zwei k-Werten rechnen muss getrennt nach negativen und positiven Temperaturen. Die pinken Punkte wurden in diesem Fall mit k = 0,0438 berechnet.

Aber halt! Der ATTiny 13 misst ja nicht die Widerstandwerte, sondern die Spannung am Abgriff zwischen dem 10k Festwiderstand und dem NTC.

Das sieht nicht schlecht aus. Wenn man sich jetzt noch auf den Bereich zwischen -10°C und 50°C beschränkt, dann sieht das nahezu linear aus.

Zwischen 0°C und 50°C fällt die Gerade um 2,50V. Das ergibt eine Steigung von -0,050V pro Grad Celsius. Mit dieser Formel kann auch ein Tiny13 umgehen und statt einem reinen Schaltbetrieb sogar die Temperatur erfassen. Für eine Anzeige freilich sind dann schon ein paar Pins mehr erforderlich. Entweder man entscheidet sich für den 8-Beiner ATTiny25 mit I2C-Interface oder den größeren ATTiny24 mit 14 Beinen, der auch über ein I2C-Interface verfügt aber auch ein LCD direkt steuern kann.

Beim Variieren des Serienwiderstandwerts habe ich außerdem die recht interessante Tatsache entdeckt, dass bei 10kOhm der Mittelteil der Kurve ziemlich linear ist, bei um die 5kOhm, der Teil bei höheren Temperaturen und bei z.B. 68kOhm der Bereich bis 0°C (siehe dazu folgendes Diagramm)..

Hierfür gilt natürlich eine andere Gleichung wie die oben genannte.

 


Hier noch einmal alle Downloadangebote zum Projekt in der Übersicht.

Layouts als PDF, Assembler-Quellprogramm, HEX-File, EXCEL-Tabelle

Start AVR-KursAn den Seitenbeginnnicht verfügbar