Durch Zufall fand ich im Internet eine Schaltung für eine Lüftersteuerung mittels AVR, welche neben der Temperaturregelung auch eine Anzeige der Temperatur beinhaltet. Die Messung erfolgt tels NTC, die Drehzahl-Regelung mittels PWM wird mittels AnalogComperator mit 4 Zonen(Vergleiche) realisiert.
Obwohl obige Schaltung auch "nur" für 12V ausgelegt war, habe ich die Idee für mein Projekt weiterentwickelt und mit folgenden Eckpunkten designed:
Herausgekommen ist eine kleine Schaltung, die an Einfachheit wohl kaum noch zu unterbieten ist. Basis ist ebenfalls ein AVR 90S2313 (oder auch ATTiny2313). Ihm zur Seite steht ein LM75 Temperatursensor, welche die Temperaturwerte über I2C "im Klartext" an den AVR meldet. Bei dem Preis war es mir zu doof, mich mit dem AnalogComperator und den Kennlinien der NTCs rumzuärgen, da die Genauigkeit des LM75 für den Einsatzzweck ausreichend ist. RX/TX werden bei Bedarf und bei der Erstprogrammierung mit einem RS232-Schnittstellenwandler (wie auf dem STK500) verbunden. Ein Port ist für die PWM-Ausgabe über einen Transistor zuständig. Die verbleibenden Ports des AVR werden für die 7/3 Bargraph-Anzeige verwendet. Der Quarz ist eigentlich nicht nötig, aber für eine sichere serielle Verbindung habe ich ihn doch genommen.
Das PWM-Signal wird durch einen Leistungstransistor verstärkt, da bei blockierenden Rotor schon mal 200mA vom Lüfter gezogen werden. Außerdem wird das PWM-Signal durch einen Elko geglättet.
Bild1 Schaltung
Ursprünglich wollte ich auch noch die reale Drehzahl des Lüfters mit einen Hallsensor einlesen, aber dafür hätte ich den Lüfter modifizieren, einen weiteren Draht ins Gehäuse führen und einen Port der Anzeige Opfern müssen.
Bei der Programmierung muss man darauf achten, das die PWM-Spannung nicht zu niedrig wird, so das der Rotor stehen bleibt, weil man sonst u.U. den Rotor nur mit der vollen Spannung wieder zum laufen bringt. Deshalb habe ich im Programm einen Minimalwert vorgesehen, der nicht unterschritten werden soll.
Zunächst muss man eine Solltemperatur festlegen, die nicht überschritten werden soll, z.B. 40 °C. Das ist der Mittelwert und entspricht auf der Bargraph-Anzeige der Grenze zwischen den roten und den grünen LEDs. Das PWM-Signal wird durch Timer0 erzeigt und hat damit eine Range von 0-255/255 Steps. Durch Tests wurde die Begrenzung nach unten( Minimalwert s.o.) mit 63 festgelegt. Beim Start des Prozessors wird ersteinmal von Vollast ausgegangen, d.h. 100% Drehzahl. liegt die Aktuelle Temperatur nun unter dem Schwellwert, wird das PWM-Verhältnis in Schritten von 4 Steps vergrößert, so das die Spannung am Elko und damit die Drehzahl sinkt. Das wird so lange wiederholt, bis entweder der Mindestwert erreicht wird oder die Temperatur wieder überschritten wird.
Das ganze wurde mit einer Lochrasterplatine klassisch realisiert und in ein kleines Gehäuse eingebaut. Der LM75 wurde auf eine SMD-DIL8 Adapterplatine mit dem Blockkondensator und den Kabeln gelötet und mit Schrumpfschlauch umwickelt durch die Bodenöffnung für den Lüfter im Rahmen in das Gehäuse gefädelt.
Bild2 Lochraster-Platine
Bild3 Einbau des Sensors in das Gerät.Bild4 Fertige Lüftersteuerung
Download:
Schaltplan, Board und Quellcode auf GitHub (zur privaten Nutzung)