Ich habe kürzlich einen neuen Heimserver gebaut, es ist eine Mehrzweckbox, die den größten Teil meiner Infrastruktur aufnehmen wird und auch ein Dateiserver mit vielen Festplatten (und Platz für mehr in der Zukunft) ist. Am Ende bekam ich ein CaseLabs Magnum THW10 für den Fall, der Platz für eine Tonne Zeug hat. Während die Maschine großartig funktioniert und alles tut, was ich brauche, gibt es ein kleines Problem damit. Die Frontventilatoren drehen sich nicht schnell genug.
Die Festplatten sind hinter den vorderen Ansauglüftern montiert und ich möchte sicherstellen, dass sie kühl bleiben. Die gesamte Ausgabe der PWM-Lüfterköpfe auf dem Motherboard, einem ASUS Z10PE-D16, ist an die CPU-Temperaturen gebunden. Aber die CPUs werden im Server nicht wirklich zu heiß, so dass die Gehäuselüfter selten (wenn überhaupt) über ihre Mindestgeschwindigkeit hinausgehen. Meine normale Lösung für dieses Problem ist die Verwendung des Dienstprogramms fancontrol, das Teil von lm_sensors . lm_sensors kann jedoch keine der Lüftersteuerungen auf dem Motherboard erkennen. Ich denke, das liegt daran, dass die Lüftersteuerung vom BMC auf dem Motherboard ausgeführt wird und lm_sensors den BMC nicht unterstützt. Ich konnte keine Option für die Lüftersteuerung in der Weboberfläche des BMC finden, daher bin ich mir nicht sicher. In jedem Fall entschied ich, dass es viel einfacher wäre, nur eine Lüftersteuerung zu bauen, um eine Lüftergeschwindigkeit für die Eingangslüfter manuell einstellen zu können.
Erstellen einer Lüftersteuerung
Der Server verfügt über 8 vordere 120-mm-Lüfter, 1 hinteren 120-mm-Lüfter und 6 obere 140-mm-Lüfter. Da das Motherboard jedoch nur wenige Lüfterköpfe hat, habe ich 2 Silverstone CPF04 powered Splitter. Die vorderen 8 Lüfter sind mit einem Splitter und die oberen 6 Abluftventilatoren mit dem anderen verbunden. Für dieses Projekt wollte ich einfach einen Controller zwischen den 4-poligen Lüfterkopf des Motherboards stecken, mit dem ich das an die Lüfter gesendete PWM-Steuersignal einstellen kann. Dies würde nur Strom vom Motherboard nehmen und einen eigenen unabhängigen PWM-Ausgang erzeugen. Da die Splitter unabhängig voneinander mit Strom versorgt werden, müsste ich mir keine Gedanken über die Weiterleitung der Stromversorgung vom Motherboard zu den Lüftern machen.
Es gibt kommerzielle Lösungen, wie die Noctua NA FC1, die ziemlich nah an dem sind, wonach ich gesucht habe. Das Problem mit dem Noctua-Controller für meinen Anwendungsfall war, dass ich den vollständigen manuellen Modus nicht einstellen konnte, wenn der Motherboard-Header eingesteckt war. Ich könnte ein benutzerdefiniertes Kabel erstellen, an das der PWM-Pin nicht angeschlossen war, aber dann würde ich für eine Reihe von Funktionen bezahlen, die ich eigentlich nicht wollte.
Entwerfen des Controllers
Ich habe bei Google gesucht, um zu sehen, was die meisten Leute taten, weil das Bauen eines Lüftercontrollers kaum eine einzigartige Sache ist. Die meisten Beispiele, die ich fand, bauten eine Schaltung mit einem 555-Timer im astabilen Modus mit einem Potentiometer, um das Tastverhältnis der Ausgangswellenform einzustellen. Also beschloss ich, das Gleiche zu tun. Nachdem ich die Intel-Spezifikation für 4-Draht-PWM-Lüfter gelesen hatte, fand ich meine Designbeschränkungen für den Oszillator heraus. Die Schaltung musste eine Ausgangsfrequenz von ~ 25 kHz haben und bei 5 Volt arbeiten. In Anbetracht dessen habe ich mich für diese Schaltung entschieden:
Es wurde hauptsächlich von den Schaltkreisen entlehnt, die ich über die Suche im Internet nach ähnlichen Projekten gefunden habe. Aber ich musste einige der Komponentenwerte anpassen, um die Lüftersteuerungsspezifikation zu erfüllen.
Von dort entwarf ich eine Leiterplatte für diese Schaltung mit KiCad. Ich habe die Leiterplatte speziell so entworfen, dass sie einfach zu montieren ist und alle Durchgangslochkomponenten verwendet. Während ich es mit oberflächenmontierten Komponenten leicht viel kleiner hätte machen können, wollte ich, dass dies ein gutes Projekt für Leute ist, die gerade erst mit dem Löten beginnen. Dies ist kein sehr komplexes Projekt und ich hatte das Gefühl, dass es Leute geben könnte, die ein ähnliches Bedürfnis danach haben. Aber selbst mit dieser Einschränkung ist das Board mit nur 35 mm x 44 mm immer noch ziemlich klein. (vor allem, weil es eine einfache Schaltung ist.
Alle Designs dafür sind Open Source und finden sich auf meinem Github unter:
https://github.com/mtreinish/pwmcontroller
Zusammenstellen des Controllers
Nachdem ich ein funktionales Design fertiggestellt hatte, schickte ich es an elecrow, um das Board herzustellen. Ein paar Wochen später bekam ich die Boards geliefert. (Ich habe den Versand betrogen, was länger gedauert hat, die Boards wurden in < 1 Woche hergestellt)
Dann habe ich die Komponenten auf die Platine gelötet
Dann habe ich den neuen Controller auf meinem Server installiert und natürlich hat es nicht funktioniert. Also habe ich die Platine zu meiner Bank gebracht und sie mit einem Oszilloskop, einem Banknetzteil und einem Ersatzlüfter getestet. Es stellte sich heraus, dass es zwei Probleme gab. Zuerst wurde der 555-Timer mit 3.8-4.2V anstelle der in der Spezifikation geforderten 5V ausgegeben. Das zweite Problem war, dass der Ausgang auch keine Rechteckwelle war:
Zweiter Versuch
Um die Probleme zu beheben, die ich beim ersten Versuch festgestellt habe, habe ich meine Schaltung leicht geändert und einen Schmitt-Trigger am Ausgang hinzugefügt. Dies hätte drei Vorteile: Es würde die Rechteckwelle bereinigen, die steigenden und fallenden Flanken viel schneller machen und sicherstellen, dass wir einen stabilen 5-V-Ausgang haben. Es ist eigentlich ziemlich lustig, ich entschied mich / erinnerte mich, den Schmitt-Trigger zu verwenden, weil ich eine gefälschte App-Notiz für eine Klasse im College über die Verwendung eines Schmitt-Triggers für das De-Bouncing von Schaltern schreiben musste.
Die Änderung des Schaltplans war ziemlich einfach. Fügen Sie einfach den Schmitt-Trigger zum Ausgang des 555 hinzu und verdrahten Sie ihn dann mit dem Lüfterkopf:
Die einzige Komplikation dazu kam auf dem Board-Layout. Ich konnte keinen einzigen Schmitt-Trigger in einem Durchgangsbohrpaket finden. Der einzige Schmitt-Trigger mit Durchgangsloch, den ich gefunden habe (zugegeben, ich habe keine erschöpfende Suche durchgeführt), war ein 4- oder 6-Weg in einem DIP-14-Paket. Welches wäre bei weitem das größte Paket auf dem Brett. Ich wollte, dass die Leiterplatte einfach, klein und leicht von Hand zu löten ist. Dies bedeutete ursprünglich alles Durchgangsloch, aber mit der Wahl zwischen einem DIP 14 und der Erhöhung der Platinengröße oder einer einzelnen oberflächenmontierten Komponente entschied ich mich für die SMT-Komponenten. Ich konnte einen von TI in einem SOT-23-5-Paket finden, das ehrlich gesagt nicht schwer zu löten ist, es braucht nur ein wenig Geduld. (Vergrößerung hilft)
Nachdem ich das überarbeitete Board-Layout fertiggestellt hatte (ich habe es viel geschrumpft und gleichzeitig aufgeräumt), schickte ich es zum OSH Park, um es herzustellen:
Dann habe ich alles angelötet:
habe ich auf der neuen Platine einen Fehler gemacht; Ich habe vergessen, die Masse vom Motherboard-Anschluss und der 5V-Seite des DC / DC-Wandlers anzuschließen. Nichts, was ein kleiner Bodge-Draht zwischen den Pins 1 und 3 am DC / DC-Wandler nicht reparieren konnte. (das PCB-Design im Git-Repo wurde bereits mit dieser Korrektur aktualisiert) Damit und mit dem neuen Schmitt-Trigger funktionierten die Dinge perfekt:
und wenn ich es jetzt in meinen Server stecke, kann ich die Lüftergeschwindigkeiten sehr einfach steuern.
Fazit
Dieses Projekt hat mir klar gemacht, dass viele der zufälligen Controller und Zubehörteile auf modernen Computer-Motherboards, die wir für selbstverständlich halten und vollständig geschlossene Designs sind. Es gibt keine Dokumentation von ASUS darüber, wie die Dinge auf meinem Server-Motherboard verdrahtet sind oder welche Protokolle sie verwenden (zumindest nicht, die ich finden konnte). Ich fing an, über meine anderen Computer nachzudenken, einschließlich meines Desktops und darüber, wie ich Dinge wie die Lüfter und die Wasserpumpe dort steuere. Es ist die gleiche Geschichte dort; Ich verlasse mich auf das Motherboard (ein ASUS Rampage V Edition 10) gebacken in Hardware und Software. Ich habe es überprüft und lm_sensors kann auch nicht mit der Lüftersteuerung auf dem Desktop sprechen. Im Gegensatz zu meinem Server bietet mir das UEFI des Desktops jedoch die erforderliche Kontrolle, um den Temperatureingang anzupassen und benutzerdefinierte Lüfterkurven festzulegen.
Ich würde mir zwar wünschen, dass diese Designs geöffnet werden, um die Hebelwirkung zu erleichtern, aber mir ist klar, dass sich dies in absehbarer Zeit nicht sehr wahrscheinlich ändern wird. Aber in der Zwischenzeit können wir weiterhin offene Alternativen für die Teile entwickeln, die wir brauchen. Ich arbeite derzeit an einem anderen Lüftersteuerungsprojekt für meinen Desktop, um dies zu beheben. Ich werde einen Multi-Fan-Controller ähnlich wie ein Aquacomputer aquero bauen. Aber, gebaut in einer offenen Art und Weise und mit einer offenen und definierten Schnittstelle. Sie können den Fortschritt dieser Bemühungen hier verfolgen: https://github.com/mtreinish/openpwm Es ist noch sehr früh im Hardware-Design und es wird ein sehr langfristiges Projekt sein, an dem ich in meiner Freizeit arbeite.