Forum: Projekte & Code semi-passiver Betrieb von 4-Pin PWM-CPU-Lüfter


von Michael B. (wabongo)



Lesenswert?

Ich stelle hier ein von mir realisiertes Projekt vor, mit dem der 
PWM-gesteuerte CPU-Lüfter (4-Pin) eines Standard-PC's semi-passiv 
betrieben werden kann.

Die Motivation der Entwicklung kam dadurch, dass ein PC, der im 
Dauereinsatz läuft, nach gut einem Jahr durch einen leisen aber 
störenden Geräuschpegel auf sich aufmerksam machte. Die Ursache lag im 
CPU-Lüfter, der sich mit Staub an Rotor und Kühlrippen zugesetzt hatte, 
und möglicherweise an einer Abnutzung des Lagers. Ich habe den Lüfter 
testweise angehalten und festgestellt, dass die CPU-Gehäuse-Temperatur 
im Idle nur um ca. 5°C anstieg.

Das Projekt richtet sich an Nutzer, die einen Standard Desktop-PC 
betreiben. Für andere Mainboard-Kategorien stehen evtl. besser geeignete 
semi-passive oder komplett passive CPU-Kühlmechanismen zu Verfügung.

Problemstellung:
================
Die verfügbaren Einstellungen für Kühl-Strategien im BIOS (es handelt 
sich bei mir um ein uATX Desktop-Board Asus P8H77-V LE ausgestattet mit 
einer I3-CPU mit 55W TDP) lassen keinen semi-passiven des CPU-Lüfters 
zu, die minimale Drehzahlvorgabe über den PWM-Regler liegt bei 20%. Auch 
mit FanExpert, einer Komponente des Asus-Tools AI_Suite, die unter 
Windows läuft, kann man den Lüfter nicht unter 20% Mindestdrehzahl 
einstellen.

Lösungsansatz:
==============
Ein PWM-Dekoder, der den CPU-Lüfter ab einem bestimmten PWM-Wert 
einschaltet.
- Der Dekoder soll als "in-cable-version" ausgeführt sein, d.h. mit 
4-poliger Buchse und 4-poligem Stecker, womit er zwischen Mainboard und 
CPU-Lüfter gesteckt wird und ggf. auf zukünftige Systeme umziehen kann.
- Die Schaltschwelle des PWM-Wertes soll einstellbar sein.
- Die Schaltschwelle des PWM-Wertes soll Hysterese-behaftet sein, damit 
der Lüfter im Schaltbereich nicht dauernd an- und ausschaltet.
- Wenn der Lüfter ausgeschaltet ist, soll ein Tacho-Signal simuliert 
werden, um ein Lüfter-Warn-Signal des BIOS zu verhindern.
- Wenn der Lüfter eingeschaltet ist, soll er mit der vom Mainboard 
ausgegebenen PWM-Wert laufen.

Schaltung:
==========
Der Schaltplan ist angehängt.

Mit R1, R2, T1 wird eine Hilfsversorgungsspannung von ca. 3,5V erzeugt. 
Diese ist zuerst einmal notwendig, um die Pull-up-Spannung über R3 für 
das PWM-Eingangssignal vom Mainboard zur Verfügung zu stellen, wie sie 
von der Intel-Spezifikation für die PWM-Steuerung gefordert wird [1]. 
Darüber hinaus wird sie als Referenzspannung für die PWM-Auswertung 
durch U1B und U1A verwendet.
U1B ist der Eingangspuffer, hiermit wird das eingehende PWM-Signal 
aufbereitet und über R6 auf C3 zu einer analogen Spannung gewandelt. 
Über R7 wird die vorab genannte Referenzspannung zugeführt. Zu beachten 
ist, dass U1 wie auch U2 keine Operationsverstärker sind sondern 
Komparatoren vom Typ LM393 [2] mit open-collector-Ausgängen.

<Einschub>
Für den Einsatz von Komparatoren gibt es folgende Gründe:
(1) Das PWM-Signal hat eine Nennfrequenz von ca. 25KHz [1]. Die wird von 
einem Standard-OP-Amp schon ein wenig verschliffen, so dass die 
Dimensionierung der Schaltung (R6-R11) in der Entwicklung erschwert 
wird.
(2) Die VOH-Spannung eines OP-Amp ist Temperatur-abhängig [3], wodurch 
die vom PWM-Signal hergeleitete Analog-Spannung ebenso 
Temperatur-abhängig werden würde. Die Verwendung der Referenzspannung 
mit Widerstand R7 verspricht stabiles Verhalten.
(3) Die Ansteuerung des Endstufen-Transistors bzw. dessen zuverlässige 
Abschaltung kann nicht mit einem Standard-OP-Amp realisiert werden, da 
dessen max. VOH bei VCC - 1,5V liegt [3], also oberhalb der 
Basis-Emitter-Spannung des T2.
</Einschub>

Der Schaltungsteil um U1A bildet den Schmitt-Trigger für die 
PWM-Analog-Spannung. Die Einstellung der Schaltschwelle erfolgt mit P1. 
Da der positive wie der negative Eingang des Komparators über R7 und R9 
am selben Spannungspotential hängen, gibt es keine 
Genauigkeitsanforderung an die Referenzspannung. Mittels R11 wird die 
Hysterese erzeugt, sie beträgt 4% (bezogen auf den PWM-Wert). Über T2 
wird der PC-Lüfter eingeschaltet. Wichtig ist hier der Transistortyp. 
Typische Standard-CPU-Lüfter haben eine Stromaufnahme von 200mA, die der 
Transistor verkraften können muss. Außerdem muss die Stromverstärkung 
hoch genug sein, damit der Spannungsabfall über die C-E Strecke klein 
bleibt, der CPU-Lüfter annähernd 12V erhält und der Transistor nicht 
überhitzt [4].

U2A fungiert als Frequenzgenerator, einstellbar über P2 in einem 
Frequenzbereich von ca. 20-50 Hz, das entspricht einer Lüfter-Drehzahl 
von 600-1500 U/min bei 2 Impulsen pro Umdrehung. Diese Frequenz wird 
über U2B in ein Rechteck-Signal gewandelt und auf das Tacho-Signal zum 
Mainboard gegeben. Wenn der CPU-Lüfter eingeschaltet ist, wird über D5 
der positive Eingang von U2B übersteuert, womit der Ausgang inaktiv wird 
(wie oben erwähnt: es handelt sich Komparatoren mit 
open-collector-Ausgängen) und das Tacho-Signal vom Lüfter aktiv wird.

Für D2 sollte eine Schottky-Diode mit geringem Spannungsabfall verwendet 
werden, um eine sichere PWM-Ansteuerung des Lüfters zu gewährleisten.

Anmerkungen:
============
D1 ist eigentlich überflüssig, ist Schaltungs-historisch bedingt.
D4 dito.
R13 + R13A kann natürlich durch einen einzelnen Widerstand ersetzt 
werden. Wert 4,7k oder 5,6k ist ok.
Die Einstellung der simulierten Tacho-Signal-Frequenz hat sich als 
ziemlich überflüssig erwiesen. P2 weglassen und R19 auf 10k-15k setzen. 
Stattdessen ggf. Hysterese einstellbar machen durch R11=100k in Serie 
mit Trimmer(100k).
C3 und C4: 1uF, wenn Elkos verwendet werden, Polarität beachten.
Ein Abblockkondensator 100nF für die 12V Versorgung würde noch gut auf 
die Platine passen.

Anmerkungen - KRITISCH:
=======================
Das Tacho-Ausgangssignal des Lüfters bekommt immer - also auch bei 
ausgeschaltetem Lüfter - über den Pull-up Eingang des Mainboards die 
dortige Pull-up-Spannung zugeführt. Diese hat Intel in [1] nicht 
spezifiziert. Ist jedoch egal ob dies nun 3V, 5V oder 12V sind, 
jedenfalls liegt sie am ausgeschalteten Lüfter an. Nach heute üblicher 
Schaltungstechnik wird im Lüfter der Tacho-Ausgang durch einen n-Fet 
oder npn-Transistor in open-drain bzw. open-collector verbaut sein, 
wissen tun das jedoch nur die jeweiligen Lüfter-Hersteller. Für eine 
ganz sorgenfreie Benutzung des PWM-Dekoders müsste man das Tacho-Signal 
des Lüfters über einen Transistor durch die geschaltete 
Versorgungsspannung freischalten.

Aufbau:
=======
Den Aufbau habe ich auf Lochrasterplatine realisiert. 
Layout-Entwurfs-Bilder hängen an. Die dünnen Leiterbahnen müssen mit 
Drahtbrücken (Litze) realisiert werden. Achtung, eine Drachtbrücke 
befindet sich unter R2 (zuerst bestücken).

Da ich nichts passendes zur Hand hatte, habe ich Flachbandkabel als 
Anschlusskabel verwendet. Wie auf dem (leider miserablen) Foto zu 
erahnen ist mir die Kabelmarkierung verkehrt geraten (rot markierte 
Litze = Pin 4). Als Anschlussstecker habe ich einfache 
Platinensteckverbinder (Stiftleiste und Buchsenleiste) verwendet und die 
Flachbandkabel-Anschlüsse ordentlich mit Schrumpfschlauch zur Isolierung 
angelötet. Ein 4-Pin PWM Verlängerungskabel ist bestellt und wird 
demnächst die vorhandene Kabelage ersetzen, damit ist dann auch die 
Verpolungssicherheit gegeben. PWM-Kabel gibt es in den Längen 
15,30,60,70 cm, nimmt man die 60 oder 70 cm, kann man sie in der Hälfte 
durchtrennen und als Anschlusskabel werwenden.

P1 (Einstellung der PWM-Schaltschwelle) und P2 (simuliertes Tacho-Signal 
bei ausgeschaltetem Lüfter) sind orientiert: nach links drehen = 
kleinerer Wert.

Montage-Bohrungen sind im Layout vorgesehen. Die Platine passt z.B. in 
ein Gehäuse KS410. Bei der Montage z.B. mit metallischen Standbolzen ist 
zu beachten, dass die Verschraubung keinen Kontakt zu benachbarten 
Kontakten hat, ggf. isolieren mit Nylon-U-Scheiben.

Für die LED habe ich eine Fassung aus 2 gedrehten Pins einer 
IC-Sockelleiste verwendet. Wenn die Schaltung in das Gehäuse eingebaut 
wird, werden die Pins der LED passend abgelängt, so dass die LED gerade 
oben herausschaut - da muss ich nicht noch einmal den Lötkolben bemühen.

Inbetriebnahme:
===============
Mit Labornetzteil, Oszi und Frequenzgenerator habe ich die Schaltung in 
Betrieb genommen (nein, nicht gleich an den PC angeschlossen)!
Ganz fehlerfrei lief die Schaltung auf Anhieb nicht, Eine Lötverbindung 
auf der Platinenunterseite fehlte, ebenso der Entwicklungsfehler um 
R13/R13A, sowie ein weiterer über den ich mich ausschweige, sonst wird 
das peinlich. Nach Behebung der Fehler lief die Schaltung in den 
erwarteten Messwerten.

Lüfter:
=======
Demnächst baue ich einen Artic Alpine 11 Rev.2 ein. Dieser hat speziell 
in Bezug auf passive Kühlung einige Vorteile:
(1) parallele Kühlrippen - besserer Kamineffekt bei passiver 
Luftzirkulation
(2) größer (2HE) - mehr Kühlfläche
(3) größerer Kühlrippenabstand

Ergebnisse:
===========
Zur Zeit ist der Rechner noch mit dem zugestaubten originalen 
Intel-boxed Lüfter mit radialen Lamellen ausgestattet. Die CPU-Case 
Temperatur beträgt im Idle stabil 42°C bei ausgeschaltetem Lüfter und 19 
°C Umgebungstemperatur. Bei 46°C schaltet der CPU-Lüfter ein, bei 43°C 
aus. Mit FanExpert kann ich das Schaltverhalten für den CPU-Lüfter 
verändern. Mit P1 habe ich den Schaltwert der PWM-Erkennung auf ca. 30% 
eingestellt, d.h. unter diesem Bereich ist die Kühlung passiv, darüber 
ist sie dynamisch wie gehabt.

Das Ganze funktioniert so, wie ich mir das vorgestellt habe.

Maßnahmen zur Wahrung potentieller akademischer Titel:
======================================================
[1] Intel, "4-Wire Pulse Width Modulation (PWM) Controlled Fans 
Specification", Revision 1.3
[2] Fairchild Semiconductor, "LM2903/LM2903I,LM393/LM393A,LM293/LM293A", 
Rev. 1.0.3
[3] Texas Instruments, 
"LM158,LM158A,LM258,LM258A,LM358,LM358A,LM2904,LM2904V", SLOS068P
[4] Philips Semiconductors, "BC327", 1999 Apr 15

Materialkosten:
===============
10 Elektronik, geschätzt
 5 Lochrasterplatine
10 Gehäuse
 5 PWM-Verlängerungskabel 60/70cm
----
30 ca. gesamt

Nachbau:
========
Mich hat der Aufbau der Platine inklusive Test und Fehlersuche und 
-Korrektur knapp einen Tag gekostet. Um die Schaltung fehlerfrei auf 
Lochraster aufzubauen, ist schon eine gehörige Portion Konzentration 
notwendig. Ohne vorherigen Test mit entsprechendem Equipment (s.o. 
"Inbetriebnahme") würde ich das niemandem empfehlen, der seinen PC lieb 
hat.

Wer allerdings die Ausstattung hat und die Beschreibung und die 
kritischen Anmerkungen gelesen und verstanden hat, der kann einen 
leistungsfähigen Rechner mit semi-passiver CPU-Kühlung ausstatten.

von flo (Gast)


Lesenswert?

Nettes Projekt, tolle Doku. Habe das gleiche mit meiner Grafikkarte vor

von Michael B. (wabongo)


Angehängte Dateien:

Lesenswert?

Nachdem mein Projekt nun seit 3 Wochen im Betrieb ist und zuverlässig 
funktioniert, habe ich einen Belastungstest durchgeführt, um die 
Tauglichkeit des semi-passiven Kühlkonzepts zu überprüfen. Dazu habe ich 
mit AIDA64 einen Sytem Stability Test durchgeführt und aufgezeichnet. 
Den Screenshot über die Temperaturen und den Lüfter habe ich zur 
Übersichtlichkeit in einem Bild eingefügt.

Das System lief vor Testbeginn einige Stunden im Idle-Zustand. Mit Start 
des Belastungstests steigt die Core-Temperatur unmittelbar um 7K, danach 
heizt sich die CPU weiter langsam bis 66°C auf (im Screenshot: graue 
Kurve). Der Aux-Sensor (rot), der unter der CPU auf dem Mainboard sitzt, 
zeigt ebenfalls eine steigende Kurve an, allerdings etwas flacher. Mit 
Erreichen der 51°C-Marke des Aux springt der CPU-Lüfter an, woraufhin 
die Core-Temperatur sofort absinkt, während der Aux-Sensor sich etwa 30 
Sekunden verzögert. Bei 46°C des Aux schaltet der CPU-Lüfter wieder aus 
(die 705 RPM simulieren einen laufenden Lüfter, damit die 
BIOS-Warnfunktion nicht anspringt; s. Projekt-Beschreibung oben). Mit 
fortlaufendem Stresstest schwingt sich das System ein, die 
Spitzen-Core-Temperatur sinkt im 2. bzw. 4. Zyklus um 1°C bzw. 2°C. Die 
Mainboard-Temperatur schwingt ebenfalls: Wenn der CPU-Lüfter anspringt, 
wird die vom CPU-Kühler abgeführte Wärme vom Motherboard-Sensor 
(verzögert) registriert.

Den Belastungstest habe ich auch mit Prime95 durchgeführt, da sind die 
Anstiegskurven etwas steiler, statt 3,5 Min. mit Aida erhalte ich ca. 
2,5 Min. unter Prime95. Kommt natürlich auf die Stresstest-Konfiguration 
an, ich habe jeweils die Standardvorgaben beibehalten.

Raumtemperatur beim Test : 19°C.
Im Sommer stellen sich auch gerne 30°C ein, bin mal gespannt, ob der 
Lüfter dann auch im Idle oder unter geringer Belastung anspringt.

Verwendeter Lüfter : Arctic Alpine 11 Rev.2
Der Lüfter hat ein ziemlich raues Laufgeräusch, im Dauerlauf wäre er mir 
nicht erträglich. Mit der Lüftersteuerung erhalte ich ein akkustisches 
Feedback, wenn der Rechner belastet wird. Bisher ist mir das nur beim 
Windows-Update oder im Stresstest vorgekommen.

CPU-Type : i3-3240 (Ivy-Bridge)
Laut openhardwaremonitor genehmigt sich die CPU-Package (ohne Cores) 
stets mindestens 19W. Ich glaube, neuere CPU-Generationen kommen mit 
geringerer Leerlaufleistung aus, mit denen die Lüftersteuerung noch 
besser zusammen funktionieren würde. Ich kann mir vorstellen, dass im 
Laufe des Jahres 2016 Standardlösungen für semi-passiv gekühlte 
Desktop-Rechner verfügbar sein werden.

Anbei ebenfalls ein Screenshot der Lüfter-Steuerung von Asus. Sie ist so 
konfiguriert, dass bei 50°C (Aux-Sensor) die 30% PWM erreicht werden 
(Einschaltpunkt des PWM-Dekoders).

von Fabian F. (fabian_f55)


Lesenswert?

Als Analoge spielerei ganz nett, aber wäre das Problem nicht mit einem 
Attiny und 30 Zeilen code gegessen?

von Michael B. (wabongo)


Lesenswert?

> wäre das Problem nicht mit einem Attiny und 30 Zeilen code gegessen?

Eine uC-Lösung habe ich mir auch überlegt, da ich schon einige Projekte 
mit Pic's realisiert hatte. Das Problem ist, da gibt es hunderte 
Derivate, und die 3-4 Typen, die ich bisher verwendete, können zwar sehr 
umfangreiche und genaue PWM-Ausgaben erzeugen, jedoch nicht erfassen. 
Und eine Port-Abfrage scheitert an der Auflösung: die PWM-Frequenz 
beträgt 25 KHz, entspricht 40us. Bei einer gewünschten Auflösung von 1% 
errechnen sich 0,4 us. Darin ist noch kein Oversampling enthalten (nach 
Abtast-Theorem mindestens Faktor 2 = 0,2us).

Gegenfrage: bietet ein Attiny entsprechende periphere Unterstützung an?

von Fabian F. (fabian_f55)


Lesenswert?

Sehe ich zwei Möglichkeiten.
Zum einen interessiert eigentlich nur das Tastverhältnis, nicht die 
Frequenz. Über einen Widerstand und einen Kondensator kann man einfach 
das PWM-Signal in einen Spannungswert umwandeln und den mit einem ADC 
einlesen.

Alternativ würde ich einen XMEGA nehmen.
Fallende Fanke: 2x 32MHz-Timer starten (Interrrupt)
Steigende Flanke Timer1 stoppen(interrupt)
Fallende Flanke Timer2 stoppen (interrupt)
->Zählerstand im 
Timerregister1/(Timerregister1+Timerregister2)->Tastverhältnis
Auflösung ca. 31ns

von Michael B. (wabongo)


Lesenswert?

> Über einen Widerstand und einen Kondensator kann man einfach
> das PWM-Signal in einen Spannungswert umwandeln ...

Das PWM-Signal vom PC ist ein Open-Collector Ausgang. Mit einem 
Eingangswiderstand, einem Pull-up-Widerstand und einem Kondensator kann 
man daraus einen Analogwert für einen ADC-Eingang ableiten. Der ist aber 
gar nicht linear zur PWM, da durch den Eingangswiderstand nur während 
der low-Phase Strom fließt, während der Pull-up-Widerstand stets wirkt. 
Hier wäre eine rechnerische Kompensation vonnöten oder eine Tabelle. Der 
Low-Ausgangspegel des PWM-Sganls ist lediglich spezifiziert als <=0,8V 
(ist im originalen Beitrag unter [1] aufgeführt). Bei einer angenommenen 
ADC-Referenz-Spannung von 5V sind das 16%. Ohne Aufbereitung des 
Eingangssignals unter den angegebenen Spezifikationen unzulänglich.

> Alternativ würde ich einen XMEGA nehmen.

Ja, mit einem 32 MHZ-Proz würde das in der von dir skizzierten Art und 
Weise funktionieren. Eigentlich würden sogar 10 MHz ausreichen. Bei 
einer Befehlszeit von 100 ns und einem Jitter von 2-3 Befehlszyklen für 
die Interrupt-Latenz käme man auf 0,3us Auflösung. Damit kann das 25 
KHz-PWM-Signal bis auf 1-2% aufgelöst werden. Mit einem 8-Pin-uC in 
DIP-Bauform eine echte Alternative, auch kostenmäßig. (LM393 kostet bei 
Kessler 0,19 das Stück, die Widerstände und Dioden ca. 0,10/Stk., wenn 
der Bastler sie nicht sowieso schon in der Schublade hat). Den XMega 
scheint es nur in BGA oder ähnlichen Sub-Miniatur-Ausführungen zu geben, 
ein Selbstbau-Projekt daher nur auf Modul-Basis sinnvoll.

[Edit]
Ich habe gerade gesehen, dass es den ATMega doch in PDIL-28 Ausführung 
gibt (hat etwas gedauert, habe mich mit Atmel uC's bisher noch nicht 
beschäftigt). Ein ATtiny 25 täte es sogar auch?

: Bearbeitet durch User
von Fabian F. (fabian_f55)


Lesenswert?

Für die TQFP-Packages gibts reichlich Adapter um auf DIL zu kommen:
http://www.amazon.de/Adapterplatine-QFP32-QFP-32-Adapter-Raster/dp/B00IU6ZYKM/ref=sr_1_1?ie=UTF8&qid=1451307408&sr=8-1&keywords=32tqfp

Ich benutze deswegen eigentlich immer die gleiche Gehäuseform, egal ob 
für Basteleien oder Richtige Projekte. Machts einfacher Layouts und Code 
von einem Projekt in nächste zu übernehmen.

von Michael B. (wabongo)


Lesenswert?

> ... benutze immer die gleiche ... einfacher ... zu übernehmen.

So geht es mir auch, daher bin ich seit einigen Jahren bei einigen 
PIC-Typen geblieben. Definitiv ein Nachteil der PIC's gegenüber den 
Atmels ist, dass sie pro Befehl 4 Maschinenzyklen benötigen, daher habe 
ich die Entscheidung für eine uC-Lösung beim Entwurf (diese Projekts) 
frühzeitig verworfen.

Das heutige kurze Überfliegen einiger Atmel-Datenblätter lässt mich 
jedoch überlegen, ob ich in Zukunft auch teilweise Atmel einsetze.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.