genom Flatland till Thoughtland

jag byggde nyligen en ny hemserver, det är en multifunktionell låda som kommer att hålla det mesta av min infrastruktur och också är en filserver med många hårddiskar (och plats för mer i framtiden) alla dessa enheter innebar att detta slutade bli en mycket stor maskin så det fanns utrymme att sätta dem alla. Jag slutade med att få en CaseLabs Magnum THW10 för fallet, som har plats för massor av saker i den. Medan maskinen fungerar bra och gör allt jag behöver det, finns det ett litet problem med det. De främre fläktarna snurrar inte tillräckligt snabbt.

servern i mitt vardagsrum efter den första starten. (2 liters läskflaskan är för skala)

hårddiskarna är monterade bakom de främre insugningsfläktarna och jag vill se till att de håller sig svala. All utgång från PWM-fläkthuvudena på moderkortet, en ASUS Z10PE-D16, är knutna till CPU-temperaturerna. Men CPU: erna blir inte riktigt för heta på servern så att fallfläktarna sällan (om någonsin) går över sin minsta hastighet. Min normala lösning för detta problem är att använda fancontrol utiltity som ingår i lm_sensors. Lm_sensors kan dock inte upptäcka någon av fläktkontrollerna på moderkortet. Jag tror att det här beror på att fläktkontrollen görs av BMC på moderkortet och lm_sensors stöder inte BMC. Jag kunde inte hitta ett alternativ för fläktkontroll i BMC: s webbgränssnitt, så jag är inte säker. Hur som helst bestämde jag mig för att det skulle vara mycket lättare att bara bygga en fläktkontroll för att manuellt kunna ställa in en fläkthastighet för ingångsfläktarna.

bygga en Fläktstyrenhet

servern har 8 främre 120mm fläktar, 1 bakre 120mm fläkt och 6 övre avgas 140mm fläktar installerade. Men eftersom moderkortet bara har några fläkthuvuden har jag 2 Silverstone CPF04-drivna splitters. De främre 8 fläktarna är anslutna till en splitter och de 6 övre avgasfläktarna till den andra. För det här projektet ville jag bara hålla en kontroller mellan moderkortet 4 pin fan header som gör det möjligt för mig att justera PWM-styrsignalen som skickas till fläktarna. Detta skulle bara ta ström från moderkortet och generera sin egen oberoende PWM-utgång. Eftersom delarna är oberoende drivna skulle jag inte behöva oroa mig för att dirigera ström från moderkortet till fansen.

det finns kommersiella lösningar där ute, som Noctua NA FC1, som är ganska nära det jag letade efter. Problemet med Noctua-kontrollen för mitt användningsfall var att det inte skulle låta mig ställa in fullständigt manuellt läge om moderkortets rubrik var inkopplad. Jag kunde skapa en anpassad kabel som inte hade PWM-stiftet anslutet, men då skulle jag betala för en massa funktioner som jag inte ville ha.

designa styrenheten

jag gjorde lite sökning på google för att se vad de flesta gjorde för att bygga en fläktkontroll är knappast en unik sak. De flesta exempel som jag hittade byggde en krets med en 555 timer i astabilt läge med en potentiometer för att justera arbetscykeln för utgångsvågformen. Så jag bestämde mig för att göra samma sak. Efter att ha läst Intel-specifikationen för 4-tråds PWM-fans räknade jag ut mina designbegränsningar för oscillatorn. Kretsen behövde ha en utgångsfrekvens på ~25 kHz och arbeta vid 5 volt. Med tanke på detta bestämde jag mig för denna krets:

det var mestadels lånat från kretsarna jag hittade via att söka på internet för liknande projekt. Men jag var tvungen att justera några av komponentvärdena för att möta fläktkontrollspecifikationen.

därifrån designade jag en PCB för denna krets med KiCad. Jag utformade specifikt PCB för att vara lätt att montera, med hjälp av alla genomgående hålkomponenter. Medan jag lätt kunde ha gjort det mycket mindre med hjälp av ytmonterade komponenter ville jag att detta skulle vara ett bra projekt för människor som just började lödas. Detta är inte ett mycket komplext projekt och jag kände att det kan finnas människor där ute med ett liknande behov av det. Men även med denna begränsning är styrelsen fortfarande ganska liten på endast 35 mm x 44 mm. (för det mesta för att det är en enkel krets.

alla mönster för detta är öppen källkod och finns på my github på:

https://github.com/mtreinish/pwmcontroller

att sätta ihop regulatorn

efter att ha avslutat en funktionell design skickade jag ut den till elecrow för att få styrelsen Tillverkad. Några veckor senare fick jag brädorna levererade. (Jag cheaped ut på frakten som gjorde att det tog längre tid, brädorna tillverkades i < 1 vecka)

sedan lödda jag komponenterna på brädet

sedan installerade jag den nya styrenheten på min server, och det fungerade naturligtvis inte. Så jag tog PCB till min bänk och testade den med ett oscilloskop, en bänk strömförsörjning och en extra fläkt. Det visar sig att det fanns två frågor. Först utmatade 555-timern vid 3.8-4.2 V istället för den 5V som krävdes i spec. Den andra frågan Var att utgången inte var en kvadratvåg heller:

andra försöket

för att korrigera de problem som jag hittade från det första försöket ändrade jag min krets något och lade till en schmitt-utlösare på utgången. Detta skulle ha tre fördelar: det skulle städa upp kvadratvågen, göra de stigande och fallande kanterna mycket snabbare, och det skulle säkerställa att vi har en stabil 5V-utgång. Det är faktiskt ganska roligt, jag bestämde mig/Kom ihåg att använda schmitt-utlösaren eftersom jag var tvungen att skriva en falsk appanteckning för en klass på college om att använda en schmitt-utlösare för switch de-bouncing.

modifieringen av kretsschemat var ganska enkel. Lägg bara till schmitt-utlösaren till utgången på 555 och tråd sedan den till fläkthuvudet:

den enda komplikationen till detta kom på styrelsens layout. Jag kunde inte hitta en enda Schmitt-utlösare i ett genomgående hålpaket. Det enda genomgående hålet schmitt triggers som jag hittade (beviljade att jag inte gjorde en uttömmande sökning) var en 4 eller 6-väg i ett DIP-14-paket. Vilket skulle vara det överlägset största paketet i styrelsen. Jag ville att kretskortet skulle vara enkelt, litet och lätt att löda. Detta innebar ursprungligen hela genomgående hål, men med valet mellan ett dopp 14 och öka brädans storlek eller en enda ytmonterad komponent valde jag att gå med SMT-komponenterna. Jag kunde hitta en från TI i ett sot-23-5-paket, vilket ärligt talat inte är svårt att lödda, det tar bara lite tålamod. (förstoring hjälper)

efter att ha avslutat den reviderade styrelsens layout (jag krympte ner det mycket och städade upp saker samtidigt) skickade jag ut det till OSH Park för att bli tillverkad:

sedan lödda jag allt på:

bredvid det felaktiga originalkortet

gjorde jag ett misstag på det nya kortet; Jag glömde att ansluta marken från moderkortets kontakt och 5V-sidan av DC/DC-omvandlaren. Ingenting en liten bodge-tråd mellan stiften 1 och 3 på DC/DC-omvandlaren kunde inte fixa. (pcb-designen i git repo har uppdaterats med denna korrigering redan) med det och den nya Schmitt-utlösaren fungerade perfekt:

och sätta den i min server nu kan jag styra fläkthastigheter mycket lätt.

slutsats

detta projekt fick mig att inse att en hel del av de slumpmässiga styrenheter och tillbehör på moderna dator moderkort som vi tar för givet och är helt slutna konstruktioner. Det finns ingen dokumentation från ASUS om hur saker på mitt server moderkort är anslutna eller de protokoll de använder (åtminstone inte att jag kunde hitta). Jag började tänka på mina andra datorer inklusive mitt skrivbord och hur jag kontrollerar saker som fläktar och vattenpump där. Det är samma historia där; Jag litar på moderkortets (en ASUS Rampage V Edition 10) bakad i hårdvara och mjukvara. Jag kollade och lm_sensors kan inte prata med fläktkontrollen på skrivbordet heller. Men till skillnad från min server ger skrivbordets UEFI mig den nödvändiga kontrollnivån för att justera temperaturingången och ställa in anpassade fläktkurvor.

medan jag skulle vilja se dessa mönster öppnade för att göra det lättare att utnyttja, inser jag att det inte är mycket troligt att det ändras någon gång snart. Men under tiden kan vi fortsätta att bara bygga öppna alternativ för de bitar vi behöver. Jag arbetar för närvarande med ett annat fan controller-projekt för mitt skrivbord för att försöka börja ta itu med detta. Jag ska bygga en multi-fan controller som liknar något som en aquacomputer aquero. Men byggd på ett öppet sätt och med ett öppet och definierat gränssnitt. Du kan följa den pågående ansträngningen här: https://github.com/mtreinish/openpwm det är fortfarande super tidigt i hårdvarudesignen och det kommer att bli ett mycket långsiktigt projekt jag jobbar med på fritiden.

Lämna ett svar

Din e-postadress kommer inte publiceras.