eu recentemente foi construída uma nova home server, é um multiuso caixa que irá armazenar a maioria dos meus infra-estrutura e também é um servidor de arquivos com um monte de unidades de disco rígido (e espaço para mais no futuro) Todas estas unidades significava isso acabou sendo uma máquina muito grande assim, houve espaço para colocá-los todos. Acabei recebendo um Caselabs Magnum THW10 para o caso, que tem espaço para uma tonelada de coisas nele. Enquanto a máquina está funcionando muito bem e fazendo tudo o que preciso, há um pequeno problema com ela. Os fãs da frente não estão girando rápido o suficiente.
os discos rígidos são montados atrás dos ventiladores de admissão dianteiros e eu quero ter certeza de que eles se mantêm frescos. Toda a saída dos cabeçalhos dos ventiladores PWM na placa-mãe, um ASUS Z10PE-D16, está ligada às temperaturas da CPU. Mas, as CPUs realmente não ficam muito quentes no servidor, então os fãs do case raramente (se alguma vez) vão acima de sua velocidade mínima. Minha solução normal para esse problema é usar o FanControl utilitity que faz parte do lm_sensors. No entanto, lm_sensors não é capaz de detectar nenhum dos controladores de ventilador na placa-mãe. Acho que isso ocorre porque o controle do ventilador é feito pelo BMC na placa-mãe e lm_sensors não suporta o BMC. Não consegui encontrar uma opção para controle de ventilador na interface da web do BMC, então não tenho certeza. De qualquer forma, decidi que seria muito mais fácil apenas construir um controlador de ventilador para poder definir manualmente a velocidade do ventilador para os ventiladores de entrada.
construindo um controlador do fã
o servidor tem 8 ventiladores dianteiros de 120mm, 1 ventilador traseiro de 120mm e 6 ventiladores superiores da exaustão de 140mm instalados. No entanto, como a placa-mãe tem apenas alguns cabeçalhos de ventilador, tenho 2 divisores alimentados por Silverstone CPF04. Os ventiladores dianteiros 8 são conectados a um divisor e os 6 ventiladores de exaustão superiores ao outro. Para este projeto, eu queria apenas colocar um controlador entre o cabeçalho do ventilador da placa-mãe de 4 pinos que me permitem ajustar o sinal de controle PWM enviado aos fãs. Isso só tiraria energia da placa-mãe e geraria sua própria saída PWM independente. Como os divisores são alimentados independentemente, eu não precisaria me preocupar em rotear a energia da placa-mãe para os ventiladores.
existem soluções comerciais por aí, como o Noctua na FC1, que estão bem perto do que eu estava procurando. O problema com o controlador Noctua para o meu caso de uso era que ele não me deixaria definir o modo manual completo se o cabeçalho da placa-mãe estivesse conectado. Eu poderia criar um cabo personalizado que não tivesse o pino PWM conectado, mas então eu estaria pagando por um monte de recursos que eu realmente não queria.
projetando o controlador
fiz algumas pesquisas no google para ver o que a maioria das pessoas estava fazendo porque construir um controlador de ventilador dificilmente é uma coisa única. A maioria dos exemplos que encontrei construiu um circuito com um temporizador 555 no modo astable com um potenciômetro para ajustar o ciclo de trabalho da forma de onda de saída. Então decidi fazer a mesma coisa. Depois de ler a especificação Intel para ventiladores PWM de 4 fios, descobri minhas restrições de design para o oscilador. O circuito precisava ter uma frequência de saída de ~ 25 kHz e operar a 5 volts. Diante disso, me instalei neste circuito:
foi emprestado principalmente dos circuitos que encontrei pesquisando na internet por projetos semelhantes. Mas eu tive que ajustar alguns dos valores do componente para atender às especificações de controle do ventilador.
a partir daí eu projetei um PCB para este circuito usando KiCad. Eu projetei especificamente o PCB para ser fácil de montar, usando todos os componentes do furo. Embora eu pudesse facilmente torná-lo muito menor usando componentes de Montagem Em superfície, eu queria que este fosse um bom projeto para as pessoas que estavam começando a soldar. Este não é um projeto muito complexo e senti que pode haver pessoas por aí com uma necessidade semelhante. Mas, mesmo com essa restrição, a placa ainda é bastante pequena, com apenas 35 mm x 44 mm. (principalmente porque é um circuito simples.
Todos os projetos para este são de código aberto e pode ser encontrado no meu github em:
https://github.com/mtreinish/pwmcontroller
montar o Controlador
Depois de terminar um design funcional, que eu enviei para elecrow para obter o conselho fabricado. Algumas semanas depois, recebi as placas entregues. (Eu cheaped fora de envio que o fez demorar mais tempo, as placas foram fabricadas em < de 1 semana)
Então eu soldados os componentes na placa
Depois de instalado o novo controlador no meu servidor, e, claro, não funcionou. Então eu levei o PCB para o meu banco e testei com um osciloscópio, uma fonte de alimentação de bancada e um ventilador sobressalente. Acontece que houve duas questões. Primeiro, o temporizador 555 estava produzindo em 3,8-4,2 V em vez do 5V exigido na especificação. A segunda questão era que a saída também não era realmente uma onda quadrada:
segunda tentativa
para corrigir os problemas que encontrei na primeira tentativa, modifiquei levemente meu circuito e adicionei um gatilho schmitt na saída. Isso teria três vantagens: limparia a onda quadrada, tornaria as bordas de subida e descida muito mais rápidas e garantiria uma saída estável de 5V. Na verdade, é muito engraçado, decidi/lembrei-me de usar o gatilho schmitt Porque tive que escrever uma nota de aplicativo falsa para uma aula na faculdade sobre como usar um gatilho schmitt para desligar o interruptor.
a modificação no esquema do circuito era bem simples. Basta adicionar o gatilho schmitt à saída do 555 e, em seguida, conectar isso ao cabeçalho do ventilador:
a única complicação para isso veio no layout da placa. Eu não era capaz de encontrar um único gatilho Schmitt em um pacote através do furo. O único através de gatilhos buraco schmitt que eu encontrei (concedido Eu não fiz uma pesquisa exaustiva) foi um 4 ou 6 maneira em um pacote DIP-14. Que seria de longe o maior pacote do Conselho. Eu queria que o PCB fosse simples, pequeno e fácil de soldar à mão. Isso originalmente significava todo o furo, mas com a escolha entre um mergulho 14 e aumentando o tamanho da placa ou um único componente de Montagem Em superfície, optei por ir com os componentes SMT. Consegui encontrar um da TI em um pacote SOT-23-5, que honestamente não é difícil de soldar, basta um pouco de paciência. (ampliação ajuda)
depois de terminar o layout da placa revisada (eu encolhi muito e limpei as coisas ao mesmo tempo) eu enviei para o OSH Park para ser fabricado:
então eu soldei tudo em:
cometi um erro na nova placa; esqueci de conectar o solo do conector da placa-mãe e do lado 5V do conversor DC/DC. Nada que um pequeno fio bodge entre os pinos 1 e 3 no conversor DC/DC não pudesse consertar. (o design do pcb no repositório git já foi atualizado com essa correção) com isso e o novo gatilho schmitt funcionou perfeitamente:
e colocá-lo no meu servidor agora posso controlar as velocidades do ventilador com muita facilidade.
conclusão
este projeto me fez perceber que muitos dos controladores aleatórios e acessórios em placas-mãe de computador modernas que tomamos como certo e são projetos completamente fechados. Não há nenhuma documentação da ASUS sobre como as coisas na placa-mãe do meu servidor estão conectadas ou os protocolos que utilizam (pelo menos não que eu consegui encontrar). Comecei a pensar em meus outros computadores, incluindo minha área de trabalho e como estou controlando coisas como os ventiladores e a bomba de água lá. É a mesma história lá; Estou contando com a placa-mãe (um ASUS Rampage V Edition 10) cozido em hardware e software. Eu verifiquei e lm_sensors também não é capaz de falar com o controlador do ventilador na área de trabalho. Mas, ao contrário do meu servidor, o UEFI da área de trabalho me fornece o nível de controle necessário para ajustar a entrada de temperatura e definir curvas de ventilador personalizadas.
embora eu gostaria de ver esses projetos abertos para facilitar a alavancagem, percebo que não é muito provável que isso mude tão cedo. Mas, nesse meio tempo, podemos continuar a construir alternativas abertas para as peças de que precisamos. Atualmente, estou trabalhando em outro projeto de controlador de ventilador para minha área de trabalho para tentar começar a resolver isso. Vou construir um controlador multi-ventilador semelhante a algo como um aquacomputador aquero. Mas, construído de uma maneira totalmente aberta e com uma interface aberta e definida. Você pode acompanhar o andamento desse esforço aqui: https://github.com/mtreinish/openpwm ainda é muito cedo no design do hardware e será um projeto de longo prazo em que trabalho no meu tempo livre.