Junkers Therme Stetigregelung: Unterschied zwischen den Versionen
Zeile 83: | Zeile 83: | ||
</ul> | </ul> | ||
==Ethersex-Bauen== | =Ethersex= | ||
Als Buildumgebung kann freetz-linux 1.1.1 verwendet werden. freetz-linux läuft sehr gut als Virtuelle Maschine in Virtual Box (unter Windows). Der AVR-ISP-Programmer lässt sich in die VM durchreichen. Eine Programmierung des ATMega kann so aus der VM erfolgen. Bei einem Test mit einer neueren freetz-linux Version schlug der Build-Vorgang fehl. In der Datei pinning/hardware/netio.m4 sind die PIN-Zuordnungen. Mittels „make menuconfig“ kann alles Mögliche eingestellt werden und mittels „make“ wird Ethersex für das AVR-NET-IO-Board erstellt. | |||
Die Firmware der AVR-NET-IO-Boards wird durch eine erweiterte Firmware ausgetauscht. | |||
Der Vorgang ist hier beschrieben: [[AVR-NET-IO#Konfiguration_und_Flashen_von_ethersex]] | |||
===Ethersex-Bauen=== | |||
Als Buildumgebung kann freetz-linux 1.1.1 verwendet werden. freetz-linux läuft sehr gut als Virtuelle Maschine in Virtual Box (unter Windows). Der AVR-ISP-Programmer lässt sich in die VM durchreichen. Eine Programmierung des ATMega kann so aus der VM erfolgen. Bei einem Test mit einer neueren freetz-linux Version schlug der Build-Vorgang fehl. In der Datei pinning/hardware/netio.m4 sind die PIN-Zuordnungen. Mittels „make menuconfig“ kann alles Mögliche eingestellt werden und mittels „make“ wird Ethersex für das AVR-NET-IO-Board erstellt. | |||
==Ethersex-Flashen== | ==Ethersex-Flashen== |
Version vom 5. Juli 2013, 11:04 Uhr
Ansteuerung einer Junkerstherme mit einer Steuerspannung von 3-22V (0-32V möglich)
Viele Heizungsthermen haben eine Regelung über einen Kontakt an dem eine feste Spannung anliegt oder eben nicht anliegt. Also als Beispiel: 0V Heizung auf 12V Heizung an, es gibt keine weiteren Zwischenstufen. Für diese Thermen ist diese Anleitung unzweckmäßig. Bei einigen Junkersthermen ist dies jedoch anders 3V => 0% bis 22V => 100%. Es sind beliebige Zwischenwerte möglich. Ob man eine solche Heizung hat, kann man einfach feststellen in dem man die Steuerspannung bei angeschlossenem Regler misst. Junkers nennt diese Regler auch Raumtemperaturregler mit Stetigausgang. Beobachtung (kein Wissen): Über diese Steuerspannung wird der Brenner in Abhängigkeit der Rücklauf gesteuert. Umso niedriger die Steuerspannung desto später (tiefere Rücklauftemperatur) beginnt die Therme zu heißen. Bei der vorhandenen Junkertherme kann die Vorlauftemperatur nicht über die Steuerspannung eingestellt werden.
Ziel dieses Projektes
- Keine Veränderung der Therme (Sicherheits-, Versicherungs- ,Garantie-Gründe)
- Sicher: Für den Fall eines Defekts der automatischen Steuerung soll der alte Regler soll erhalten
- Erzeugen einer Spannung von 3-22Volt (Simulation des bisherigen Raumtemperaturreglers)
- Messung der Vorlauf und Rücklauftemperatur
- Günstig
- Geringe Energieaufnahme
- Ansteuerung mittels Netzwerk
- Integration in FHEM
Umsetzung
- Pollin AVR-NET-IO-Board
- Software: Ethersex
- kleine Zusatzplatine für die Spannungserzeugung (wird einfach parallel zu dem bestehenden Regler angeschlossen)
- Messung der Vorlauf und Rücklauftemperatur mittels OneWire
Vorbereitung 1
Da die Heizungsregelung eine sehr sensible Sache ist besonders bezüglich Frostschäden (beim Ausfall der automatischen Steuerung) und persönlicher Befindlichkeiten musste eine einfache und extrem ausfallsichere Kontrolleinheit her. Hierfür wird einfaches Drehspulmessinstrument verwendet. Anzeigewerte: 0V=Fehler, 3V=Heizung aus, 22V=Therme 100%. Der alte Raumtemperaturregler ist weiterhin aktiv, momentan ist er auf 12°C Solltemperatur gestellt. Das bedeutet:
- Wenn die automatische Reglung ausfällt, aktiviert der alte Raumtemperaturregler die Heizung bevor Frostschäden entstehen können.
- Wenn die automatische Reglung ausfällt, kann die Therme einfach durch einstellen einer neuen Solltemperatur aktiviert werden.
Beide Fälle sind auf Grund von Ausfällen eines anderen FHEM-Systems im ersten Winter aufgetreten.
Vorbereitung 2
Die Leitung zu dem bisherigen Regler muss gesplittet werden. Hierfür die Heizung ausschalten (Sicherung auslösen) die Leitung auftrennen und einen Abzweig für die neue Regelung einfügen. Das Ganze kann mit einer Schmelzsicherung (für die 24V VCC Leitung) und einem 3poligem-Schalter (vollständiges Wegschalten der automatischen Regelung) versehen werden.
Vorbereitung 3
Netzwerk zu der Therme oder das Steuersignal zum Netzwerk ziehen. Das AVR-NET-IO-Board kann irgendwo in die Steuersignal-Leitung eingesetzt werden. Theoretisch kann auch die 24V Spannungsversorgung für den ursprünglichen Raumtemperaturregler verwendet werden. Hier muss einfach ein DC/DC-Wandler eingesetzt werden. (Bitte Leistungsabgabe der Heizung und Leistungsaufnahme des AVR-NET-IO-Board überprüfen)
Digital-to-Analog-Converter
Die Schaltung besteht aus einem DAC (LTC1257) und einem Operationsverstärker (LM358). Der LTC1257 wandelt (bei interner Referenzspannung) einen digital übermittelten Wert (über die Eingänge CLK, DIN und LOAD) in eine Spannung von 0-2,048V. Diese Spannung wird anschließend von dem LM358 erhöht. Die Elemente R1,R2, C1 und C2 gehören zur Grundbeschaltung des LTC1257. Mittels der Widerstände R3 und R4 wird der Verstärkungsfaktor der Operationsverstärkerschaltung eingestellt. Der OP ist als nicht invertierender Verstärker ausgeführt. Mit zwei Widerständen könnte aus dem LM358 eine doppelte invertierende Verstärkerschaltung (in Reihe geschaltete) aufgebaut werden. Das würde die Genauigkeit erhöhen. Die Schaltung funktioniert jedoch einwandfrei und eine höhere Genauigkeit wird vermutlich nur selten einen Vorteil bieten. In diesem Fall ist hat VCC_Therme eine Spannung von 24V. Der LM358 kann bis 32V arbeiten, dann muss jedoch der Widerstandswert von R4 erhöht werden. An dem Steuersignal_Therme liegt je nach dem welchen Wert der LTC1257 gerade in einen anlogen Wert umsetzt eine Spannung von 0-24V. Diese Schaltung kann eingesetzt werden um Junkers-Thermen mit „Stetigeingang“ anzusteuern.
Variant 2: Die Ausgangsspannung der Schaltung kann zwischen dem Widerstand R3 und R4 von einem ADC gemessen werden. Da an R4 über 90% der Spannung abfällt, kann die Messung problemlos mittels eines 5V ADCs erfolgen.
In der Varianten 3 ist eine Sicherheitsfunktion eingebaut, welche durchaus sinnvoll ist. Die Diode D1 verhindert, dass diese Schaltung die Spannung unter einem Wert des alten externen Reglers zieht. Diese Schaltung ist so dimensioniert, dass bei Verwendung eines Junkers TRQ 21 Raumtemperaturreglers, die Therme von dieser Ansteuerung oder von dem TRQ 21 eingeschaltet werden kann. Wenn die Diode entfällt, kann diese Steuerung die Spannung von 0V ziehen und die Therme ausschalten. Im Fehlerfall und starkem Frost kann das unschön sein. Da an der Diode eine Spannung abfällt ist die Messung von Messpunkt 1 immer um diesen Wert geringer als an Messpunkt 2. Das ist aber kein Problem.
Prototyp der Schaltung
Der Aufbau des Prototypen erfolgte auf einer Punkt-Streifenrasterplatine (Immer drei Punkte einer Reihe sind miteinander verbunden (s. blaue Markierungen)). Um die Schaltung nachzubauen sind keine besonderen Lötkenntnisse erforderlich. Da nur wenige Brücken eingelötet werden müssen, lohnt sich eine fertige Platine nicht. Die Widerstände R4 und R6 sind jeweils als zwei Widerstände ausgeführt.
Pinzuordnung
Die Verbindung zu dem AVR-NET-IO-Board erfolgt über die Pins der SUB-D Anschlussplatine (Kx):
- CLK -> K12 -> PA2
- DIN -> K11 -> PA1
- LOAD -> K9 -> PC7
- Messpunkt1 -> K10 -> PA0
- Messpunkt2 -> K13 -> PA3
- Onewire -> KK3 -> PC1
Ethersex
Die Firmware der AVR-NET-IO-Boards wird durch eine erweiterte Firmware ausgetauscht.
Der Vorgang ist hier beschrieben: AVR-NET-IO#Konfiguration_und_Flashen_von_ethersex
Ethersex-Bauen
Als Buildumgebung kann freetz-linux 1.1.1 verwendet werden. freetz-linux läuft sehr gut als Virtuelle Maschine in Virtual Box (unter Windows). Der AVR-ISP-Programmer lässt sich in die VM durchreichen. Eine Programmierung des ATMega kann so aus der VM erfolgen. Bei einem Test mit einer neueren freetz-linux Version schlug der Build-Vorgang fehl. In der Datei pinning/hardware/netio.m4 sind die PIN-Zuordnungen. Mittels „make menuconfig“ kann alles Mögliche eingestellt werden und mittels „make“ wird Ethersex für das AVR-NET-IO-Board erstellt.
Ethersex-Flashen
Die Datei ethersex.hex aus dem tar Archive auf den Atmega 644 flashen. Hierfür eignet sich der AVRISP aus Hongkong von eBay (unter 4€ incl. Porto).
Teileliste
Preise sind grob gerundet
- eBay
- AVRISP-Programmer um Ethersex auf den AVR zu flashen 4€ (wenn nicht schon vorhanden)
- Pollin
- AVR-NET-IO - Fertigmodul 28€ (als Bausatz 8€ günstiger)
- ATmega644-20PU 7€ (optional)
- 2x Temperatur-Sensor DS18S20 5€
- 5V-Netzteil EcoFriendly 5€ (ein einfaches USB-Ladegerät reicht)
- Bausatz SUB-D Anschlussplatine 4€
- Versandkosten 5€
- Reichelt
- LTC 1257 CN8 7€
- Platine+Kleinteile < 10€
- Versandkosten 6€
Zusammen ca. 55-85€
Erste Inbetriebnahme
-
Versuchen das AVR-NET-IO-Board per Ping zu erreichen.
(Die Datei aus dem tar-Archive sollte in dem Netz 192.168.178.0/24 sein) - Versuchen auf die Konsole des AVR-NET-IO-Board zuzugreifen Port: 2701 (Mit Putty, TerraTerm, netcat, ...)
-
Verfügbare Befehle ansehen:
Befehl: help -
OneWire Geräte auf Konsole scannen: 1w list
Es sollten zwei Geräte (Vorlauftemperatur, Rücklauftemperatur) gefunden werden.
Befehl: 1w list
Ausgabe: 1069ad4d020800d8
Ausgabe: 10884e5b0208002d
Ausgabe: OK
-
Temperatur einlesen:
Befehl: 1w get 1069ad4d020800d8
Ausgabe: 26.4
-
Steuersignal der Heizung abfragen
Befehl: adc get 0
Ausgabe: 04D
Befehl: adc get 3
Ausgabe: 04F
-
Steuersignal auf Maximum stellen
Befehl: ltc1257_set 2000
Ausgabe: OK
-
Steuersignal der Heizung erneut abfragen
Befehl: adc get 0
Ausgabe: 0BF
Befehl: adc get 3
Ausgabe: 0C9
Ermittlung der Betriebspunkte
Wichtig sind vier Werte:
- Messwert (ADC) für den Betriebspunkt Therme 0%
- Messwert (ADC) für den Betriebspunkt Therme 100%
- Stellwert (DAC) für den Betriebspunkt Therme 0%
- Stellwert (DAC) für den Betriebspunkt Therme 100%
Ermitteln der Messwerte
Vorbereitung den Operationsverstärker (LM358) aus der Schaltung entfernen. Minimalwert: Messwert wenn der Raumtemperaturregler die Therme ausschaltet. Hierfür den Raumtemperaturregler auf minimale Temperatur einstellen. Die Steuersignalspannung sollte ca. 3V betragen. Mittels „adc get“ den Wert ermitteln und ausschreiben. Maximalwert: Messwert wenn der Raumtemperaturregler die Therme auf 100%. Hierfür den Raumtemperaturregler auf maximale Temperatur einstellen. Die Steuersignalspannung sollte ca. 18-22V betragen. Mittels „adc get“ den Wert ermitteln und ausschreiben.
Ermitteln der Stellwerte
Vorbereitung den Operationsverstärker (LM358) wieder in die Schaltung einsetzen. Und den Raumtemperaturregler auf minimale Raumtemperatur einstellen. Jetzt werden die Stellwerte ermittelt. Der Sollwert des LTC1257 langsam erhöht und der aktuelle Wert mittels des ADC gemessen. Hierfür werden abwechselnd die Befehle: „ltc1257_set SOLLWERT“ und „adc get“ verwendet. Beide Werte auschreiben.
Integration in FHEM
In FHEM muss das Setzen der Sollwerte und die Erfassung der aktuellen Sollwerte/Istwerte integriert werden. Wenn der alt Raumtemperaturregler entfällt kann zweites auch entfallen.
Setzen der Sollwerte
Der LTC1257 bekommt den Sollwert mittels des Befehls ltc1257_set SOLLWERT (0 <= SOLLWERT >= 2048) zugewiesen. Hierfür wird eine classdef Datei erstellt, z.B.:
# Umsetzung in ECMD Befehle # Ein Uebergabeparameter -> Sollwert set setDacValue params dacValue set setDacValue cmd {"ltc1257_set %dacValue"} # Keine Uebergabeparameter set init cmd {"ltc1257_init"}
Danach kann der LTC1257 als ECMD Device in FHEM (fhem.cfg) angelegt werden. Hierfür wird eine möglicherweise bestehende „NETIO classdefs“ erweitert:
attr NETIO_01 classdefs [Andere ECMD Geräte]:LTC1257=/opt/fhem/ltc1257.classdef
Anschließend den DAC(/LTC1257) als ECMDDevice definieren
define MEINDAC ECMDDevice LTC1257 attr MEINDAC room MEINRAUM
Der Befehl zum Setzen eines neuen Spannungswertes lautet:
my $dacValue = 1345;;\ fhem("set MEINDAC setDacValue ".$dacValue);;\
Ermitteln der Istwerte
Der ADC ermittelt den aktuellen Sollwert über einen Spannungsteiler. Dieser Wert wird in einen Prozentwert (0-100) umgerechnet. Hierfür wird eine classdef Datei (adc.classdef)erstellt, z.B.:
# Umsetzung in ECMD Befehle # Ein Uebergabeparameter -> Sollwert set setDacValue params dacValue set setDacValue cmd {"ltc1257_set %dacValue"} set setDacValue postproc {\ Log 3, "Setze Wert";;\ } # Keine Uebergabeparameter set init cmd {"ltc1257_init"}
Danach kann der ADC als ECMD Device in FHEM (fhem.cfg) angelegt werden. Hierfür wird eine möglicherweise bestehende „NETIO classdefs“ erweitert:
attr NETIO_01 classdefs [Andere ECMD Geräte]:LTC1257=/opt/fhem/adc.classdef
Anschließend den ADC als ECMDDevice definieren
define MEINADC ECMDDevice LTC1257 attr MEINADC room MEINRAUM
Kritische Nachbetrachtung
- Anschluss der Zusatzplatine nicht über die SUB-D Anschlussplatine sondern über den 10poligen Pfostenstecker. Das würde viel sauberer/professioneller aussehen und ist bei dem verwendeten Platinentyp sehr einfach zu relaisieren.
- Spannungsversorgung des AVR-NET-IO-Boards über die 24V Spannung der Therme (irgendwie cooler)
- Eventuell ist es auch bei diesen Junkersthermen sinnvoller die Steuerspannung mittels eines Relais/Transistors zwischen 3-22V zu schalten. Unter Verwendung von 2 Relais/Transistoren wären auch 4 Schaltstufen möglich (0%, 25%, 50% und 100%).
- Die Zusatzplatine trennt das AVR-NET-IO-Board/Netzwerk und die Heizung nicht. Wenn keine Messung der Steuersignalspannung gewünscht ist, würde ich den LTC1257 galvanisch trennen. Bislang gab es aber keine Probleme diesbezüglich.