A través de Flatland a Thoughtland

Recientemente construí un nuevo servidor doméstico, es una caja multipropósito que albergará la mayor parte de mi infraestructura y también es un servidor de archivos con muchos discos duros (y espacio para más en el futuro), todas estas unidades significaron que terminó siendo una máquina muy grande, por lo que había espacio para ponerlas todas. Terminé obteniendo un CaseLabs Magnum THW10 para el caso, que tiene espacio para un montón de cosas en él. Si bien la máquina funciona muy bien y hace todo lo que necesito, hay un pequeño problema con ella. Los ventiladores delanteros no giran lo suficientemente rápido.

El servidor de mi sala de estar después del primer arranque. (la botella de soda de 2 litros es para báscula)

Los discos duros están montados detrás de los ventiladores de admisión delanteros y quiero asegurarme de que se mantengan frescos. Toda la salida de los cabezales de ventilador PWM de la placa base, un ASUS Z10PE-D16, está vinculada a las temperaturas de la CPU. Pero, las CPU realmente no se calientan demasiado en el servidor, por lo que los ventiladores de cajas rara vez (si es que alguna vez) superan su velocidad mínima. Mi solución normal para este problema es usar la utilidad fancontrol que forma parte de lm_sensors. Sin embargo, lm_sensors no es capaz de detectar ninguno de los controladores de ventilador en la placa base. Creo que esto se debe a que el control del ventilador lo realiza el BMC en la placa base y lm_sensors no es compatible con el BMC. No pude encontrar una opción para el control del ventilador en la interfaz web del BMC, así que no estoy seguro. De cualquier manera, decidí que sería mucho más fácil construir un controlador de ventilador para poder establecer manualmente una velocidad de ventilador para los ventiladores de entrada.

Construyendo un controlador de ventilador

El servidor tiene 8 ventiladores delanteros de 120 mm, 1 ventilador trasero de 120 mm y 6 ventiladores de escape superior de 140 mm instalados. Sin embargo, debido a que la placa base solo tiene unos pocos cabezales de ventilador, tengo 2 divisores con alimentación Silverstone CPF04. Los 8 ventiladores delanteros están conectados a un divisor y los 6 ventiladores de escape superiores al otro. Para este proyecto, solo quería colocar un controlador entre el cabezal del ventilador de 4 pines de la placa base que me permitiera ajustar la señal de control PWM enviada a los ventiladores. Esto solo tomaría energía de la placa base y generaría su propia salida PWM independiente. Dado que los divisores se alimentan de forma independiente, no tendría que preocuparse por enrutar la energía de la placa base a los ventiladores.

Existen soluciones comerciales, como el Noctua NA FC1, que se acercan bastante a lo que estaba buscando. El problema con el controlador Noctua para mi caso de uso era que no me dejaba configurar el modo manual completo si el encabezado de la placa base estaba conectado. Podría crear un cable personalizado que no tuviera el pin PWM conectado, pero luego estaría pagando por un montón de características que en realidad no quería.

Diseñar el controlador

Hice algunas búsquedas en Google para ver lo que la mayoría de la gente estaba haciendo porque construir un controlador de ventilador no es algo único. La mayoría de los ejemplos que encontré construyeron un circuito con un temporizador 555 en modo astable con un potenciómetro para ajustar el ciclo de trabajo de la forma de onda de salida. Así que decidí hacer lo mismo. Después de leer la especificación Intel para ventiladores PWM de 4 cables, descubrí mis limitaciones de diseño para el oscilador. El circuito necesitaba tener una frecuencia de salida de ~25 kHz y funcionar a 5 voltios. Dado esto, me instalé en este circuito:

En su mayoría se tomó prestado de los circuitos que encontré a través de la búsqueda de proyectos similares en Internet. Pero tuve que ajustar algunos de los valores de los componentes para cumplir con las especificaciones de control del ventilador.

A partir de ahí diseñé una PCB para este circuito utilizando KiCad. Diseñé específicamente la PCB para que fuera fácil de montar, utilizando todos los componentes de orificio pasante. Si bien podría haberlo hecho mucho más pequeño con componentes de montaje en superficie, quería que este fuera un buen proyecto para personas que recién comenzaban a soldar. Este no es un proyecto muy complejo y sentí que podría haber personas con una necesidad similar. Pero, incluso con esta restricción, la placa sigue siendo bastante pequeña, con solo 35 mm x 44 mm. (principalmente porque es un circuito simple.

Todos los diseños para esto son de código abierto y se pueden encontrar en mi github en:

https://github.com/mtreinish/pwmcontroller

Armar el Controlador

Después de terminar un diseño funcional, lo envié a elecrow para que fabricara la placa. Un par de semanas después recibí las tablas. (Yo cheaped a cabo en el envío que hizo tomar más tiempo, las juntas se fabrican en < 1 semana)

Luego soldé los componentes en el tablero

Luego de instalar el nuevo controlador en mi servidor, y por supuesto, no funcionó. Así que llevé la PCB a mi banco y la probé con un osciloscopio, una fuente de alimentación de banco y un ventilador de repuesto. Resulta que había dos problemas. En primer lugar, el temporizador 555 estaba emitiendo a 3,8-4,2 V en lugar del 5V requerido en la especificación. El segundo problema era que la salida tampoco era realmente una onda cuadrada:

Segundo intento

Para corregir los problemas que encontré en el primer intento, modificé ligeramente mi circuito y agregué un disparador schmitt en la salida. Esto tendría tres ventajas: limpiaría la onda cuadrada, haría que los bordes ascendentes y descendentes fueran mucho más rápidos y nos aseguraría una salida estable de 5V. En realidad, es bastante divertido, decidí / recordé usar el disparador schmitt porque tuve que escribir una nota de aplicación falsa para una clase en la universidad sobre el uso de un disparador schmitt para desconectar el interruptor.

La modificación del esquema del circuito fue bastante simple. Simplemente agregue el disparador schmitt a la salida del 555 y luego conéctelo al cabezal del ventilador:

La única complicación de esto vino en el diseño del tablero. No pude encontrar un solo disparador Schmitt en un paquete de agujeros pasantes. El único disparador de schmitt con orificio pasante que encontré (aunque no hice una búsqueda exhaustiva) fue de 4 o 6 vías en un paquete DIP-14. Lo que sería, con mucho, el paquete más grande del tablero. Quería que la PCB fuera simple, pequeña y fácil de soldar a mano. Originalmente, esto significaba un orificio pasante, pero con la opción de elegir entre un DIP 14 y aumentar el tamaño de la placa o un solo componente de montaje en superficie, opté por los componentes SMT. Pude encontrar uno de TI en un paquete SOT-23-5, que honestamente no es difícil de soldar, solo se necesita un poco de paciencia. (ampliación ayuda)

Después de terminar la versión revisada de la junta de diseño (he encogido hacia abajo un montón y limpiar las cosas al mismo tiempo) me envió a OSH Parque para llegar fabricados:

Luego soldé todo en:

Junto a la placa original defectuosa

Cometí un error en la nueva placa; olvidé conectar la tierra desde el conector de la placa base y el lado de 5V del convertidor DC/DC. Nada que un pequeño cable entre los pines 1 y 3 del convertidor DC / DC no pudiera arreglar. (el diseño de pcb en el repositorio git ya se ha actualizado con esta corrección) Con eso y el nuevo disparador schmitt funcionó perfectamente:

y poniéndolo en mi servidor ahora puedo controlar las velocidades del ventilador muy fácilmente.

Conclusión

Este proyecto me hizo darme cuenta de que muchos de los controladores aleatorios y accesorios en las placas base de computadoras modernas que damos por sentado y son diseños completamente cerrados. No hay documentación de ASUS sobre cómo se conectan las cosas en la placa base de mi servidor o los protocolos que utilizan (al menos no que haya podido encontrar). Empecé a pensar en mis otras computadoras, incluido mi escritorio, y en cómo estoy controlando cosas como los ventiladores y la bomba de agua allí. Es la misma historia allí; Confío en la placa base (una ASUS Rampage V Edición 10) horneada en hardware y software. Revisé y lm_sensors tampoco puede hablar con el controlador del ventilador en el escritorio. Pero, a diferencia de mi servidor, la UEFI del escritorio me proporciona el nivel de control necesario para ajustar la entrada de temperatura y establecer curvas de ventilador personalizadas.

Si bien me gustaría ver estos diseños abiertos para que sea más fácil de aprovechar, me doy cuenta de que no es muy probable que cambie en el corto plazo. Pero mientras tanto, podemos seguir construyendo alternativas abiertas para las piezas que necesitamos. Actualmente estoy trabajando en otro proyecto de controlador de ventilador para mi escritorio para intentar comenzar a abordar esto. Voy a construir un controlador multi ventilador similar a algo como un aquacomputer aquero. Pero, construido de una manera abierta y con una interfaz abierta y definida. Puedes seguir el progreso de ese esfuerzo aquí: https://github.com/mtreinish/openpwm Todavía es muy temprano en el diseño de hardware y va a ser un proyecto a muy largo plazo en el que trabajo en mi tiempo libre.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.