jeg har nylig bygget en ny hjemmeserver, det er en multipurpose boks som vil holde det meste av infrastrukturen min og er også en filserver Med mange harddisker (Og plass til mer i fremtiden) alle disse stasjonene betydde at dette endte med å bli en veldig stor maskin, så det var plass til å sette dem alle. Jeg endte opp med Å få En CaseLabs Magnum THW10 for saken, som har plass til massevis av ting i den. Mens maskinen fungerer bra og gjor alt jeg trenger det til, er det et lite problem med det. De fremre fansen spinner ikke fort nok.
harddiskene er montert bak de fremre inntaksviftene, og jeg vil sørge for at de holder seg kule. All utgang FRA pwm-viftehodene på hovedkortet, EN ASUS Z10PE-D16, er knyttet til CPU-temperaturene. Men Cpuene blir egentlig ikke for varme på serveren, så saken fans sjelden (hvis noen gang) går over deres minimumshastighet. Min normale løsning på dette problemet er å bruke fancontrol utiltity som er en del av lm_sensors. Lm_sensors kan imidlertid ikke oppdage noen av viftekontrollene på hovedkortet. Jeg tror dette skyldes at viftekontrollen er gjort AV BMC på hovedkortet, og lm_sensors støtter IKKE BMC. Jeg kunne ikke finne et alternativ for viftekontroll i BMCS webgrensesnitt, så jeg er ikke sikker. Uansett bestemte jeg meg for at det ville være mye lettere å bare bygge en viftekontroller for å kunne manuelt sette en viftehastighet for inngangsviftene.
Bygge En Vifte Kontrolleren
serveren har 8 foran 120mm fans, 1 bak 120mm vifte, og 6 topp eksos 140mm fans installert. Men fordi hovedkortet bare har noen få viftehoder, har jeg 2 Silverstone CPF04 drevne splittere. Front 8 fans er koblet til en splitter og 6 topp eksos fans til den andre. For dette prosjektet ville jeg bare holde en kontroller mellom hovedkortet 4 pin fan header som gjør at JEG kan justere pwm kontrollsignal sendt til fansen. Dette ville bare ta strøm fra hovedkortet og generere sin egen uavhengige pwm-utgang. Siden splitterne er uavhengig drevet, trenger jeg ikke å bekymre meg for rutekraft fra hovedkortet til fansen.
det finnes kommersielle løsninger der ute, som Noctua NA FC1, som er ganske nær det jeg lette etter. Problemet Med Noctua-kontrolleren for min bruk var at det ikke ville la meg sette full manuell modus hvis hovedkorthodet ble plugget inn. Jeg kunne lage en tilpasset kabel som ikke hadde PWM-pinnen tilkoblet, men da ville jeg betale for en rekke funksjoner som jeg egentlig ikke ville ha.
Designe kontrolleren
jeg søkte litt på google for å se hva de fleste gjorde fordi å bygge en viftekontroller er neppe en unik ting. De fleste eksempler som jeg fant bygget en krets med en 555 timer i astabil modus med et potensiometer for å justere driftssyklusen til utgangsbølgeformen. Så jeg bestemte meg for å gjøre det samme. Etter å ha lest Intel-spesifikasjonen for 4 wire PWM-fans, fant jeg ut mine designbegrensninger for oscillatoren. Kretsen måtte ha en utgangsfrekvens på ~25 kHz og operere ved 5 volt. Gitt dette slo jeg meg på denne kretsen:
Det var for det meste lånt fra kretsene jeg fant via å søke på internett for lignende prosjekter. Men jeg måtte justere noen av komponentverdiene for å møte fan control spec.
Derfra designet jeg EN PCB for denne kretsen ved Hjelp Av KiCad. JEG designet SPESIELT PCB for å være enkel å montere, ved hjelp av alle gjennomgående hullkomponenter. Mens jeg lett kunne ha gjort det mye mindre ved hjelp av overflatemonteringskomponenter, ønsket jeg at dette skulle være et godt prosjekt for folk som nettopp startet lodding. Dette er ikke et veldig komplekst prosjekt, og jeg følte at det kunne være folk der ute med et lignende behov for det. Men selv med denne begrensningen er brettet fortsatt ganske lite på bare 35mm x 44mm. (mest fordi det er en enkel krets.
alle design for dette er åpen kildekode og kan bli funnet på min github på:
https://github.com/mtreinish/pwmcontroller
Sette Sammen Kontrolleren
etter å ha fullført en funksjonell design sendte jeg den ut til elecrow for å få styret produsert. Et par uker senere fikk jeg styrene levert. (Jeg cheaped ut på frakt som gjorde det ta lengre tid, styrene ble produsert i < 1 uke)
da loddet jeg komponentene på brettet
da installerte jeg den nye kontrolleren på serveren min, og selvfølgelig fungerte det ikke. Så jeg tok PCB til benken min og testet den med et oscilloskop, en benk strømforsyning og en ekstra vifte. Det viser seg at det var to problemer. Først ble 555-timeren utgitt på 3,8-4,2 V i stedet FOR 5V som ble kalt i spesifikasjonen. Det andre problemet var at produksjonen ikke var en firkantbølge heller:
Andre Forsøk
for å rette opp problemene jeg fant fra første forsøk, endret jeg kretsen litt og la til en schmitt-utløser på utgangen. Dette ville ha tre fordeler: det ville rydde opp firkantbølgen, gjøre stigende og fallende kanter mye raskere, og det ville sikre at VI har en stabil 5v-utgang. Det er faktisk ganske morsomt, jeg bestemte meg / husket å bruke schmitt trigger fordi jeg måtte skrive en falsk app notat for en klasse på college på å bruke en schmitt trigger for switch de-bouncing.
modifikasjonen til kretsskjemaet var ganske enkel. Bare legg til schmitt-utløseren til utgangen av 555 og deretter koble den til viftehodet:
den eneste komplikasjonen til dette kom på brettoppsettet. Jeg var ikke i stand til å finne En Enkelt Schmitt trigger i en gjennomgående hull pakke. Den eneste gjennom hullet schmitt utløser som jeg fant (gitt at jeg ikke gjorde et uttømmende søk) var en 4 eller 6 vei I EN DIP-14-pakke. Som ville være langt den største pakken på brettet. JEG ønsket PCB å være enkel, liten og lett å hånd loddetinn. Dette opprinnelig betydde gjennomgående hull, men med valget mellom EN DUKKERT 14 og øke styret størrelse eller en enkelt overflate mount komponent jeg valgte å gå MED SMT komponenter. Jeg var i stand til å finne EN FRA TI i EN SOT-23-5 pakke, som ærlig ikke er vanskelig å lodde, det tar bare litt tålmodighet. (forstørrelse hjelper)
etter å ha fullført det reviderte brettoppsettet (jeg krympet det mye og rydde opp ting samtidig) sendte jeg DET ut TIL OSH Park for å bli produsert:
så loddet jeg alt på:
gjorde jeg en feil på det nye brettet; jeg glemte å koble bakken fra hovedkortkontakten OG 5V-siden AV DC / DC-omformeren. Ingenting en liten bodge-ledning mellom pinnene 1 og 3 PÅ DC / DC-omformeren kunne ikke fikse. (pcb-designen i git repo har allerede blitt oppdatert med denne korreksjonen) med det og de nye schmitt trigger-tingene fungerte perfekt:
og å sette den i serveren min nå kan jeg styre viftehastighetene veldig enkelt.
Konklusjon
dette prosjektet fikk meg til å innse at mange av de tilfeldige kontrollere og tilbehør på moderne datamaskin hovedkort som vi tar for gitt og er helt lukket design. DET er ingen dokumentasjon FRA ASUS om hvordan ting på serverens hovedkort er koblet opp eller protokollene de bruker (i hvert fall ikke det jeg kunne finne). Jeg begynte å tenke på mine andre datamaskiner, inkludert skrivebordet mitt og hvordan jeg styrer ting som fans og vannpumpe der. Det er den samme historien der; Jeg stoler på hovedkortets (EN ASUS Rampage V Edition 10) bakt i maskinvare og programvare. Jeg sjekket og lm_sensors kan ikke snakke med viftekontrolleren på skrivebordet heller. Men i motsetning til min server gir skrivebordets UEFI meg det nødvendige kontrollnivået for å justere temperaturinngangen og sette tilpassede viftekurver.
Mens jeg vil gjerne se disse designene åpnet for å gjøre det lettere å utnytte, skjønner jeg at det ikke er sannsynlig å endre seg snart. Men i mellomtiden kan vi fortsette å bare bygge åpne alternativer for brikkene vi trenger. Jeg jobber for tiden med et annet fan controller-prosjekt for skrivebordet mitt for å prøve å begynne å adressere dette. Jeg skal bygge en multi-fan controller som ligner på noe som en aquacomputer aquero. Men bygget på en helt åpen måte og med et åpent og definert grensesnitt. Du kan følge den pågående innsatsen her: https://github.com/mtreinish/openpwm det er fortsatt super tidlig i maskinvaredesignet, og det kommer til å bli et veldig langsiktig prosjekt jeg jobber med på fritiden.