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.
Nettes Projekt, tolle Doku. Habe das gleiche mit meiner Grafikkarte vor
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).
Als Analoge spielerei ganz nett, aber wäre das Problem nicht mit einem Attiny und 30 Zeilen code gegessen?
> 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?
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
> Ü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
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.
> ... 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.