In diesem Projekt möchte ich meine Dual-PID-Steuerung vorstellen, welche aus etwas Frustration heraus entstand und meine Siebträgermaschine verbessern soll.
Für Leute, die das Projekt interessiert:
Einfach immer mal wieder vorbeischauen oder die Website der Demo besuchen, um den aktuellen Stand zu erfahren.
Da ich zum einen wenig Zeit für das Projekt habe, noch ein professioneller Programmierer bin, geht alles etwas langsam voran.
Highlights zum aktuellen Zeitpunkt in Firmware 2.9.1:
Kernfunktionen:
- Dual-PID-Regelung:
Unabhängige, präzise PID-Regelung für Wasser- (Kessel/NTC) und Dampftemperatur (Thermoblock/MAX6675). - Zeitproportionale SSR-Ansteuerung:
Effiziente und verschleißarme Ansteuerung der Heizungs-SSRs (Solid State Relais) durch zeitproportionale Logik für gleichmäßigere Temperaturen. - WLAN-Konnektivität:
Integriertes WiFi (Client- oder Access-Point-Modus) für den Zugriff auf die Weboberfläche. - Umfangreiche Weboberfläche:
Modernes, responsives Webinterface zur Konfiguration und Überwachung aller Parameter über Browser (PC/Smartphone).
Komfort & Anpassung:
- Temperaturprofile:
Speichern und Laden von zwei individuellen Profilen (inkl. Sollwerte, Eco-Einstellungen, Dampfverzögerung, Profilname). - Eco-Modus:
Konfigurierbarer Energiesparmodus, der die Temperatur nach einer einstellbaren Zeit absenkt. - Dynamischer Eco-Modus (ECO+):
Temperatur wird im Eco-Modus graduell weiter gesenkt, um Energie zu sparen, aber schnelleres Wiederaufheizen zu ermöglichen. - Fast-Heat-Up:
Optionale Funktion zum schnellen Aufheizen des Kessels auf eine höhere Zwischentemperatur für verkürzte Wartezeiten. - Boost-Funktion:
Optionale Funktion für schnelles Aufheizen auf Zieltemperaturen, welche für Kessel und Thermoblock separat aktivierbar ist.
Volle Heizleistung erzwingen bis 95% der Zieltemperatur für Wasser / Kessel.
Volle Heizleistung erzwingen bis 75% der Zieltemperatur für Dampf / Thermoblock. - Shot-Timer:
Integrierter Timer, der automatisch startet, wenn ein Bezug ausgelöst wird mit Anzeige auf dem Display. - Shot-Zähler:
Zählt Bezüge über 20 Sekunden. - Betriebsstundenzähler:
Erfasst die gesamte Betriebszeit der Steuerung. - Shot- / Bezugsverlauf:
Erfassung und Protokollierung von Datum, Uhrzeit und Bezugsdauer. - Nutzungsstatistik:
Anzeige einer Statistik zum Nutzungsverhalten. - Temperaturcharts / Grafische Darstellung:
Grafische Anzeige von Ist- und Solltemperatur beider Heizelemente mit einstellbarem Aktualisierungsintervall. - OLED-Display-Anzeige:
Klare Anzeige von aktuellen Temperaturen (IST/SOLL), Status (Eco, Fast-Heat-Up, AutoTune, WiFi), Shot-Timer und Systeminformationen. - Konfigurierbare Geräteinfos:
Hersteller, Modell und Zusatzinfos können über das Webinterface angepasst und auf dem Display angezeigt werden. - Dampf-Startverzögerung:
Optionale Verzögerung für das Aufheizen des Dampfkreislaufs nach dem Einschalten.
Setup & Wartung:
- PID AutoTune:
Getrennte, automatische Ermittlung optimaler PID-Parameter (Kp, Ki, Kd) für den Wasser- und den Dampfkreis über das Webinterface.
Es handelt sich hierbei um eine extra für das Projekt modifizierte Version der PID_AutoTune_v0 von Brett Beauregard. - Manuelle PID-Konfiguration:
Möglichkeit zur manuellen Eingabe aller PID-Parameter (Kp, Ki, Kd) und Sensor-Offsets über die Weboberfläche. - Einstellbare Sicherheitslimits:
Softwareseitige Maximaltemperaturen für Wasser und Dampf zur Überwachung konfigurierbar. - Wartungs- / Reinigungserinnerung:
Optionale Einstellung von Wartungs-/Reinigungsintervallen nach X Bezügen mit Hinweis auf dem Display bei fälliger Wartung / Reinigung. - Persistente Speicherung:
Alle Einstellungen (PID, Profile, Eco, WiFi, etc.) werden dauerhaft im EEPROM des ESP8266 gespeichert. - Firmware-Update über WLAN (OTA):
Einfaches Einspielen neuer Firmware-Versionen (.bin-Datei) über das Webinterface. - Einstellungen Sichern/Wiederherstellen:
Export und Import der kompletten EEPROM-Einstellungen als .bin-Datei über das Webinterface. - WiFi-Konfiguration:
Einfache Einrichtung der WLAN-Verbindung (Hostname, SSID, Passwort, Statische IP/DHCP) über das Webinterface.
Anzeige der Signalstärke in RSSI und Prozentual. - Sensorfehlererkennung:
Grundlegende Erkennung von Sensorfehlern (ungültige Werte/NaN) mit Sicherheitsabschaltung der entsprechenden Heizung und Anzeige auf dem Display/Webinterface.
Technische Basis:
- Plattform:
ESP8266 (Wemos D1 mini) - Sensoren:
NTC (Wasser), MAX6675 Thermoelement (Dampf) - Display:
OLED (I2C), optimiert für 1,5″ & 2,4″
Screenshots von der (Desktop-)Web-UI der Version 2.5.3:
Screenshots der mobilen Web-UI in Version 2.4.0:
Was noch geplant ist:
- Code überarbeiten / verbessern
- Test und Einbau
Was eventuell noch kommt:
- Da fällt mir sicher noch was ein.. 😉
Eine Demo ist hier verfügbar:
https://pid-demo.mueller.black/
Wird der Quellcode noch veröffentlicht?
Ja, vermutlich.
Aber: Ich bin kein professioneller Programmierer und daher ist sicher nicht alles „Best Practice“.
Wird der Quellcode Open Source?
Ja, vermutlich. Jeder kann und darf sich das nachbauen, ohne etwas für die Software zu bezahlen.
Nur die kommerzielle Vermarktung möchte ich dann ausschließen!
Der Prototyp (fast fertig):
Erst als Platine für den Einbau in der Maschine gedacht, dann aber durch eine richtige Platine ersetzt.
Grund ist, dass diese Variante unnötig Platz beansprucht, sowie ein zusätzliches Netzteil benötigt wird.
Die Platine:
Die Platine ist nicht perfekt, das weiß ich – Ist aber meine erste bisherig entworfene Platine und dafür vermutlich OK.
Im Gegensatz zum Prototyp ist das MAX6675 nicht als Modul eingebracht, sondern das IC inkl. Kondensator direkt auf der Platine verlötet.
Somit kann der K-Type-Sensor direkt über ein Schraubterminal an der Platine angeschlossen werden.
Auch das Netzteil ist nun nicht mehr separat, sondern kann direkt auf der Platine eingelötet werden.
Trotz Einbringung der o.g. Komponenten beansprucht die Platine nur 6×6 cm Platz.
V1:
Bei der V1 Platine habe ich leider etwas versagt.. aber war ja auch wie o.g. meine erste Platine, die ich jemals entworfen habe.
Hier war leider folgendes passiert:
- Falsches Netzteil ausgewählt
- Bohrungen für die Schraubterminals zu klein
- Kessel-Sensor über 5V-Netzteil versorgt, was aus zwei Gründen ungünstig ist:
- Der 3,3‑V-Ausgang des ESP8266 ist in der Regel durch einen festen Spannungsregler stabilisiert, was für Messungen (z. B. in einem Spannungsteiler mit dem NTC) von Vorteil ist.
Wenn man den Sensor allerdings (wie in meinem Fall) nicht über den Festspannungsregler des ESP, sondern direkt über das Netzteil speist, kann es durch Lastwechsel oder Störungen, die von anderen angeschlossenen Komponenten ausgehen, zu Spannungsschwankungen kommen. Diese Schwankungen können und werden die Messwerte verfälschen ..eher ungünstig für einen PID-Temperatur-Regler - Der ESP hat am A0 einen Messbereich, der auf max. 1.0V limitiert ist. Der integrierte Spannungssteiler ist allerdings so ausgelegt, dass sich der Messbereich auf 3,2V erweitert.
Durch die Versorgung mit 5V, anstatt besser gewähler 3,3Volt kommt man da aber ganz flott drüber, da ein NTC-Sensor bei höherer Temperatur rapide mit dem Widerstand nach unten geht.. also eher ungünstig, wenn man auch einen Fast-Heat-Up-Modus integrieren möchte, bei dem die Temperatur auch noch gemessen werden will.
- Der 3,3‑V-Ausgang des ESP8266 ist in der Regel durch einen festen Spannungsregler stabilisiert, was für Messungen (z. B. in einem Spannungsteiler mit dem NTC) von Vorteil ist.
V2:
- Der Kessel-Sensor wird nun nicht mehr über 5V, sondern über den 3,3Volt Festspannungsregler des ESP angebunden, weshalb die Problematik bei der V1-Platine behoben wurde.
- Anpassungen für Schraubterminals und Netzteil
- Bessere Isolationsfräsungen
- Seitens Bauteilgröße größerer Kondensator am IC (fand ich praktischer, falls man den Kondensator mal ersetzen müsste .. und seitens Platz war es ja auch kein Problem)
- Fest angebrachte Widerstände für die Messung des Kesselsensors:
Es sind zwei in Reihe angebrachte 2kOhm-Widerstände, welche für eine optimale Messgenauigkeit im Bereich von 95°C dimensioniert wurden
V3.3:
- Noch kompakter: 52×60 mm
- Groundfill
- Beschriftung für die ESP-Pins
- Angepasste Widerstände für Messbereich:
Der Messbereich mit der max. Auflösung liegt nun bei 105°C.
Grund ist, dass ein Offset, das die meisten verwenden (10-15°C) berücksichtigt werden sollte. - Vorwiderstände für die SSR:
Je nach verwendeten SSR-Modellen liegt der Strom bei meist bis zu 15mA.
Bei meinen Tru Components-SSRs liegt der Strom zwar nur bei 9mA,
doch sollte er dennoch so niedrig wie möglich sein,
da die GPIO-Pins des ESP8266/Wemos D1 mini max. 12mA liefern / vertragen.
Als guter Kompromiss: 10 Ohm als SMD-Widerstand R3 und R4 - Fehler bei der Anbindung des MAX6675-ICs behoben:
K-Sensor-Anschluss T- muss parallel auf GND verbunden sein