Elektronik_Header_3LŘftersteuerung mit ESP-01

 

L├╝ftercontroller

Das Battery Management System (BMS) f├╝r meinen Rasenm├Ąherakku muss gek├╝hlt werden, damit der Lade- und Balancevorgang nicht durch zu hohe Temperatur am BMS unterbrochen wird.

Da die Hauptstromversorgung des Ladeger├Ątes 24 V betr├Ągt, ist es sinnvoll, den notwendigen L├╝fter auf diese Spannung auszulegen, so spart man sich ein weiteres Netzteil nur f├╝r den L├╝fter. In meiner Krabbelkiste fand sich auch tats├Ąchlich noch ein betagter, aber noch nie gelaufener Radiall├╝fter Nidec Gamma 28. Offenbar ist diese Sorte L├╝fter etwas Besonderes, denn Nidec hat f├╝r die Gamma 28 Serie eine eigene Reminiszenz-Seite angelegt, wo einzig ein Datenblatt des L├╝fters abgelegt ist :-)

Wie auch immer, der L├╝fter wird eingebaut, ein ma├čgeschneiderter Luftleitkanal wird mit dem 3D-Drucker erstellt und eine kleine Platine f├╝r den DigiSpark und den MOSFET-Schalter wird designed.

Luftkanal 3D-Ansicht

Hier die Unterlagen zum Luftkanal als DesignSpark mechanical Datei sowie als STL-Datei f├╝r den Ausdruck.


Die Tr├Ągerplatine f├╝r den DigiSpark habe ich mit EAGLE entworfen und auf meiner CNC-Fr├Ąse mit OpenCNCPilot als Steuerungssoftware erstellt.

Das zugeh├Ârige Schaltbild ist unspektakul├Ąr:

BMS_L├╝ftersteuerung         (Click auf das Bild f├╝r gr├Â├čere Darstellung)

Die Platine ├╝bersichtlich:

BMS_L├╝ftersteuerung

Der eingezeichnete Elko ist unn├Âtig und wird nicht best├╝ckt. Der MOSFET Transistor ist ein SMD Typ und sitzt auf der Unterseite der Platine, alle anderen Bauteile sind bedrahtet und werden auf der Oberseite angeordnet.

Die Schaltunterlagen im EAGLE Format stelle ich zur Verf├╝gung.


Dann geht es ans Programmieren.
Einen OneWire Temperatursensor auslesen ist kein Hexenwerk, dazu finden sich viele Beispiele im Netz, den L├╝fter anhand der gemessenen Temperatur per PWM in der Drehzahl einstellen sollte ebenfalls unkompliziert zu bewerkstelligen sein.

Diese Annahmen haben sich prinzipiell als richtig erwiesen, die Steuerung funktioniert sozusagen auf Anhieb.

Leider arbeitet aber die PWM-Erzeugung in der Arduino-Umgebung mit ca. 4 kHz, so dass der L├╝fter im Bereich unterhalb der H├Âchstdrehzahl - im gedachten Einsatzfall also im Prinzip immer - j├Ąmmerlich vor sich hin pfeift. Will man es positiv sehen, muss man die schiere Lautst├Ąrke bewundern, die das Teil von sich gibt, aber das muss auf jeden Fall ge├Ąndert werden.

Im Netz habe ich einen Tipp gefunden, wie man die PWM-Frequenz schneller einstellen kann, aber diese Ma├čnahme ├Ąndert den Timer0. Dieser Timer wird auch f├╝r die Funktion  millis() verwendet, darauf basierende Libraries (z.B. 1wire) funktionieren danach also nicht mehr. Das gilt auch f├╝r zeitabh├Ąngige Funktionen mit millis(), z.B. die klassische Vermeidung von delay().

Wer dennoch damit sein Gl├╝ck versuchen will, ich habe diesen Teil meiner Versuche im Code stehen lassen und per #define auskommentiert.

Der Versuch, den AtTiny mit Spence Kondes "ATTinyCore" mittels

#define TIMER_TO_USE_FOR_MILLIS   1

dazu zu ├╝berreden Timer1 f├╝r millis() zu verwenden hat nicht wirklich funktioniert. Es wird zwar tats├Ąchlich Timer1 f├╝r millis() verwendet, aber das Timing stimmt irgendwie nicht ganz und 1wire l├Ąuft ebenfalls nicht. Vielleicht mein Fehler, das habe ich nicht mehr n├Ąher untersucht.

Letztlich habe ich die PWM-Erzeugung mittels Timer1 dann zu Fu├č erledigt und die sonstigen Einstellungen des Timer0 in Ruhe gelassen. Die PWM arbeitet mit den im Programm gew├Ąhlten Parametern mit 31,5 kHz und der L├╝fter l├Ąuft jetzt, die PWM-Frequenz betreffend, unh├Ârbar.

Das Einsetzen der PWM bei steigender Temperatur wird programmtechnisch verz├Âgert bis der L├╝fter mit der angebotenen PWM auch tats├Ąchlich anlaufen kann. Beim Abk├╝hlen bleibt die PWM l├Ąnger eingeschaltet, der L├╝fter dreht sich jetzt bereits und l├Ąuft auch mit niedrigerer Spannung weiter.

Wichtig: Die PWM des Timer1 arbeitet in der gew├Ąhlten Einstellung mit Pin P1 des AtTiny. Allerdings wird offenbar auch der negierte Ausgang P0 beeinflusst, dieser Pin P0 kann also nicht f├╝r den 1wire-Anschluss benutzt werden, wie ich das in der ersten Version der Schaltung vorgesehen hatte. Daher hat die oben gezeigte Schaltung auch bereits den Ausgabestand V1.1.

Das ausf├╝hrlich kommentierte Listing des Programms in Arduino Syntax stelle ich Interessenten zur Verf├╝gung.


Der L├╝ftercontroller sitzt im Geh├Ąuse neben dem Gebl├Ąse, die 24 V des Netzteils werden ├╝ber Schraubanschl├╝sse zugef├╝hrt, der L├╝fter und der Temperatursensor sind ├╝ber Pfostenstecker bzw. Buchsen angeschlossen.

Temperatursteuerung mit DigiSpark

Den Temperatursensor habe ich mit Kupferfolie auf der Oberseite des BMS befestigt.

Temperatursensor DS18B20

Unter dem hier sichtbaren Alublech sitzen die MOSFETs f├╝r die Balancing-Funktion und heizen dieses Blech direkt und recht schnell auf, obwohl der Balance-Strom auf 280 mA begrenzt ist. Da die Gesamtspannung des zu balancierenden Akku 120 V betr├Ągt, k├Ânnten immerhin ca. 40 W Verlustleistung anfallen, sollten alle Zellen zur gleichen Zeit mit dem Balance-Strom beaufschlagt werden. In der Realit├Ąt sind aber nur wenige bis maximal ca. 60 Prozent aller Zellen gleichzeitig betroffen. Trotzdem steigt die K├╝hlfl├Ąchentemperatur ohne Luftstrom recht schnell auf 60 Grad, dann pausiert das BMS den Balance Vorgang.

 


Besucherzaehler

Besucher seit
25.11.2000

>