Selbstgemacht:

Lüfterregelung mit Arduino


Features:

  • Lüfterregelung z.B. für PA
  • PID-Regelung
  • Anzeige TFT, Bedienung mit Touch-Screen
  • Solltemperatur-Vorgabe und Ist-Anzeige

Bild 1: TFT-Display mit zwei Buttons zur Einstellung der Solltemperatur.

Besser regeln mit PID:

Lüfterregelung für Selbstbau-PA oder TRX

Die bestehende Temperaturregelung eines PA-Lüfters ist einige Jahre alt und soll ersetzt werden. Alles soll schöner und bunter werden. Ein Touchscreen dient zur Anzeige des Soll- und Istwertes und dient zu Einstellung der Solltemperatur mittels zweier Buttons. Die Hardware ist ein beliebiger 3,3-Volt-Arduino mit ATMega328, ein farbiges TFT-Display sowie ein winziger, analoger Temperaturfühler. Die Steuerung übernimmt ein PID-Regler.

Vor einigen Jahren habe ich die Regelung selbst geschrieben und eine Art Proportionalregler implementiert. Dieses Mal soll es ein echter PID-Regler sein, wie er in der Industrie Verwendung findet. Das verspricht eine exakte Regelung. Der Sensor misst bis zu 125 Grad Celsius, die TFT-Anzeige ist auf Temperaturen von Null bis 99,9 Grad ausgelegt. Die Einstellung der Solltemperatur wurde in halben Celsiusgraden implementiert. Den Hobbyprogrammierer freut es, dass Arduino für den Regler eine PID-Library bereit stellt, ebenso auch für die Ansteuerung des TFT-Farbdisplays und des Touch-Controllers. Das ist das Schöne beim Arduino: Eine bequeme Handhabung beim Programmieren des Sketches (Arduino-Programms) und Flashen des Prozessors sowie die Tatsache, dass sich ein Projekt in einem überschaubaren Zeitrahmen realisieren lässt. Diese Lüfterregelung ist im Laufe einer Woche entstanden, inklusive der Dokumentation.


Bild 2: Verdrahtungsplan.

Das Schaltbild

Nun ja, eher ein Verdrahtungsplan (Bild 2). Man nehme einen Arduino, der - und das ich wichtig - mit einer Betriebsspannung von 3,3 Volt arbeitet. Ich nutze gern den Olimexino328, einen Arduino-Nano-Klon, der sich mit einem Schiebeschalter von 5 Volt auf 3,3 Volt umschalten lässt.

Alternativ bietet sich ein Arduino-NANO(-Klon) an, wenn er mit einem 3,3 Volt-Regler bestückt ist.

Da der Temperatursensor TC1046 (Bild 4) und auch das TFT-Display mit 3,3 Volt arbeiten, ist es praktisch, dass auch der Arduino mit 3,3 Volt klar kommt. Um den kleinen 3,3-Volt-Regler auf dem Arduino nicht zu stark zu belasten, wurde für die TFT-Anzeige eine separate Spannungsversorgung vorgesehen - und das überwiegend wegen des Stromverbrauchs der Hintergrundbeleuchtung, für die man ca. 80mA berechnen muss.

Wer partout einen Arduino-UNO (5V) verwenden will, leitet sämtliche Signale zum TFT über einen Level Shifter - hat dann jedoch die doppelte Arbeit bei der Verdrahtung. Dann muss man sich noch um 3,3 Volt kümmern, um TFT und TC1046 adäquat zu versorgen...

Die vier Signale D7 bis D4 (digitale Pins des Arduino) bewerkstelligen die Kommunikation mit dem Touch-Controller, der sich auf dem TFT-Display befindet. D3 ist einer der sechs PWM-Ausgänge des Prozessors Atmel ATMega328 (oder eines Atmel ATMega mit mehr Speicher) und steuert direkt das Gate eines N-Kanal-MOSFET an, der per Pulsweitenmodulation wiederum den Lüftermotor in Betrieb setzt.


Bild: 3: Blick ins Datenblatt: Der Drain-to-Source-Strom darf bei 3,3 Volt Gatespannung bis zu 50 Ampere betragen, das sollte man nicht ausnutzen.

Der Power-MOSFET

Im Verdrahtungsplan habe ich den exakten Typ des MOSFETs offen gelassen. Es handelt sich um einen Logic-Level-N-Kanal-MOSFET, der bei geringer Spannung am Gate bereits gut durchschalten muss. In der Bauteilekiste fand ich den IRL3705 aus einem vorherigen Projekt. Der verträgt eine Menge Strom (ca. 90 A) und leistet bei einer Gatespannung von 3,3 Volt immerhin fast 50 Ampere, das allerdings nur bei sehr guter Kühlung (Bild 3). Die paar Milliampere des hier verwendeten, älteren PC-Lüfters jucken den MOSFET also nicht. Statt des IRF3705 ist es möglich, viele andere Logik-Level-MOSFETS zu nutzen. Man muss nur etwas auf den Strombedarf des Lüftermotors achten und den MOSFET darauf abstimmen. Besser geeignet als der IRL3705 ist für größere Ströme beispielsweise der IRLZ44, der bei nur 3,3 Volt am Gate schon fast völlig durchschaltet und mit einen, bei 5V am Gate günstiges RdsOn von 28 mOhm aufwartet. RdsOn bezeichnet den Widerstand des MOSFET bei völlig durchgeschaltetem Zustand. Es lassen sich der Spannungsabfall im MOSFET und die Leistung berechnen.


Bild 4: Der winzige Temperatursensor TC1046 lässt sich wasserdicht in Schrumpfschlauch einschweißen.

Aufbau

Der Aufbau kann vorzugsweise auf einer Lochrasterplatine oder auf einem Steckbrett erfolgen. Letzteres ist jedoch nur eine temporäre Lösung, wackeln die Du-Pont-Steckerchen im Brett gerne, sodass es keinen Spaß macht, wenn die Spannungsversorgung ebenso wackelig ist und man jede Viertelstunde den Reset-Taster des Arduino betätigen muss. Also eine Lochrasterplatine. Die verlöteten Signalleitungen garantieren dauerhafte Verbindungen. Der TC1046 kommt als winziger Dreibeiner daher. Auch er passt auf eine kleine Lochrasterplatine. Drei Anschlüsse ergeben sich: Spannungsversorgung (3,3 Volt), analoger Ausgang und GND. Mit drei Kabeln lässt sich der Temperatursensor flexibel im Gehäuse der PA oder des Transceivers platzieren. Der analoge Ausgang des Sensors wird mit A0, dem ersten analogen Eingang des Arduino, verbunden. Um sinnvolle Temperaturwerte zu erhalten, ist auf eine stabile, saubere Spannungsversorgung und gute Masseverbindung des Sensors zu achten. Auch ein 100nF-Kondensator zwischen 3,3V und GND am TC1046 schadet nicht. Lange Anschlusskabel sind zu vermeiden.

Bei der ersten Inbetriebnahme wird das Display statt eines sinnvollen Sollwertes einen erhöhten Wert von 99 Grad Celsius anzeigen. Der Grund ist folgender: Das Programm speichert den Sollwert im EEPROM des Prozessors, das erspart das Einstellen des Sollwertes bei jedem Einschalten. Konnte das EEPROM nicht korrekt gelesen werden, weil bisher noch gar keine Sollwerte dort abgelegt wurden, erscheint stattdessen eine "künstliche" Solltemperatur von 99 Grad Celsius. Bei jeder Änderung der Solltemperatur mittels der beiden Buttons des Touch-Displays merkt sich das Programm den Sollwert im EEPROM. Beim nächsten Einschalten der Regelung kann der Sollwert nun korrekt gelesen werden und wird entsprechend angezeigt und benutzt.

Etwas Theorie: PID-Regler

Der PID-Regler besteht genau genommen aus drei Reglern: P steht für den Proportionalregler, I für den Integrierenden Regler und D für den Differentialregler. Jedem der drei Regler ist ein Parameter zugeordnet, welche die Bezeichnungen Kp, Ki und Kd tragen. Der einfachste Regler ist der P-Regler, er ist auch der Hauptregler und verrichtet die meiste Arbeit. Er misst die Abweichung zwischen dem Soll- und Istwert und multipliziert den Fehlerwert mit Kp. Der Proportionalregler reagiert sofort auf Änderungen des Istwertes. Je größer der Parameter Kp eingestellt ist, desto größer wird die Regelamplitude.

Ausgang des P-Reglers = (Ist-Soll) * Kp

Der P-Regler allein schafft es nicht, einen vorgegebenen Sollwert exakt zu erreichen. Hier hilft der integrierenden Regler. Im Gegensatz zum P-Regler, der sich mit der momentanen Änderung des Istwertes beschäftigt, reagiert der I-Regler auf Werte der Vergangenheit. Er schaut sich das Ergebnis des P-Reglers an, und wenn er es nicht schafft, gleicht er Stück für Stück den Ausgang des Reglers an.

Ausgang des I-Reglers = Ausgang des I-Reglers + (Soll - Ist) * Ki

Ausgang beider Regler = Ausgang P-Regler + Ausgang I-Regler

Und der D-Regler? Das ist der Regleranteil, der versucht, die Zukunft in die Regelprozedur mit einzubeziehen. Er beobachtet die Veränderung des Istwertes. Falls er driftet, ergreift der D-Regler Gegenmaßnahmen und reagiert sofort auf Störungen.

Diese verkürzte Darstellung wurde [1] entnommen. Falls Sie mehr über den PID-Regler wissen möchten, lesen Sie dort den ausführlichen Beitrag und den interessanten, umfangreichen Artikel im deutschen Wikipedia [2] über Regler.

Erfahrungen

Erfahrungen mit dem PID-Regler ergaben einige Änderungen bei den Parametern Kp, Ki und Kd. Nun setzt der Regler sanft ein und der Motor läuft bei Erreichen der Solltemperatur noch ein wenig nach. Die Trägheit des Motors erzeugte vor dem Anlauf bei kleinen PWM-Werten ein Pfeifen desselben, ebenso, sobald die Solltemperatur erreicht wurde und der Motor sich bereits abgeschaltet hat. Der Regler erzeugt dann ab und zu geringe PWM-Werte, die der Motor nicht in Drehung umsetzen kann und pfeift stattdessen. Um das zu vermeiden, wurde der Ausgang des Reglers mit einer simplen Anweisung korrigiert. Die folgende Zeile aus dem Arduino-Sketch befindet sich in der Funktion regeln():

if(Output < 50) Output = 0;

Erklärung: Der von mir verwendete, alte PC-Lüfter (DC 12V) läuft bei einem PWM-Wert von 80 zuverlässig an. Dieser Wert ist abhängig vom Motor und der Motorspannung. Passen Sie bei Bedarf den Wert von 50 Ihrem Motor an. In diesem Fall werden alle PWM-Werte kleiner 50 zu Null gesetzt. Ein PWM-Wert von Null führt zu keinerlei Spannung am Motor, er ist komplett ausgeschaltet.

Sie können natürlich auch Motoren mit 24 V oder 36 Volt Gleichspannung anschließen, die maximale Spannung ist von der Wahl des MOSFETS abhängig, schauen Sie im Datenblatt nach der zulässigen Spannung zwischen Drain und Source (Vdss). Beim IRL3705 sind dies 55 V Gleichspannung. Der Amateurfunk ist ein Feld für Versuche. Experimentieren Sie mit den Parametern des PID-Reglers! In der folgenden Zeile sind die Parameter Kp, Ki und Kd als Werte enthalten und können nach ihren Wünschen verändert werden (Kp= 2,5, Ki=0,5, Kd= 0,25).

PID myPID(&Input, &Output, &Setpoint, 2.5, 0.5, 0.25, P_ON_M, REVERSE);

Höhere Werte bedeuten ein aggressiveres Regelverhalten. Viel Spaß beim Ausprobieren. Zurzeit ist der Arbeitsspeicher des Prozessors zu 68% gefüllt und es ist noch viel SRAM für Variablen frei. Platz für Veränderungen und Erweiterungen ist also vorhanden. So kann man das Preogramm als Vorlage für völlig andere Steuerungen ansehen, die Last muss kein Motor sein. Auch ein Heizbett oder eine Kühlung sind denkbar.

Das Arduino-Programm wurde mit der Arduino-IDE Version 1.8.3 kompiliert.

Literatur/Verweise:

[1] Erläuterung PID-Regler: https://forum.arduino.cc/index.php?topic=433030.0

[2] Wikipedia: Regler: https://de.wikipedia.org/wiki/Regler


Download von Dateien zu diesem Projekt

Mehr Bilder, das Arduino-Programm, die dazu gehörenden Programmbibliotheken (Libraries) und weitere Informationen stehen zum Download bereit. Und hier geht es zum Download.

sh2019