Ich habe eine eigentlich ganz tolle Kühl-/Gefrierkombination von Hanseat. Leider hat sie seit letztem Sommer das Problem, dass sie partout immer auf -30 Grad kühlen wollte, völlig unabhängig von der Temperatureinstellung.
Erster Anlauf, das zu ändern war eine elektonische Regelung mit KTYxx und 'nem OpAmp. Die Lösung funktionierte auch ganz gut, abgesehen von kleinen Schönheitsfehlern (Einschalten bei Netzstörungen, kein Kompressorschutz). Bis vorgestern. Jetzt kült auch die Elektronik immer bis -30°C. SCH... Analogtechnik.
Jetzt kommt ein
ins Spiel: Ein TMP04 von Analog Devices, zwei 65LBS174 als digitale differntial Line Driver/Receiver und einem PIC 16F628 als Microcontroller + LEDs und Relais. Aufgrund der differentiellen Übertragung des Temperatursignals kann die Auswertung einige Entfernung zum Sensor haben.
So, nach längerer Pause geht es jetzt weiter: Habe mittlerweile wegen eines neuen PCs auf den Brenner 8 von Sprut gewechselt. Cooles Teil.
Projektstatus:
Status: Fertiggestellt (Betrieb seit April 2007 - im Januar 2018 habe ich den immer noch funktionierende Kühlschrank gegen einen größeren getauscht)
Letzte Änderung (Webseite): 03.02.2018 (Kühlschrank an Studenten weitergegeben)
Letzte Änderung (Hardware): 04.04.2007 (Stückliste fertiggestellt)
Letzte Änderung (Software): 06.04.2007 (Software V1.4)
Prototyp von DTEMP auf unserer Kühl-Gefrierkombi
Features:
- Überwachung von zwei verschiedenen Temperaturen: Gefrierfach (-17/-22 Grad) und Kühlfach (+8/+6 Grad)
- Frostschutz für das Kuehlfach (bei unterschreiten von +3 Grad wird der Kompressor abgeschaltet)
- Eine Kompressorschutz-Totzeit (d.h. nach dem Ausschalten erst nach Totzeit von 10 Minuten wieder einschalten)
Hintergrund: Der Kompressor schafft den Anlauf nicht, wenn er gerade erst gelaufen ist - der Gegendruck ist zu hoch - 2x8 LCD-Display für Temperatur- und Statusanzeige
- Maximal-Laufzeit von 50 Minuten ohne Pause für den Kompressor
- Plausibilitaetskontrolle der Sensorwerte
- geplant: Failsafe-Betrieb bei Sensorfehlern (d.h. alle 15 Minuten für 15 Minuten einschalten)
Der DTemp Gesamtschaltplan (Klicken für Großbild)
Die Schaltung
Meine standard PIC-Grundbeschaltung: Spannungsregler TLE4270 mit RESET-Ausgang für den PIC, das 2x8-LCD-Display wird im 4-Bit Modus angeschlossen. Die Hintergrundbeleuchtung für das LCD habe ich nicht benutzt (schluckt immerhin 50mA), damit der Trafo klein bleiben kann, denn in dem vorhandenen Kühlschrank ist nicht so viel Platz für die Elektronik. Die beiden TMP04 werden über differentielle Transceiver SN65176 angeschlossen, was Störeinstrahlung auf die Leitungen eliminieren sollte (wichtig: die SN75176er-Typen sind nur bis 0 Grad spezifiziert!).
Die Gegeninduktionsspannung des Relais wird zum Erhalt der maximalen Kontaktlebensdauer über eine 12V-Zenerdiode kurzgeschlossen, ein paar Paper zum Thema Relaisbeschaltung gibt es in der Linkliste. Ein Funkenlöschkondensator + Widerstand über die Relaiskontakte löscht den Schaltfunken- die Kontakte und das auf dem Kühlschrank stehende Radio werden es danken....
Aufgebaut habe ich die komplette Schaltung auf Lochrasterplatine (siehe Elektronik - Basteltips ) .
Stückliste IC 1 PIC16F628 Microcontroller IC 2 TLE4270 Spannungsregler IC 7,8 TMP04 von Analog Devices IC 3-6 differential line driver SN65176 (Temperaturbereich bis -20 Grad) LCD 2x8 LCD-Display HD44780-kompatibel, LED-Beleuchtung z.B. LCD 082 DIP von (Reichelt) C1 Elko 470uF 35V C2 Folie 100nF 275V X2 (Entstörkondensator) C3,4,7,8 Kerko 100nF C5 Kerko 10nF C6 Elko 100µF 16V R1 47R R2 10k R3 Trimmer 1k T1 BC546 D1 1N4148 ZD 1 ZPD12 Rel1 Relais 12V 1xEin 230V (Z.B. Finder) GL1 Gleichrichter B40C80 Tr1 12V, 1.2VA (im Schaltplan steht 9V, richtig sind aber 12V!)
Die Software
Quellcode, Make-Batch für cc5x, mplab und fertiges HEX-File Version 1.4
Auswertung der TMP04-Signale
Der TMP04 verpackt die gemessene Temperatur in das Low/High-Timing seines Ausgangssignals. Die High-Time dient quasi als Referenz, in der Low-Time steckt die Temperaturinformation. Misst man beide, kann man über Quotientenbildung Schwankungen in der Takfrequenz des PIC wie auch des TMP04 rausrechnen. Wenn man diese PWM mit einigermassen Auflösung abtasten und verrechnen will, benötigt man eine schnelle Schleife zum Ausstoppen der Signale (rd. 94kHz Count-Frequenz), eine 16x16Bit Multiplikation und eine 24/16Bit Division:
( t_high * 400) Temperatur = 235 - ---------------- (Berechnungsvorschrift zum TMP04) t_low
Allein aus obiger Formel erkennt man, dass 8Bit-Arithmetik nicht reicht, außerdem will man ja auch mehr als 1 Grad auflösen - ich habe mich für 0.2Grad entschieden, sprich alle Werte sind noch 5x größer. Diese Rechnungen lassen sich so ohne weiteres mit der Free-Edition des CC5X-Compliers nicht machen, der ist auf 16Bit-Variablen beschänkt. Zum Glück gibt es zum Thema Multiplikation und Division aber jede Menge Assembler-Lösungen, die man per inline-Assembler in den C-Quelltext einbauen kann. Gleiches gilt für schnelle integer zu BCD/ASCII-Routinen.
Außerdem steht die fehlende Optimierung der Memorybank-Umschaltung bei der Free-Edition einer schnellen Schleife im Weg - zumindest, wenn man nich in die Tiefen der pragma-Anweisungen abtauchen will... Außerdem wichtig: bei nicht angeschlossenen oder defekten Sensoren nicht in einer Deadloop hängen bleiben, sondern über einen erkannten Timeout in einen Failsafe-Betrieb übergehen.
Der Regler
Der Regler besteht aus zwei verknüpften Zweipunkt-Reglern:
Regeln für Kompressor ein:
-mindestens eine Temperatur über der Max-Temperatur
Regeln für Kompressor aus:
-beide Temperaturen unter der Min-Temperatur
-Kühlfachtemperatur unter der Frostgrenze
Das Display und Zusammenbau
Die Anzeige vom eingebauten DTEMP
1.Zeile: Kühlfach Temperatur und -status: E=Sensorfehler K=Kompressor an
2.Zeile: Gefrierfach-Temperatur und -status: E=Sensorfehler zehnsekunden-zeichenwechsel=Alive-Anzeige
DTemp eingebaut, ohne Blende
Die Steuerelektronik rund um den PIC mitsamt des Displays und des Spannungsreglers passt locker auf eine kleine Lochraster-Leiterplatte, die man direkt hinter die Bedienfeldleiste montieren kann. Bei dem Hanseat ist da sogar ein weisser Montagerahmen, der die Elektronik aufnehmen kann.
PIC und Display sitzen auf unterschiedlichen Seiten der Leiterplatte, so dass die Fläche optimal genutzt ist, die differentiellen Treiber als SMDs sitzen direkt auf den (halbierten) Lötaugen.
Die Spannungsversorgung, Relais und Schalttransistor
Alles rund um das Thema 230V habe ich auf einer separaten Leiterplatte untergebracht, um den Einfluss von Störungen durch das Schalten des Motors so gering wie möglich zu halten.
Links zu weiteren Informationen:
- Das Datenblatt zum TMP04 von Analog Devices
- Gute Anleitungsseite von Michael Dworkin (ehemals cc5x.de) zum Compiler CC5x von BKND.
- Noch eine Anleitung zum Umgehen der 1k-Grenze von CC5X: Stefan Buchgeher
- Mein PIC-Programmer: PBrenner 8 von sprut. Auch die erweiterten Assembler-Befehle aus der PIClist-Quelle sind hier erläutert.
- 16x16 Multiply von Scott Dattalo bei PicList
- Und die 24/16 Bit Division von Nikolai Golovchenko, ebenfalls aus dem PIClist-Angebot.
- Und last but not least: binaer nach ASCII ebenfalls von Nikolai Golovchenko bei PIClist.
- Hier gibt es noch ein etwas ähnliches Projekt mit PIC und digitalen Sensoren, allerdings von Dallas : Holgis Präzisons-Thermometer
- Relais schnell schalten, Relaisbeschaltung, Freilaufdiode: Elesta Relais Whitepaper und Tyco: Coil Suppression