Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

Schieber-KICAD-AVRPASCAL

FAN-Control – Lüfter- und Schiebersteuerung

View on Codeberg

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

FAN-Control – Lüfter- und Schiebersteuerung

Kompakte Embedded-Steuerung für Lüfter und Abgasschieber eines Gasdurchlauferhitzers, entwickelt mit eigener Hardware in KiCad und Firmware in AVRPascal auf einem ATmega328PB.

PCB Render


Überblick

FAN-Control überwacht den Betriebszustand eines Gasdurchlauferhitzers und steuert automatisch:

  • den Abgasschieber (motorisch, via H-Brücke) – öffnet beim Einschalten des Geräts
  • den Lüfter – schaltet temperaturabhängig zu

Die Steuerung erkennt den Gerätezustand über ein Analogsignal, misst die Abgastemperatur mit einem DS18B20-Sensor und reagiert zusätzlich auf einen manuellen Taster.


Systemarchitektur

pascal
24 V DC
   ???
   ???
Spannungsaufbereitung
   ???
   ???
ATmega328PB (PD2???PD7)
   ????????? PD3 ????????? LM358 (Analogsignal Ger??tezustand)
   ????????? PD4 ????????? DS18B20 (1-Wire Temperatursensor)
   ????????? PD7 ????????? Taster (manuell Ein/Aus)
   ????????? PD5/PD6 ????????? DRV8871DDA (H-Br??cke ??? Schieber-Motor)
   ????????? PD2 ????????? AO3400A (MOSFET ??? L??fter)

Hardware

Hauptkomponenten

Bauteil Bezeichnung Funktion
Mikrocontroller ATmega328PB Zentrale Steuerlogik
Temperatursensor DS18B20 1-Wire Temperaturmessung
Motortreiber DRV8871DDA H-Brücke für Schieber-Motor
Lüftertreiber AO3400A N-Kanal MOSFET zum Schalten des Lüfters
Signalaufbereitung LM358 Operationsverstärker für Geräte-Signal
Versorgung 24 V DC Externe Versorgungsspannung
Gehäuse Bernic Series 350 DIN-Schienenmontage

Gehäuse

Bernic Series 350

Pin-Belegung (ATmega328PB)

Pin Port Richtung Funktion
PD2 D2 OUTPUT Lüfter Ein/Aus (via AO3400A MOSFET)
PD3 D3 INPUT Betriebssignal Durchlauferhitzer (via LM358)
PD4 D4 I/O DS18B20 1-Wire Datenleitung
PD5 D5 OUTPUT DRV8871 IN1 – Motor Auf
PD6 D6 OUTPUT DRV8871 IN2 – Motor Zu
PD7 D7 INPUT Taster – manuell Schieber Ein/Aus

Firmware

Zustandslogik

Die Haupt-Schlaufe läuft kontinuierlich mit einer Pause von 250 ms pro Zyklus.

pascal
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???  Einschalten (SchieberOnOff = TRUE) wenn:       ???
???    GEon = 1  (Durchlauferhitzer l??uft)          ???
???    OR  Temperatur > 40 ??C                       ???
???    OR  Taster aktiv                             ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???  Ausschalten (SchieberOnOff = FALSE) wenn:      ???
???    GEon = 0  AND  Temperatur ??? 40 ??C            ???
???    AND  Taster nicht aktiv                      ???
???  Einschalten (SchieberOnOff = TRUE) wenn:       ???
???    GEon = 1  (Durchlauferhitzer l??uft)          ???
???    OR  Temperatur > 40 ??C                       ???
???    OR  Taster aktiv                             ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???  Ausschalten (SchieberOnOff = FALSE) wenn:      ???
???    GEon = 0  AND  Temperatur ??? 40 ??C            ???
???    AND  Taster nicht aktiv                      ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Temperatur-Schwellwert: TempFan = 40 °C (konfigurierbar als Konstante im Quellcode)

Fehlertoleranz: Bei einem Lesefehler des DS18B20 (seCRCError, seNoSensor) bleibt der zuletzt gültige Temperaturwert (lastGoodTemp) erhalten.

Motor-Ansteuerung

Der DRV8871-Motortreiber wird über zwei Ausgänge angesteuert:

Befehl IN1 IN2 Lüfter
Schieber AUF HIGH LOW EIN
Schieber ZU LOW HIGH AUS

Zwischen den Schaltzuständen werden kurze Mikrosekunden-Pausen eingehalten, um Stromspitzen zu vermeiden.

DS18B20 – Eigene 1-Wire Implementierung

Der Sensor wird über direktes Port-Bit-Banging (DDRD / PORTD / PIND) ohne externe Bibliothek angesprochen. Die Implementierung beinhaltet:

  • 1-Wire Reset mit Präsenzsignal-Erkennung
  • Bit-genaues Read/Write mit µs-Timing
  • CRC8 Dallas-Prüfsumme zur Datenvalidierung
  • Fehlerbehandlung über den Typ TSensorError:
Fehlercode Bedeutung
seNone Kein Fehler
seNoSensor Sensor nicht erkannt (kein Präsenzsignal)
seCRCError Prüfsummenfehler
seOutOfRange Temperaturwert ausserhalb −55…+125 °C

Projektstruktur

pascal
FAN-Control-mit-ATMEL-328P-programmiert-in-AVRPascal/
????????? Hardware/
???   ????????? 700000008-SCHIEBER-V3.kicad_sch   # Schaltplan
???   ????????? 700000008-SCHIEBER-V3.kicad_pcb   # PCB-Layout
???   ????????? 700000008-SCHIEBER-V3.kicad_pro   # KiCad Projektdatei
???
????????? Software/
???   ????????? P_700000008_V3_A.pas              # Hauptprogramm
???   ????????? DS18B20.pas                       # 1-Wire Sensor Unit
???   ????????? testDS18B20.pas                   # 1-Wire Sensor Test mit Ausgabe an UART
???   ????????? P_700000008_V3_A.hex              # Flash-fertige Hex-Datei
???   ????????? P_700000008_V3_A.elf              # ELF Debug-Binary
???   ????????? P_700000008_V3_A.bin              # Rohes Bin??rimage
???
????????? images/
???   ????????? render.jpg                        # PCB 3D-Render
???   ????????? bernicSeries350.jpg               # Geh??use DIN-Schiene
???
????????? LICENSE
????????? readme.md

Voraussetzungen

Hardware

  • Zielhardware mit ATmega328PB
  • 24 V DC Versorgung
  • DS18B20 Temperatursensor
  • Abgasschieber mit geeignetem DC-Motor
  • Lüfter
  • Programmer: USBasp oder kompatibel, NEU auch mit Arduino als ISP

Software


Build & Flash

Flashen (fertige Hex-Datei)

bash
avrdude -c usbasp -p m328pb -P usb -U flash:w:Software/P_700000008_V3_A.hex

Hinweis: Den Partcode -p m328pb verwenden (nicht m328p), da es sich um den ATmega328PB handelt.

Fuse-Konfiguration

Die Fuse-Bits müssen zur Taktquelle passen:

Fuse Empfehlung
CKSEL Externer 16 MHz Quarz
CKDIV8 Deaktiviert (kein Vorteiler)
BODLEVEL Je nach Anwendung (empfohlen: 2,7 V)

Beispiel (externer 16 MHz Quarz, BOD 2,7 V):

bash
avrdude -c usbasp -p m328pb -P usb \
  -U lfuse:w:0xFF:m \
  -U hfuse:w:0xD9:m \
  -U efuse:w:0xFF:m

⚠️ Falsche Fuse-Einstellungen können den Mikrocontroller unbrauchbar machen. Vor dem Setzen unbedingt mit dem Datenblatt abgleichen.


Projektstatus

Bereich Status
Hardware ✅ Entwickelt
Firmware ✅ Lauffähig
Taktquelle ✅ Externer 16 MHz Quarz getestet
Flash-Prozess ✅ USBasp / avrdude erfolgreich
Feldbetrieb 🔄 In Erprobung

Mögliche Erweiterungen

  • Serielle Diagnoseausgabe (UART) für Temperatur- und Zustandslogs
  • Fehlererkennung mit Status-LED oder Summerton
  • Parametrierung von TempFan über Taster oder EEPROM
  • Watchdog-Timer für erhöhte Ausfallsicherheit
  • Stückliste (BOM) als PDF oder CSV

Sicherheitshinweis

Dieses Projekt ist kein zertifiziertes Sicherheitsprodukt und kein freigegebenes Seriengerät. Der Einsatz erfolgt ausschliesslich auf eigene Verantwortung – insbesondere bei Anwendungen mit Gasgeräten, Wärmequellen oder beweglichen Aktoren. Vor dem Praxiseinsatz müssen alle elektrischen, thermischen und sicherheitstechnischen Aspekte eigenständig geprüft werden.


Lizenz

MIT License – siehe LICENSE


=======

Autor

Christof Biner (@staibisser)