Via Flatland vers Thoughtland

J’ai récemment construit un nouveau serveur domestique, c’est une boîte polyvalente qui contiendra la plupart de mon infrastructure et c’est aussi un serveur de fichiers avec beaucoup de disques durs (et de la place pour plus à l’avenir). Tous ces disques signifiaient que cela finissait par être une très grande machine, donc il y avait de la place pour tous les mettre. J’ai fini par obtenir un CaseLabs Magnum THW10 pour l’affaire, qui a de la place pour une tonne de choses dedans. Alors que la machine fonctionne très bien et fait tout ce dont j’ai besoin, il y a un petit problème avec elle. Les ventilateurs avant ne tournent pas assez vite.

Le serveur dans mon salon après le premier démarrage. (la bouteille de soda de 2 litres est pour l’échelle)

Les disques durs sont montés derrière les ventilateurs d’admission avant et je veux m’assurer qu’ils restent au frais. Toutes les sorties des en-têtes de ventilateur PWM de la carte mère, un ASUS Z10PE-D16, sont liées aux températures du processeur. Mais, les PROCESSEURS ne deviennent pas vraiment trop chauds sur le serveur, de sorte que les ventilateurs de boîtier dépassent rarement (voire jamais) leur vitesse minimale. Ma solution normale pour ce problème est d’utiliser l’utilité de fancontrol qui fait partie de lm_sensors. Cependant, lm_sensors n’est pas en mesure de détecter les contrôleurs de ventilateur sur la carte mère. Je pense que c’est parce que le contrôle du ventilateur est effectué par le BMC sur la carte mère et lm_sensors ne prend pas en charge le BMC. Je n’ai pas pu trouver d’option pour le contrôle du ventilateur dans l’interface Web du BMC, donc je ne suis pas sûr. De toute façon, j’ai décidé qu’il serait beaucoup plus facile de simplement construire un contrôleur de ventilateur pour pouvoir définir manuellement une vitesse de ventilateur pour les ventilateurs d’entrée.

Construction d’un contrôleur de ventilateur

Le serveur dispose de 8 ventilateurs avant de 120 mm, 1 ventilateur arrière de 120 mm et 6 ventilateurs d’échappement supérieurs de 140 mm installés. Cependant, parce que la carte mère n’a que quelques en-têtes de ventilateur, j’ai 2 diviseurs alimentés Silverstone CPF04. Les 8 ventilateurs avant sont connectés à un séparateur et les 6 ventilateurs d’extraction supérieurs à l’autre. Pour ce projet, je voulais simplement coller un contrôleur entre l’en-tête du ventilateur à 4 broches de la carte mère qui me permet d’ajuster le signal de commande PWM envoyé aux ventilateurs. Cela ne prendrait que l’alimentation de la carte mère et générerait sa propre sortie PWM indépendante. Étant donné que les répartiteurs sont alimentés indépendamment, je n’aurais pas à m’inquiéter du routage de l’alimentation de la carte mère vers les ventilateurs.

Il existe des solutions commerciales, comme le Noctua NA FC1, qui sont assez proches de ce que je cherchais. Le problème avec le contrôleur Noctua pour mon cas d’utilisation était qu’il ne me laisserait pas régler le mode manuel complet si l’en-tête de la carte mère était branché. Je pourrais créer un câble personnalisé qui n’avait pas la broche PWM connectée, mais je paierais alors pour un tas de fonctionnalités que je ne voulais pas réellement.

Conception du contrôleur

J’ai fait quelques recherches sur google pour voir ce que la plupart des gens faisaient car la construction d’un contrôleur de ventilateur n’est pas une chose unique. La plupart des exemples que j’ai trouvés ont construit un circuit avec une minuterie 555 en mode astable avec un potentiomètre pour ajuster le rapport cyclique de la forme d’onde de sortie. J’ai donc décidé de faire la même chose. Après avoir lu la spécification Intel pour les ventilateurs PWM à 4 fils, j’ai compris mes contraintes de conception pour l’oscillateur. Le circuit devait avoir une fréquence de sortie de ~ 25 kHz et fonctionner à 5 volts. Compte tenu de cela, je me suis installé sur ce circuit:

Il a été principalement emprunté aux circuits que j’ai trouvés en recherchant sur Internet des projets similaires. Mais j’ai dû ajuster certaines des valeurs des composants pour répondre aux spécifications de contrôle du ventilateur.

À partir de là, j’ai conçu un PCB pour ce circuit en utilisant KiCad. J’ai spécialement conçu le PCB pour qu’il soit facile à assembler, en utilisant tous les composants du trou traversant. Alors que j’aurais facilement pu le rendre beaucoup plus petit en utilisant des composants à montage en surface, je voulais que ce soit un bon projet pour les personnes qui commencent tout juste à souder. Ce n’est pas un projet très complexe et j’ai eu l’impression qu’il pourrait y avoir des gens avec un besoin similaire pour cela. Mais, même avec cette contrainte, la carte est encore assez petite à seulement 35mm x 44mm. (surtout parce que c’est un circuit simple.

Toutes les conceptions pour cela sont open source et peuvent être trouvées sur mon github à:

https://github.com/mtreinish/pwmcontroller

Assembler le contrôleur

Après avoir terminé une conception fonctionnelle, je l’ai envoyé à elecrow pour que la carte soit fabriquée. Quelques semaines plus tard, je me suis fait livrer les planches. (J’ai craqué sur l’expédition qui l’a fait prendre plus de temps, les planches ont été fabriquées en < 1 semaine)

Ensuite, j’ai soudé les composants sur la carte

Ensuite, j’ai installé le nouveau contrôleur sur mon serveur, et bien sûr, cela n’a pas fonctionné. J’ai donc emmené le circuit imprimé sur mon banc et l’ai testé avec un oscilloscope, une alimentation de banc et un ventilateur de rechange. Il s’avère qu’il y avait deux problèmes. Tout d’abord, la minuterie 555 sortait à 3,8-4,2 V au lieu des 5V demandés dans la spécification. Le deuxième problème était que la sortie n’était pas vraiment une onde carrée non plus:

Deuxième tentative

Pour corriger les problèmes que j’ai trouvés lors de la première tentative, j’ai légèrement modifié mon circuit et ajouté un déclencheur schmitt sur la sortie. Cela aurait trois avantages: cela nettoierait l’onde carrée, accélérerait les bords montant et descendant et garantirait une sortie 5V stable. C’est en fait assez drôle, j’ai décidé / je me suis souvenu d’utiliser le déclencheur schmitt parce que j’ai dû écrire une fausse note d’application pour une classe au collège sur l’utilisation d’un déclencheur schmitt pour le dé-rebondissement du commutateur.

La modification du schéma de circuit était assez simple. Ajoutez simplement le déclencheur schmitt à la sortie du 555, puis câblez-le à l’en-tête du ventilateur:

La seule complication à cela est venue de la disposition du tableau. Je n’ai pas pu trouver un seul déclencheur Schmitt dans un paquet de trous traversants. Les seuls déclencheurs de schmitt à trou traversant que j’ai trouvés (certes, je n’ai pas fait de recherche exhaustive) étaient à 4 ou 6 voies dans un package DIP-14. Ce qui serait de loin le plus gros paquet du tableau. Je voulais que le PCB soit simple, petit et facile à souder à la main. Cela signifiait à l’origine tout le trou traversant, mais avec le choix entre un DIP 14 et l’augmentation de la taille de la carte ou un seul composant de montage en surface, j’ai choisi d’opter pour les composants SMT. J’ai pu en trouver un de TI dans un paquet SOT-23-5, qui n’est honnêtement pas difficile à souder, il faut juste un peu de patience. (le grossissement aide)

Après avoir terminé la mise en page révisée de la carte (je l’ai beaucoup réduite et j’ai nettoyé les choses en même temps), je l’ai envoyée à OSH Park pour être fabriquée:

Puis j’ai tout soudé sur:

À côté de la carte d’origine défectueuse

J’ai fait une erreur sur la nouvelle carte; j’ai oublié de connecter la terre à partir du connecteur de la carte mère et du côté 5V du convertisseur CC / CC. Rien qu’un petit fil de bodge entre les broches 1 et 3 du convertisseur CC / CC ne puisse réparer. (la conception du PCB dans le dépôt git a déjà été mise à jour avec cette correction) Avec cela et le nouveau déclencheur schmitt, les choses ont parfaitement fonctionné:

et en le mettant sur mon serveur maintenant, je peux contrôler très facilement la vitesse du ventilateur.

Conclusion

Ce projet m’a fait réaliser que beaucoup de contrôleurs aléatoires et d’accessoires sur les cartes mères d’ordinateurs modernes que nous tenons pour acquis et sont des conceptions complètement fermées. Il n’y a aucune documentation d’ASUS sur la façon dont les choses sur ma carte mère de serveur sont câblées ou les protocoles qu’elles utilisent (du moins pas que j’ai pu trouver). J’ai commencé à penser à mes autres ordinateurs, y compris mon bureau, et à la façon dont je contrôle des choses comme les ventilateurs et la pompe à eau. C’est la même histoire là-bas; Je compte sur la carte mère (une ASUS Rampage V Edition 10) cuite dans le matériel et les logiciels. J’ai vérifié et lm_sensors n’est pas non plus en mesure de parler au contrôleur de ventilateur sur le bureau. Mais, contrairement à mon serveur, l’UEFI du bureau me fournit le niveau de contrôle nécessaire pour ajuster l’entrée de température et définir des courbes de ventilateur personnalisées.

Bien que j’aimerais voir ces conceptions ouvertes pour le rendre plus facile à exploiter, je me rends compte que ce n’est pas très susceptible de changer de sitôt. Mais en attendant, nous pouvons continuer à construire des alternatives ouvertes pour les pièces dont nous avons besoin. Je travaille actuellement sur un autre projet de contrôleur de ventilateur pour mon bureau pour essayer de commencer à résoudre ce problème. Je vais construire un contrôleur multi-ventilateurs similaire à quelque chose comme un aquacomputer aquero. Mais, construit de manière ouverte et avec une interface ouverte et définie. Vous pouvez suivre l’avancement de cet effort ici: https://github.com/mtreinish/openpwm Il est encore très tôt dans la conception du matériel et ce sera un projet à très long terme sur lequel je travaillerai pendant mon temps libre.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.