Diese Steuerung für einen Brauautomaten entstand für einen Bekannten, der Hobby-Bierbrauer ist. Meine Aufgabe war hier, eine Steuerung zu erstellen, die die Temperatur des Kessels überwacht und verschiedene Geräte abhängig von einem vorgegebenen Programm ein- und ausschaltet. Kessel, Rührwerk, Heizung etc. waren bereits vorhanden.
Als Hauptcontroller arbeitet hier ein ATmega644P mit 20MHz. Die Bedienung erfolgt über 2 Inkremental mit Tastfunktion. Zur Anzeige des aktuellen Programmschritts sowie anderer Informationen wird ein Monochrom-Display mit 128x64 Pixel verwendet. Die Kesseltemperatur wird mit einem wasserdicht vergossenen DS18B20 (1-Wire) gemessen. Ein kleiner Piezosummer gibt Singaltöne von sich, wenn ein Fehler auftritt, ein neuer Programmschritt abgearbeitet wird oder auch bei Drehen/Drücken der Inkrementalgeber. Bis auf Fehler kann die Ausgabe von Signaltönen konfiguriert werden.
Es gibt 4 Relaiskanäle, deren Schaltzustand für jeden Programmschritt separat festgelegt werden kann. Es gibt 2 Heizkanäle, die 2-phasig mit 2x 250V/8A pro Phase geschaltet werden können. Bis 2000W Leistung reicht hier 1 Schaltkontakt, ab 2000W müssen beide Kontakte eines Relais parallel geschaltet werden. 2 weitere Kanäle mit 2x 250V/8A, einer davon für das Rührwerk sowie einer als Reserve.
Im EEPROM des ATmega können 10 verschiedene Brauprogramme abgelegt werden, jeweils mit 24 Programmschritten. In jedem Programmschritt kann die Zeit in Minuten festgelegt werden, die Solltemperatur sowie der Schaltzustand der 4 Relaiskanäle. Wird die Zeit auf 0 gesetzt, kann der Schritt übersprungen werden.
Beim Start eines der ausgewählten Programme bzw. bei jedem neuen Programmschritt wird zunächst versucht, die vorgegebene Zieltemperatur zu erreichen. Entweder durch Einschalten der festgelegten Heizkanäle (1, 2 oder beide) oder durch einfaches abkühlen lassen. Ist die Zieltemperatur erreicht, wird diese für die voreingestellte Zeit gehalten; ebenfalls durch passendes Einschalten der Heizkanäle. Die für die Temperaturanpassung benötigte Zeit wird separat gemessen. Die Temperatur wird dabei auf ± 0,3°C genau gehalten. Ist die Zeit des Programmschritts abgelaufen, wird entweder der nächste geladen, oder sofern dies bereits der letzte war, das Programm beendet.
Auf dem Screenshot rechts wird in der rechten oberen Ecke der Schaltstatus der einzelnen Relaiskanäle angezeigt. Die Informationen der einzelnen Zeilen: