Junkers Therme Stetigregelung

Aus FHEMWiki
Wechseln zu: Navigation, Suche


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 aus – 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

Steuersignal

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:

  1. Wenn die automatische Reglung ausfällt, aktiviert der alte Raumtemperaturregler die Heizung bevor Frostschäden entstehen können.
  2. 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

Steuersignal

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.

Die Beschaltung mit C1 und R1 scheint nicht in jedem Fall angemessen zu sein. Damit kann man sich einen Sägezahn als Referenzspannung einfangen, der im Kilohertzbereich die Referenz- (und damit auch die DAC-Ausgangspannung) von 100 % auf ca. 90 % fährt. Das gibt dann unerwünschte Effekte beim Messen der Spannung für die Stetigregelung. Ohne C1 und R1 ergibt sich eine konstante Referenzspannung.

Variante 1 - keine Messpunkte

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.

Variante 2 - ein Messpunkt

In der Varianten 3 ist eine Sicherheitsfunktion eingebaut, die 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.

Variante 2 - ein Messpunkt

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.

Variante 2 - ein Messpunkt

Variante 3 auf Punktraster in einer kompakten Version. Die Widerstände wurden stehend isoliert platziert, die Sicherung dient dem Schutz der Therme.

Variante 3 - eine kompakte Aufbauvariante

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.

Möglicherweise bricht "make" mit der Fehlermeldung "delay.h:230:28: error: __builtin_avr_delay_cycles expects an integer constant." ab. Abhilfe schafft ein "#define __DELAY_BACKWARD_COMPATIBLE__ " in hardware/dac/ltc1257.c vor dem "#include <util/delay.h>".

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). Nicht vergessen die Fuses zu setzten.

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

  1. 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)
  2. Versuchen auf die Konsole des AVR-NET-IO-Board zuzugreifen Port: 2701 (Mit Putty, TerraTerm, netcat, ...)
  3. Verfügbare Befehle ansehen:
    Befehl: help
  4. 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
  5. Temperatur einlesen:
    Befehl: 1w get 1069ad4d020800d8
    Ausgabe: 26.4
  6. Steuersignal der Heizung abfragen
    Befehl: adc get 0
    Ausgabe: 04D
    Befehl: adc get 3
    Ausgabe: 04F
  7. Steuersignal auf Maximum stellen
    Befehl: ltc1257_set 4095
    Ausgabe: OK
  8. Steuersignal der Heizung erneut abfragen
    Befehl: adc get 0
    Ausgabe: 0BF
    Befehl: adc get 3
    Ausgabe: 0C9

Ermittlung der Betriebspunkte

Wichtig sind vier Werte:

  1. Messwert (ADC) für den Betriebspunkt Therme 0%
  2. Messwert (ADC) für den Betriebspunkt Therme 100%
  3. Stellwert (DAC) für den Betriebspunkt Therme 0%
  4. 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 setDAC params dacValue
set setDAC cmd {"ltc1257_set %dacValue\n"}
set setDAC expect "OK\n"
# Keine Uebergabeparameter
set init cmd {"ltc1257_init\n"}
set init expect "OK\n"
#

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

Möglichkeiten

Ein Bild sagt mehr als tausend Worte

Screenshot FHEM Therme

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.