jeg har for nylig bygget en ny hjemmeserver, det er en multifunktionsboks, der holder det meste af min infrastruktur og også er en filserver med mange harddiske (og plads til mere i fremtiden) alle disse drev betød, at dette endte med at blive en meget stor maskine, så der var plads til at sætte dem alle. Jeg endte med at få en CaseLabs Magnum THV10 til sagen, som har plads til masser af ting i den. Mens maskinen arbejder godt og gør alt, hvad jeg har brug for det, er der et lille problem med det. De forreste fans spinder ikke hurtigt nok.
harddiskene er monteret bag de forreste indtagsventilatorer, og jeg vil sikre mig, at de holder sig kølige. Alle output fra fan headers på bundkortet, en ASUS 10PE-D16, er bundet til CPU temperaturer. Men CPU ‘ erne bliver ikke rigtig for varme på serveren, så case fans sjældent (hvis nogensinde) går over deres minimumshastighed. Min normale løsning på dette problem er at bruge fancontrol Utility, som er en del af lm_sensors. Lm_sensors er dog ikke i stand til at registrere nogen af ventilatorcontrollerne på bundkortet. Jeg tror, det skyldes, at ventilatorstyringen udføres af BMC på bundkortet, og lm_sensors understøtter ikke BMC. Jeg kunne ikke finde en mulighed for fan control i BMC ‘ s internetgrænseflade, så jeg er ikke sikker. Uanset hvad besluttede jeg, at det ville være meget lettere at bare bygge en ventilatorcontroller for manuelt at indstille en blæserhastighed for inputventilatorerne.
opbygning af en Fan Controller
serveren har 8 forreste 120mm fans, 1 bageste 120mm fan, og 6 Top udstødning 140mm fans installeret. Men fordi bundkortet kun har et par fanoverskrifter, har jeg 2 Silverstone CPF04-drevne splittere. De forreste 8 ventilatorer er forbundet til den ene splitter og de 6 øverste udstødningsventilatorer til den anden. Til dette projekt ville jeg bare holde en controller mellem bundkortet 4 pin fan header, der gør det muligt for mig at justere PMM-styresignalet sendt til fansen. Dette ville kun tage strøm fra bundkortet og generere sin egen uafhængige PMM-udgang. Da splitterne er uafhængigt drevet, behøver jeg ikke bekymre mig om at dirigere strøm fra bundkortet til fansen.
der er kommercielle løsninger derude, som Noctua NA FC1, som er temmelig tæt på det, jeg ledte efter. Problemet med Noctua-controlleren til min brugssag var, at det ikke ville lade mig indstille fuld manuel tilstand, hvis bundkortets overskrift var tilsluttet. Jeg kunne oprette et brugerdefineret kabel, der ikke havde tilsluttet PM-stiften, men så ville jeg betale for en masse funktioner, som jeg faktisk ikke ønskede.
design af controlleren
jeg søgte på google for at se, hvad de fleste mennesker gjorde, fordi opbygning af en fan-controller næppe er en unik ting. De fleste eksempler, som jeg fandt, byggede et kredsløb med en 555 timer i astable-tilstand med et potentiometer for at justere driftscyklussen for udgangsbølgeformen. Så jeg besluttede at gøre det samme. Efter at have læst Intel-specifikationen for 4-tråd-fans fandt jeg ud af mine designbegrænsninger for oscillatoren. Kredsløbet skulle have en udgangsfrekvens på ~25 KHS og fungere ved 5 volt. I betragtning af dette bosatte jeg mig på dette kredsløb:
det blev for det meste lånt fra de kredsløb, jeg fandt via at søge på internettet efter lignende projekter. Men jeg var nødt til at justere nogle af komponentværdierne for at opfylde fan control spec.
derfra designede jeg et PCB til dette kredsløb ved hjælp af KiCad. Jeg har specielt designet printkortet til at være let at montere, ved hjælp af alle gennemgående hulkomponenter. Mens jeg let kunne have gjort det meget mindre ved hjælp af overflademonteringskomponenter, ønskede jeg, at dette skulle være et godt projekt for folk, der lige var begyndt at lodde. Dette er ikke et meget komplekst projekt, og jeg følte, at der måske var mennesker derude med et lignende behov for det. Men selv med denne begrænsning er brættet stadig ret lille på kun 35 mm 44 mm. (mest fordi det er et simpelt kredsløb.
alle designs til dette er open source og kan findes på min github på:
https://github.com/mtreinish/pwmcontroller
ved at sammensætte controlleren
efter at have afsluttet et funktionelt design sendte jeg det ud til Elek for at få brættet fremstillet. Et par uger senere fik jeg bestyrelserne leveret. (Jeg billigede ud på forsendelsen, hvilket gjorde det længere, brædderne blev fremstillet i < 1 uge)
så lodde jeg komponenterne på brættet
så installerede jeg den nye controller på min server, og det fungerede selvfølgelig ikke. Så jeg tog printkortet til min bænk og testede det med et oscilloskop, en bænk strømforsyning og en ekstra ventilator. Det viser sig, at der var to problemer. For det første udsendte 555-timeren ved 3,8-4,2 V i stedet for den 5V, der blev krævet i spec. Det andet problem var, at udgangen heller ikke var en firkantet bølge:
andet forsøg
for at rette de problemer, jeg fandt fra det første forsøg, ændrede jeg mit kredsløb lidt og tilføjede en schmitt-trigger på output. Dette ville have tre fordele: det ville rydde op i firkantbølgen, gøre de stigende og faldende kanter meget hurtigere, og det ville sikre, at vi har en Stabil 5V-udgang. Det er faktisk ret sjovt, jeg besluttede / huskede at bruge schmitt trigger, fordi jeg var nødt til at skrive en falsk app note til en klasse på college om at bruge en schmitt trigger til at skifte de-bouncing.
modifikationen af kredsløbsskemaet var ret simpelt. Bare tilføj schmitt-udløseren til udgangen af 555 og led den derefter til ventilatorhovedet:
den eneste komplikation til dette kom på tavlen layout. Jeg kunne ikke finde en enkelt Schmitt-trigger i en gennemgående hulpakke. Den eneste gennemgående hul schmitt udløser, som jeg fandt (givet jeg ikke gjorde en udtømmende søgning) var en 4 eller 6 måde i en DIP-14 pakke. Hvilket ville være langt den største pakke i bestyrelsen. Jeg ønskede, at PCB ‘ en skulle være enkel, lille og let at hånd lodde. Dette betød oprindeligt hele hullet, men med valget mellem en DIP 14 og forøgelse af pladestørrelsen eller en enkelt overflademonteringskomponent valgte jeg at gå med SMT-komponenterne. Jeg var i stand til at finde en fra TI i en SOT-23-5 pakke, som ærligt ikke er svært at lodde, det tager bare lidt tålmodighed. (forstørrelse hjælper)
efter at have afsluttet det reviderede bordlayout (jeg skrumpede det meget ned og rensede tingene på samme tid) sendte jeg det ud til OSH Park for at blive fremstillet:
så loddede jeg alt på:
lavede jeg en fejl på det nye bord; jeg glemte at forbinde jorden fra bundkortstikket og 5V-siden af DC/DC-konverteren. Intet en lille bodge-ledning mellem stifter 1 og 3 på DC/DC-konverteren kunne ikke løse. (pcb-designet i git repo er allerede opdateret med denne korrektion) med det, og de nye schmitt trigger-ting fungerede perfekt:
og sætte det i min server nu Kan jeg styre blæserhastighederne meget nemt.
konklusion
dette projekt fik mig til at indse, at mange af de tilfældige controllere og tilbehør på moderne computer bundkort, som vi tager for givet og er helt lukkede designs. Der er ikke nogen dokumentation fra ASUS om, hvordan tingene på mit server bundkort er tilsluttet eller de protokoller, de bruger (i det mindste ikke, at jeg kunne finde). Jeg begyndte at tænke på mine andre computere, herunder mit skrivebord, og hvordan jeg styrer ting som fans og vandpumpe der. Det er den samme historie der; Jeg stoler på bundkortets (en ASUS Rampage V Edition 10) bagt i udstyr og programmer. Jeg kontrollerede, og lm_sensors kan heller ikke tale med ventilatorcontrolleren på skrivebordet. Men i modsætning til min server giver skrivebordets UEFI mig det nødvendige niveau af kontrol for at justere temperaturindgangen og indstille brugerdefinerede blæserkurver.
selvom jeg gerne vil se disse designs åbnet for at gøre det lettere at udnytte, er jeg klar over, at det ikke er meget sandsynligt at ændre sig snart. Men i mellemtiden kan vi fortsætte med bare at bygge åbne alternativer til de stykker, vi har brug for. Jeg arbejder i øjeblikket på et andet fan controller-projekt til mit skrivebord for at prøve at begynde at adressere dette. Jeg har tænkt mig at bygge en multi-fan controller ligner noget som en akvacomputer akvero. Men bygget på en helt åben måde og med en åben og defineret grænseflade. Du kan følge den igangværende indsats her: https://github.com/mtreinish/openpwm det er stadig super tidligt i maskinens design, og det bliver et meget langsigtet projekt, jeg arbejder på i min fritid.