Junkers Therme Stetigregelung: Unterschied zwischen den Versionen

Aus FHEMWiki
Zeile 181: Zeile 181:
Vorbereitung den Operationsverstärker (LM358) wieder in die Schaltung einsetzen. Und den Raumtemperaturregler auf minimale Raumtemperatur einstellen.
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.
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
Der LTC1257 bekommt den Sollwert mittels des Befehls ltc1257_set SOLLWERT (0 <= SOLLWERT >= 2048) zugewiesen. Hierfür wird eine classdef Datei erstellt, z.B.: 
<nowiki>
# Umsetzung in ECMD Befehle
# Ein Uebergabeparameter -> Sollwert
set setDacValue params dacValue
set setDacValue cmd {"ltc1257_set %dacValue"}
# Keine Uebergabeparameter
set init cmd {"ltc1257_init"}
</nowiki>
Danach kann der LTC1257 als ECMD Device in FHEM (fhem.cfg) angelegt werden. Hierfür wird eine möglicherweise bestehende „NETIO classdefs“ erweitert:
<nowiki>
attr NETIO_01 classdefs [Andere ECMD Geräte]:LTC1257=/opt/fhem/ltc1257.classdef
</nowiki>
Anschließend den ADC(/LTC1257) als ECMDDevice definieren
<nowiki>
define MEINADC ECMDDevice LTC1257
attr MEINADC room MEINRAUM
</nowiki>
Der Befehl zum Setzen eines neuen Spannungswertes lautet:
<nowiki>
my $dacValue = 1345;;\
fhem("set MEINADC setDacValue ".$dacValue);;\
</nowiki>

Version vom 5. Juli 2013, 10:41 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

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.

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, 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.

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

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

  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 2000
    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 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 ADC(/LTC1257) als ECMDDevice definieren

define MEINADC ECMDDevice LTC1257
attr MEINADC room MEINRAUM

Der Befehl zum Setzen eines neuen Spannungswertes lautet:

my $dacValue = 1345;;\
fhem("set MEINADC setDacValue ".$dacValue);;\