Junkers 1-2-4 Stetigregelung (Arduino/ PWM/ Transistorlösung)

Begonnen von KaiK, 30 Dezember 2013, 17:37:27

Vorheriges Thema - Nächstes Thema

KaiK

Hallo zusammen,

ich möchte euch an dieser Stelle die Anschaltung meiner Junkers-Therme an FHEM vorstellen sowie einen offenen Punkt diskutieren. Es soll an dieser Stelle nur um die elektrische/elektronische Anschaltung gehen und nicht um die Regelung in FHEM (die ich vermutlich mit HCS machen werde. Dazu zu einem späteren Zeitpunkt mehr).

Vorhandenes System:
Junkers-Therme mit 1-2-4 Schnittstelle (24V, Signal, GND)
Junkers Raumthermostat / Regelung FR100

FHEM auf Fritzbox 7330
IO-Board in Form eines Arduino Mega 2560 mit Ethernet-Shield und Firmata-Firmware

Ziel:
Steuerung der Gastherme mittels FHEM. Dazu erwartet die Gastherme auf dem Anschluss 2 der 1-2-4 Schnittstelle eine Steuerspannung.
0V (bzw. alles unter 4.3V) bedeutet Aus. 24V (bzw. alles über 20.6V) bedeutet maximale Leistung.

Zu beachten ist, dass die Therme die Steuerleitung intern auf HIGH-Level (also 24V) "zieht" (vermutlich mit einem Pullup-Widerstand). Das bedeutet, dass wenn man das Steuergerät abklemmt, die Heizung auf voller Leistung heizt (und natürlich abschaltet, sobald die Maximale-Vorlauftemperatur erreicht ist.)

Wünschenswert wäre, dass ich das aktuelle Steuergerät parallel zum neuen Setup belassen kann und als Frostschutz/Backup-Steuerung nutzen kann. (ich würde das Gerät auf 16°C einstellen, sodass wenn meine Zusatzhardware/FHEM ausfällt, im Zweifel eine Minimalheizung stattfindet).

Genutzte Hardware:
Arduino Mega 2560 (ein Uno sollte es auch tun)
Arduino Ethernet Shield
BC547 Transistor, 2 Kondensatoren, 2 Widerstände

Setup:
Ein vergleichbares Setup ist hier im Wiki beschrieben (Junkers Therme Stetigregelung). Die dort verwendete Hardware (Pollin AVR-NET-IO-Board) sagt mir jedoch nicht sehr zu (ich bin ein Arduino-Kind :-) ) und ist mit dem DA-Wandler auch recht teuer (der LTC1257 kostet bei den üblichen verdächtigen über 10 Euro!).

Zur Nutzung eines Arduino an FHEM bietet sich Firmata an (vergleichbar mit Ethersex auf dem AVR-NET-IO-Board). Firmata bringt für Arduino (und die Ethernet-Platine für den Arduino) eine Firmware mit, die nur sehr einfach konfiguriert werden muss (IP-Adresse, Port usw.). Der Arduino verbindet sich dann via Netzwerk (alternativ auch via USB; dann wird keine Ethernet-Platine benötigt) mit FHEM. In FHEM stehen dann alle Ports zur Verfügung und können als Digitale Ausgänge, PWM Ausgänge, Digitale Eingänge oder Analoge Eingänge genutzt werden.

Zur Ansteuerung der Therme nutze ich ein PWM Signal, dass über ein RC-Glied (Widerstand, Kondensator) geglättet wird und über einen Transistor auf die benötigte Arbeitsspannung gebracht wird. Der Aufbau ist im Bild dargestellt und dieser Quelle entnommen: http://www.tahina.priv.at/electronics/junkers.html

(http://s7.directupload.net/images/131230/kr9urc8w.jpg)

Ich habe den Aufbau an der Therme mit abgeklemmter Originalsteuerung (FR100) getestet. Funktioniert einwandfrei. Die Therme lässt sich aus FHEM mittels PWM Set steuern.

Offener Punkt:
Sobald ich die Original Junkers Stetuerung (FR100) parallel anschließe, funktioniert meine Schaltung nicht mehr richtig.

Beispiel 1: Junkers will heizen (->20.6V), Arduino will heizen (->20.6V = Transistor offen/PWM=off) klappt

Beispiel 2: Junkers will nicht heizen (->4.3V), Arduino will heizen (->20.6V = Transistor offen/PWM=off)  klappt nicht. Vermutung: Die Junkers Steuerung zieht die Signalleitung gegen GND, sodass ich bei offenem Transistor die Spannung am Signalpin nicht erhöhen kann.

Beispiel 3:  Junkers will nicht heizen (->4.3V), Arduino will nicht heizen (->4.3V = Transistor geschlossen/PWM=on) klappt.
Die Spannung sinkt sogar etwas unter 4.3V, da sowohl durch das Junkers-Steuergerät wie auch durch den Arduino Strom auf GND "abfließt".

Lösungsansatz:
Meine Idee ist, den Anschluss2 der Therme/ Collector des BC547 mit einem recht kleinen Pullup-Widerstand auf +24V zu legen, sodass ich mit der Arduino Steuerung den "Pulldown" der Junkers-Steuerung "übersteuern" kann.
In der oben verlinkten Schaltung mit dem DA-Wandler sowie dem OpAmp muss das ja im Endeffekt ähnlich funktionieren. Von +24V nach Anschluss2 fließt ein groß genuger Strom, um den Strom von Anschluss2 durch die Junkers Steruerung nach GND zu übersteuern...

Ich freue mich auf eure Gedanken hierzu!

VG
Kai




FHEM auf Raspberry Pi, HM-CFG-LAN, 3x HM-CC-RT-DN
Testbed: Arduino Mega 2560 mit Config. Firmata als Sensor/Aktuator

mdorenka

hallo,

du solltest evtl mal im http://www.mikrocontroller.net/ forum fragen, da kann man dir sicher besser helfen.

ich nehme auch nicht an dass das ansteuern via pwm unbedingt funktionieren wird, da wohl eine konstante spannung erwartet wird und nicht ein "ein-aus" wie bei PWM.
FHEMduino an RaspberryPi, IT Zwischenstecker, KW9010 T/H-Fühler

KaiK

Hi und Danke für deinen Hinweis.

Zitat von: mdorenka am 30 Dezember 2013, 20:30:40
ich nehme auch nicht an dass das ansteuern via pwm unbedingt funktionieren wird, da wohl eine konstante spannung erwartet wird und nicht ein "ein-aus" wie bei PWM.
Doch das geht einwandfrei (habe ich ja bereits getestet). Das PWM wird durch einen Tiefpass (siehe oben) fein geglättet!

VG
Kai
FHEM auf Raspberry Pi, HM-CFG-LAN, 3x HM-CC-RT-DN
Testbed: Arduino Mega 2560 mit Config. Firmata als Sensor/Aktuator

Samsi

#3
Hallo Kai,

nun ich habe auch vor in Ferner Zukunft meine Hydrotherm so zu steuern. Diese regelt von 0-5v. Da hatte ich mir überlegt, das ich vielleicht den original Input der Steuerung in meinen Arduino leite und messe und dann entsprechend auf einem anderen Pin an die Therme wieder ausgebe. Und wenn ich dann das Original Steuergerät nicht verwenden will, ignoriere ich den Input und generiere meinen eigenen Output.

Bei Dir müsstest Du dann aber den Input mit einem Spannungsteiler erstmal 0-5v kompatibel machen. Aber wenn ich es richtig verstanden haben, geht es dir Primär um "backup". Bei der von mir favorisierten Lösung würde natürlich das gesamte System vom Arduino abhängig sein. Wenn der hops geht geht natürlich auch nicht mehr. Allerdings wenn FHEM nicht geht könnte man den Arduino so einstellen, das Original Steuergerät Signal weiter zu geben.
FHEM 5.5 / BBB Debian Wheezy

Homematic CFG-LAN

HM-Sec-MDIR / HM-Sec-SD / HM-Sec-WDS / HM-LC-Sw2-FM / HM-Sec-SC / HM-LC-Sw1PBU-FM / HM-SCI-3-FM / HM-Sec-Key / HM-RC-Key3-B / HM-LC-Dim1TPBU-FM /  HM-CC-RT-DN / HM-PBI-4-FM / HM-RC-Key4-2 / HM-ES-PMSw1-Pl / HM-LC-Sw4-WM

hexenmeister

Wollte gerade so eztwas ähnliches vorschlagen, wie Samsi, war aber nicht schnell genug ;)
Der Arduino ist sehr stabil. Um das noch zu erhöhen würde ich in den Scetch Benutzung von Watchdog einbaen. Dieser resettet den Arduino, wenn er nicht innerhalt einer bestimmten Zeitspanne zurückgesetzt wird. Damit kann sich Arduino nicht 'aufhängen'.

Das Program würde ich so stricken, dass es die letzte Änderung umsetzt und weitergibt. Also sowohl FHEM als auch Originalsteuerung. Die Signale der der Originalsteuerung könnte man auch an FHEM zurückliefern, so dass dieser über einen 'Seitenhieb' informiert wird und entsprechend reagieren kann.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

P.S. Wenn Du den (recht unwahrscheinlichen) Arduino-Ausfall abdecken willst, nimm zwei Arduinos: Master-Slave.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Samsi

ZitatDas Program würde ich so stricken, dass es die letzte Änderung umsetzt und weitergibt. Also sowohl FHEM als auch Originalsteuerung. Die Signale der der Originalsteuerung könnte man auch an FHEM zurückliefern, so dass dieser über einen 'Seitenhieb' informiert wird und entsprechend reagieren kann.

Ich glaube das wird nichts. Du hast als letzte Änderung ja  immer nur das Steuersignal und sobald der Arduino steuert, wird die Originalsteuerung merken das es zu warm oder zu kalt ist und entsprechend dagegen steuern.
Der Arduino muss festlegen wer steuern soll, z.B. die Orginalsteuerung wenn FHEM nicht mehr erreichbar ist ansonsten dar Arduino selbst.

Frohes neues
FHEM 5.5 / BBB Debian Wheezy

Homematic CFG-LAN

HM-Sec-MDIR / HM-Sec-SD / HM-Sec-WDS / HM-LC-Sw2-FM / HM-Sec-SC / HM-LC-Sw1PBU-FM / HM-SCI-3-FM / HM-Sec-Key / HM-RC-Key3-B / HM-LC-Dim1TPBU-FM /  HM-CC-RT-DN / HM-PBI-4-FM / HM-RC-Key4-2 / HM-ES-PMSw1-Pl / HM-LC-Sw4-WM

hexenmeister

Hm, da hast Du wohl recht...
Ok, dann eben soll sich der FHEM regelmäsig als 'alive' melden und solange hat auch die Steuerung durch FHEM Priorität.
Dies (und noch Watchdog im Arduino) sollte schon recht ausfallsicher sein. ;)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

KaiK

Ich habe mir mal das FIRMATA Protokoll bzw. die Arduino-Sketches angeschaut, bin da bzgl. alive/save-state noch nicht weitergekommen.

In den letzten 48h hatte ich hier jedoch eine Erkenntnisse, sodass meine Lösung jetzt anders aussieht.
1.) Die Therme scheint höchstens minimale Unterschiede in der "Flammenhöhe" aus der Spannungserkennung abzuleiten. Ich Vermute, dass die insb. mit Vorlauf/Rücklauftemperatur arbeitet.
2.) Ich bin von der Fritzbox weg auf einen Raspberry Pi, da meine FB 7330 performancetechnisch dicht gemacht hat (Webinterface Absturz, VoIP Absturz): Ich hatte HMLAN, 3 HM-CC-RT-DN, FIRMATA, HCS-Modul und ein paar Dummies und notifys an (30 Elemente oder so).

Mein Setup schaut jetzt so aus, dass ich direkt einen GPIO-PIN des Raspberry zum Schalten eines Optokoplers (PC817) nutze. Über den Optokoppler fällt dann die Spannung des Anschlusses 2 gegen GND ab und schaltet die Therme aus (!). Wenn nun der Raspberry kaputt gehen sollte (Spannungslos), dann sperrt der Optokoppler und die Heizung heizt (und schaltet selbständig ab, wenn Vorlauftemperatur zu hoch wird).

Was damit noch nicht gelöst ist, ist ein "Aufhängen" von FHEM oder sonstiges Fehlverhalten...

VG
Kai
FHEM auf Raspberry Pi, HM-CFG-LAN, 3x HM-CC-RT-DN
Testbed: Arduino Mega 2560 mit Config. Firmata als Sensor/Aktuator

hexenmeister

ZitatWas damit noch nicht gelöst ist, ist ein "Aufhängen" von FHEM oder sonstiges Fehlverhalten...

Bekommst Du auch ohne einer 'Zwischeninstanz', die danach prüft, nicht sicher gelöst.

Wie schon gesagt, wohl einfachste und auch billigste Lösung wäre ein Arduino Pro Mini (wenn nicht gleich ein 'nachter' Atmel, z.B. ATtiny85). Bekommt man schon unter 3 Euro. Dieser könnte dann auf die Deine Steuerung (Original, Raspberry oder was auch immmer) entsprechend reagieren und dann selbst die notwendige Signale erzeugen (PWM, Analog 0-5V). Wenn sich z.B. Raspberry nicht innerhalb einer bestimmten Zeit gemeldet hat (z.B. über GPIO-Pin), dann gilt dieser als ausgefallen. Arduino könnte auch ggf. einen Reset von Easpberry einleiten. Oder sogar selbst Temperatur messen (DS18b20-Sensor, ca. Euro) und dadurch eine Notfalls-Steurung organisieren. Durch eine entsprechende Programmierung (Nutzung des internen Watchdogs) wird Arduino sehr sicher im Betrieb. Ein Hardwareausfall (von Stromversorgung mal abgesehen) ist sehr unwahrscheinlich.

Auch ein Netzwerkinteface für Arduino ist kein Problem. Damit könnte man auch per Ethernet mit Raspberry kommunizieren, oder eine kleine Steuer-Anwendung im Browser basteln.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Ragnar

Hallo KaiK,

wie sieht dein Projekt denn zur Zeit aus? Auf Eis gelegt oder schon eine Lösung gefunden alten Regler und automatische Steuerung nebeneinander zu betreiben? Ich stehe momentan vor dem gleichen Problem eine ZWR 24 3 AE 3 ansteuern zu müssen, da sonst die Ventilsteuerung an den Heizkörpern keinen Sinn hätte.

Das mit dem AIO Board ist jetzt auch nicht meine erste Wahl und benötigt zusätzliche Hardware. Ein Arduino Uno oder RasPi hätte ich grade hier :)

Hättest du einen Schaltplan zur Hand wie ich eine Platine aufbauen müsste bzw. auch einen Sketch für den Arduino bzw für die Steuerung über den RasPi

Danke und Gruß
Ragnar

KaiK

Hi,

ich habe das System seit einem Jahr erfolgreich am laufen.
Nach einigem Testen habe ich festgestellt, dass die Heizung nicht (jedenfalls nicht spürbar) auf unterschiedliche Ströme (ergo PWM-Pulslängen) reagiert. Das hat mich zu dem Entschluss gebracht, dass ich die Heizung über die 1-2-4 Schnittstelle einfach stumpf Ein-/Ausschalten kann. Dies habe ich dann über einen GPIO-Pin des RaspPi über einen Optokopler realisiert und in FHEM mit einem perl-Aufruf angesteuert.

Schaltplan und Code-Schnippsel kann ich gerne noch Ergänzen, wenn Bedarf besteht.

VG
Kai
FHEM auf Raspberry Pi, HM-CFG-LAN, 3x HM-CC-RT-DN
Testbed: Arduino Mega 2560 mit Config. Firmata als Sensor/Aktuator

Achim

Hallo,

ich habe eine ähnliche Gesamtkonfiguration jetzt schon den zweiten Winter im Einsatz. Über die 1-2-4 (ich wusste gar nicht, das die Klemmen als Schnittstelle bezeichnet werden  ;) ) schalte ich meine Therme (ZR24) Ein und Aus. Das Verändern der Vorlauftemperatur hat bei meinen ersten Versuchen vor einigen Jahren irgendwie nicht funktioniert. Das Relais hängt an einem Arduino, den ich per FIRMATA von FHEM aus ansteuere. Das Relais wird über das HCS Modul gesteuert. Ich habe es so "verschaltet", das bei einem Ausfall des Arduino/Strom am Arduino das Relais abfällt und die Heizung läuft. Auch die Abschaltung der Heizung in der Übergangszeit anhand der Außentemperatur funktioniert hervorragend. Da kann man getrost die Heizung länger laufen lassen ohne das sie sinnlos heizt (oder muss nicht laufend wieder anschalten, wenn es doch noch ein paar Tage kalt wird).

Ob die Veränderung der Vorlauftemperatur signifikant Energie/Gas spart kann ich nicht beurteilen. Da meine Therme schon etwas älter ist, gehe ich da keine Experimente mehr ein. Ersatzteile sind schon jetzt schwer zu bekommen und da bin ich mit Versuchen an der Elektrik vorsichtig.

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

Ragnar

Sorry wenn ich jetzt Off Topic werde - aber ich hab bisher von elektronischen Schaltungen 0 (in Worten NULL) Plan. Hab jetzt vor einer Woche mal ein RasPi und Arduino Uno besorgt um da mal einzusteigen. Aber wie schaffe ich es bei einem Ausfall des "Controllers" das der normale Termostatregler die Heizungsschaltung übernimmt? Dafür wäre ich sehr dankbar. Die software seitige Integration kommt sowieso erst später wenn ich mich mal durch die CommandRef durch geackert hab.

hexenmeister

#14
Kommt sehr auf die Situation an.
Ein Arduino kann sehr stabil sein. Muss natürlich entsprechend programmiert werden. Stichwort Watchdog. Wenn das zu wenig ist (also wird auch Hardwareausfallabsicherung benötigt), dann muss die Hardware redundant ausgelegt werden und sich gegenseitig überwachen (hot standby).

Ich habe ja weiter oben schon drüber geschrieben. Das ist aber ein Thema, in das man sich nicht von Null innerhalb einer Woche einarbeiten kann.

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy