am construit recent un nou server de acasă, este o cutie multifuncțională care va deține cea mai mare parte a infrastructurii mele și, de asemenea, este un server de fișiere cu o mulțime de hard disk-uri (și spațiu pentru mai multe în viitor) toate aceste unități au însemnat că aceasta a ajuns să fie o mașină foarte mare, astfel încât a existat spațiu pentru a le pune pe toate. Am ajuns să primesc un CaseLabs Magnum THW10 pentru caz, care are spațiu pentru o grămadă de lucruri în el. În timp ce mașina este de lucru mare și de a face tot ce am nevoie pentru a, există o mică problemă cu ea. Ventilatoarele din față nu se rotesc suficient de repede.
hard disk-urile sunt montate în spatele ventilatoarelor de admisie din față și vreau să mă asigur că se mențin la rece. Toate ieșirile de la anteturile ventilatorului PWM de pe placa de bază, un ASUS Z10PE-D16, sunt legate de temperaturile procesorului. Dar, procesoarele nu se încălzesc prea mult pe server, astfel încât fanii cazului rareori (dacă vreodată) depășesc viteza minimă. Soluția mea normală pentru această problemă este de a utiliza utiltity fancontrol care face parte din lm_sensors. Cu toate acestea, lm_sensors nu este capabil să detecteze niciunul dintre controlerele ventilatorului de pe placa de bază. Cred că acest lucru se datorează faptului că controlul ventilatorului este realizat de BMC pe placa de bază și lm_sensors nu acceptă BMC. Nu am reușit să găsesc o opțiune pentru controlul ventilatorului în interfața web a BMC, așa că nu sunt sigur. Oricum am decis că ar fi mult mai ușor să construim doar un controler de ventilator pentru a putea seta manual o viteză a ventilatorului pentru fanii de intrare.
construirea unui controler de ventilator
serverul are 8 ventilatoare frontale de 120 mm, 1 ventilator spate de 120 mm și 6 ventilatoare superioare de evacuare de 140 mm instalate. Cu toate acestea, deoarece placa de bază are doar câteva anteturi de ventilator, am 2 splittere Silverstone CPF04 alimentate. Ventilatoarele frontale 8 sunt conectate la un splitter și ventilatoarele de evacuare superioare 6 la celălalt. Pentru acest proiect am vrut să rămânem doar un controler între placa de baza 4 pini ventilator Antet care îmi permit să se adapteze semnalul de control PWM trimis la fani. Acest lucru ar lua doar puterea de la placa de bază și va genera propria ieșire PWM independentă. Deoarece separatoarele sunt alimentate independent, nu ar trebui să-mi fac griji cu privire la direcționarea puterii de la placa de bază către fani.
există soluții comerciale acolo, cum ar fi Noctua na FC1, care sunt destul de aproape de ceea ce căutam. Problema cu controlerul Noctua pentru cazul meu de utilizare a fost că nu m-ar lăsa să setez modul manual complet dacă antetul plăcii de bază a fost conectat. Aș putea crea un cablu personalizat care nu avea pinul PWM conectat, dar atunci aș plăti pentru o grămadă de funcții pe care nu le doream de fapt.
proiectarea controlerului
am făcut câteva căutări pe google pentru a vedea ce făceau majoritatea oamenilor, deoarece construirea unui controler de ventilator nu este un lucru unic. Cele mai multe exemple pe care le-am găsit au construit un circuit cu un cronometru 555 în modul astable cu un potențiometru pentru a regla ciclul de funcționare al formei de undă de ieșire. Așa că am decis să fac același lucru. După ce am citit specificația Intel pentru fanii PWM cu 4 fire, mi-am dat seama de constrângerile mele de proiectare pentru oscilator. Circuitul trebuia să aibă o frecvență de ieșire de ~25 kHz și să funcționeze la 5 volți. Având în vedere acest lucru am stabilit pe acest circuit:
acesta a fost cea mai mare parte împrumutat de la circuitele am găsit prin căutarea pe internet pentru proiecte similare. Dar a trebuit să ajustez unele dintre valorile componentelor pentru a satisface specificațiile de control ale ventilatorului.
de acolo am proiectat un PCB pentru acest circuit folosind KiCad. Am proiectat special PCB-ul pentru a fi ușor de asamblat, folosind toate componentele găurii. În timp ce aș fi putut să o fac cu ușurință mult mai mică folosind componente de montare pe suprafață, am vrut ca acesta să fie un proiect bun pentru oamenii care abia încep să lipească. Acesta nu este un proiect foarte complex și am simțit că ar putea exista oameni acolo cu o nevoie similară pentru el. Dar, chiar și cu această constrângere placa este încă destul de mic la numai 35mm x 44mm. (mai ales pentru că este un circuit simplu.
toate desenele pentru acest lucru sunt open source și pot fi găsite pe github meu la:
https://github.com/mtreinish/pwmcontroller
punerea împreună controlerul
după terminarea unui design funcțional l-am trimis la elecrow pentru a obține bord fabricate. Câteva săptămâni mai târziu am primit plăcile livrate. (Am cheaped pe transport maritim care a făcut să dureze mai mult, plăcile au fost fabricate în < 1 săptămână)
apoi am lipit componentele pe tablă
apoi am instalat noul controler pe serverul meu și, desigur, nu a funcționat. Așa că am dus PCB-ul la banca mea și l-am testat cu un osciloscop, o sursă de alimentare pe bancă și un ventilator de rezervă. Se pare că au existat două probleme. În primul rând, cronometrul 555 ieșea la 3.8-4.2 V în loc de 5V solicitat în spec. A doua problemă a fost că de ieșire nu a fost într-adevăr un val pătrat, fie:
a doua încercare
pentru a corecta problemele pe care le-am găsit de la prima încercare, mi-am modificat ușor circuitul și am adăugat un declanșator schmitt pe ieșire. Acest lucru ar avea trei avantaje: ar curăța valul pătrat, ar face marginile în creștere și cădere mult mai rapide și ne-ar asigura că avem o ieșire stabilă de 5V. De fapt, este destul de amuzant, am decis/mi-am amintit să folosesc declanșatorul schmitt, deoarece a trebuit să scriu o notă de aplicație falsă pentru o clasă din facultate cu privire la utilizarea unui declanșator schmitt pentru dezactivarea comutatorului.
modificarea schematică a circuitului a fost destul de simplă. Doar adăugați declanșatorul schmitt la ieșirea 555 și apoi conectați-l la antetul ventilatorului:
singura complicație la acest lucru a venit pe aspectul bord. Nu am reușit să găsesc un singur declanșator Schmitt într-un pachet de găuri. Singurul declanșator prin gaura schmitt pe care l-am găsit (acordat că nu am făcut o căutare exhaustivă) a fost un mod 4 sau 6 într-un pachet DIP-14. Care ar fi de departe cel mai mare pachet de pe tablă. Am vrut ca PCB-ul să fie simplu, mic și ușor de lipit. Acest lucru a însemnat inițial toate prin gaura, dar cu alegerea între o baie 14 și creșterea dimensiunii plăcii sau o singură componentă de montare pe suprafață am optat pentru a merge cu componentele SMT. Am reușit să găsesc unul de la TI într-un pachet SOT-23-5, care sincer nu este greu de lipit, este nevoie doar de puțină răbdare. (mărire ajută)
după terminarea aspectul bord revizuit (l-am micsorat o mulțime și curățat lucrurile în același timp) l-am trimis la SSM Park pentru a obține fabricate:
apoi am lipit totul:
am făcut o greșeală pe noua placă; am uitat să conectez solul de la conectorul plăcii de bază și partea 5V a convertorului DC/DC. Nimic un fir mic bodge între pinii 1 și 3 de pe convertorul DC/DC nu a putut repara. (designul pcb din repo-ul git a fost actualizat cu această corecție deja) cu asta și noile lucruri schmitt trigger au funcționat perfect:
și punându-l în serverul meu acum pot controla viteza ventilatorului foarte ușor.
concluzie
acest proiect ma făcut să realizez că o mulțime de controlere aleatoare și accesorii pe placi de baza moderne de calculator pe care le ia de la sine și sunt modele complet închise. Nu există nicio documentație de la ASUS despre modul în care lucrurile de pe placa de bază a serverului meu sunt conectate sau protocoalele pe care le utilizează (cel puțin nu pe care am reușit să le găsesc). Am început să mă gândesc la celelalte computere, inclusiv la desktopul meu și la modul în care controlez lucruri precum ventilatoarele și pompa de apă de acolo. Este aceeași poveste acolo; Mă bazez pe placa de bază (un ASUS Rampage V Edition 10) coapte în hardware și software. Am verificat și lm_sensors nu este capabil să vorbească cu controlerul ventilatorului de pe desktop. Dar, spre deosebire de serverul meu, UEFI-ul desktop-ului îmi oferă nivelul necesar de control pentru a regla intrarea temperaturii și a seta curbele personalizate ale ventilatorului.
în timp ce aș dori să văd aceste modele deschise pentru a face mai ușor de pârghie, îmi dau seama că nu este foarte probabil să se schimbe în orice moment în curând. Dar, între timp, putem continua să construim alternative deschise pentru piesele de care avem nevoie. În prezent lucrez la un alt proiect de controler de ventilator pentru desktop-ul meu pentru a încerca să încep să abordez acest lucru. Voi construi un controler multi-ventilator similar cu ceva de genul unui aquacomputer aquero. Dar, construit într-o manieră deschisă și cu o interfață deschisă și definită. Puteți urmări progresul acestui efort aici: https://github.com/mtreinish/openpwm este încă foarte devreme în proiectarea hardware și va fi un proiect pe termen foarte lung la care lucrez în timpul liber.