Ho recentemente costruito un nuovo server home, è una scatola multiuso che conterrà la maggior parte della mia infrastruttura ed è anche un file server con molti dischi rigidi (e spazio per altri in futuro) Tutte queste unità hanno significato che questo è finito per essere una macchina molto grande quindi c’era spazio per metterli tutti. Ho finito per ottenere un Caselabs Magnum THW10 per il caso, che ha spazio per una tonnellata di roba in esso. Mentre la macchina funziona alla grande e fa tutto ciò di cui ho bisogno, c’è un piccolo problema con esso. Le ventole anteriori non girano abbastanza velocemente.
I dischi rigidi sono montati dietro le ventole di aspirazione anteriori e voglio assicurarmi che rimangano fresche. Tutta l’uscita dalle intestazioni della ventola PWM sulla scheda madre, un ASUS Z10PE-D16, sono legati alle temperature della CPU. Ma le CPU non diventano troppo calde nel server, quindi i fan del caso raramente (se mai) superano la loro velocità minima. La mia soluzione normale per questo problema è usare l’utiltity fancontrol che fa parte di lm_sensors. Tuttavia, lm_sensors non è in grado di rilevare nessuno dei controller della ventola sulla scheda madre. Penso che questo sia perché il controllo della ventola è fatto dal BMC sulla scheda madre e lm_sensors non supporta il BMC. Non sono stato in grado di trovare un’opzione per il controllo della ventola nell’interfaccia Web di BMC, quindi non ne sono sicuro. In entrambi i casi ho deciso che sarebbe stato molto più facile costruire un controller della ventola per poter impostare manualmente una velocità della ventola per le ventole di ingresso.
Costruzione di un controller ventola
Il server dispone di 8 ventole anteriori da 120 mm, 1 ventola posteriore da 120 mm e 6 ventole di scarico superiori da 140 mm installate. Tuttavia, poiché la scheda madre ha solo alcune intestazioni delle ventole, ho 2 splitter alimentati Silverstone CPF04. Le ventole 8 anteriori sono collegate a uno splitter e le 6 ventole di scarico superiori all’altra. Per questo progetto ho voluto solo attaccare un controller tra la scheda madre 4 pin intestazione della ventola che mi permettono di regolare il segnale di controllo PWM inviato alle ventole. Questo prenderebbe solo il potere dalla scheda madre e genererebbe la propria uscita PWM indipendente. Dal momento che gli splitter sono alimentati in modo indipendente, non avrei bisogno di preoccuparmi di instradare la potenza dalla scheda madre alle ventole.
Ci sono soluzioni commerciali là fuori, come Noctua NA FC1, che sono abbastanza vicine a quello che stavo cercando. Il problema con il controller Noctua per il mio caso d’uso era che non mi permetteva di impostare la modalità manuale completa se l’intestazione della scheda madre era collegata. Potrei creare un cavo personalizzato che non avesse il pin PWM collegato, ma poi pagherei per un sacco di funzionalità che in realtà non volevo.
Progettare il controller
Ho fatto alcune ricerche su Google per vedere cosa stavano facendo la maggior parte delle persone perché costruire un controller per ventole non è certo una cosa unica. La maggior parte degli esempi che ho trovato costruito un circuito con un timer 555 in modalità astable con un potenziometro per regolare il duty cycle della forma d’onda di uscita. Così ho deciso di fare la stessa cosa. Dopo aver letto le specifiche Intel per i fan PWM a 4 fili, ho capito i miei vincoli di progettazione per l’oscillatore. Il circuito doveva avere una frequenza di uscita di ~25 kHz e funzionare a 5 volt. Dato questo ho optato per questo circuito:
È stato per lo più preso in prestito dai circuiti che ho trovato tramite la ricerca su Internet per progetti simili. Ma ho dovuto regolare alcuni dei valori dei componenti per soddisfare le specifiche del controllo della ventola.
Da lì ho progettato un PCB per questo circuito usando KiCad. Ho progettato specificamente il PCB per essere facile da montare, utilizzando tutti i componenti del foro passante. Mentre avrei potuto facilmente reso molto più piccolo utilizzando componenti a montaggio superficiale, volevo che questo fosse un buon progetto per le persone che stavano appena iniziando la saldatura. Questo non è un progetto molto complesso e mi sono sentito come se ci fossero persone là fuori con un bisogno simile per questo. Ma, anche con questo vincolo la scheda è ancora abbastanza piccola a soli 35mm x 44mm. (soprattutto perché è un circuito semplice.
Tutti i progetti per questo sono open source e possono essere trovati sul mio github a:
https://github.com/mtreinish/pwmcontroller
Mettendo insieme il controller
Dopo aver terminato un design funzionale, l’ho inviato a elecrow per produrre la scheda. Un paio di settimane dopo ho ricevuto le tavole consegnate. (Io cheaped sulla spedizione che ha fatto è più, i pannelli sono stati realizzati in < 1 settimana)
Poi ho saldato i componenti sulla scheda
Poi ho installato il nuovo controller nel mio server, e ovviamente non ha funzionato. Così ho portato il PCB sul mio banco e l’ho testato con un oscilloscopio, un alimentatore da banco e una ventola di ricambio. Si scopre che c’erano due problemi. Innanzitutto, il timer 555 stava emettendo a 3.8-4.2 V invece del 5V richiesto nelle specifiche. Il secondo problema era che l’uscita non era nemmeno un’onda quadra:
Secondo tentativo
Per correggere i problemi riscontrati dal primo tentativo, ho modificato leggermente il mio circuito e aggiunto un trigger schmitt sull’uscita. Ciò avrebbe tre vantaggi: pulirebbe l’onda quadra, renderebbe i bordi di salita e discesa molto più veloci e assicurerebbe un’uscita 5V stabile. In realtà è piuttosto divertente,ho deciso / ricordato di usare il trigger schmitt perché ho dovuto scrivere una nota app falsa per una classe al college sull’utilizzo di un trigger schmitt per il de-bouncing dell’interruttore.
La modifica allo schema del circuito è stata piuttosto semplice. Basta aggiungere il trigger schmitt all’uscita del 555 e poi collegarlo all’intestazione della ventola:
L’unica complicazione di questo è venuto sul layout della scheda. Non ero in grado di trovare un singolo trigger Schmitt in un pacchetto foro passante. L’unico trigger di schmitt attraverso il foro che ho trovato (ammesso che non ho fatto una ricerca esaustiva) era un modo 4 o 6 in un pacchetto DIP-14. Che sarebbe di gran lunga il pacchetto più grande sulla scheda. Volevo che il PCB fosse semplice, piccolo e facile da saldare a mano. Questo originariamente significava tutto attraverso il foro, ma con la scelta tra un TUFFO 14 e aumentando le dimensioni della scheda o un singolo componente di montaggio superficiale ho optato per andare con i componenti SMT. Sono stato in grado di trovarne uno da TI in un pacchetto SOT-23-5, che onestamente non è difficile da saldare, ci vuole solo un po ‘ di pazienza. (l’ingrandimento aiuta)
Dopo aver terminato il layout della scheda rivisto (l’ho ridotto molto e ripulito le cose allo stesso tempo) L’ho inviato a OSH Park per essere prodotto:
Poi ho saldato tutto su:
Ho fatto un errore sulla nuova scheda; ho dimenticato di collegare il terreno dal connettore della scheda madre e dal lato 5V del convertitore DC/DC. Niente un piccolo filo di bodge tra i pin 1 e 3 sul convertitore DC/DC non poteva risolvere. (il design del pcb nel repository git è già stato aggiornato con questa correzione) Con quello e le nuove cose di trigger schmitt hanno funzionato perfettamente:
e mettendolo nel mio server ora posso controllare la velocità della ventola molto facilmente.
Conclusione
Questo progetto mi ha fatto capire che un sacco di controller casuali e accessori su schede madri di computer moderni che diamo per scontato e sono disegni completamente chiusi. Non c’è alcuna documentazione da ASUS su come le cose sulla mia scheda madre del server sono cablate o sui protocolli che utilizzano (almeno non che sono stato in grado di trovare). Ho iniziato a pensare ai miei altri computer incluso il mio desktop e a come sto controllando cose come i fan e la pompa dell’acqua lì. È la stessa storia lì; Mi affido alla scheda madre (un ASUS Rampage V Edition 10) cotto in hardware e software. Ho controllato e lm_sensors non è in grado di parlare con il controller della ventola sul desktop. Ma, a differenza del mio server, l’UEFI del desktop mi fornisce il livello di controllo necessario per regolare l’ingresso della temperatura e impostare le curve delle ventole personalizzate.
Mentre mi piacerebbe vedere questi disegni aperti per rendere più facile sfruttare, mi rendo conto che non è molto probabile che cambi presto. Ma nel frattempo possiamo continuare a costruire alternative aperte per i pezzi di cui abbiamo bisogno. Attualmente sto lavorando a un altro progetto di controller fan per il mio desktop per provare e iniziare ad affrontare questo problema. Ho intenzione di costruire un controller multi-fan simile a qualcosa come un aquacomputer aquero. Ma, costruito in modo tutto aperto e con un’interfaccia aperta e definita. Puoi seguire il progresso di questo sforzo qui: https://github.com/mtreinish/openpwm È ancora molto presto nella progettazione hardware e sarà un progetto a lungo termine su cui lavoro nel mio tempo libero.