Contrôleur de ventilateur piloté par CPU et GPU : 6 étapes (avec photos)
Contrôleur de ventilateur piloté par CPU et GPU : 6 étapes (avec photos)
Anonim
Contrôleur de ventilateur piloté par CPU et GPU
Contrôleur de ventilateur piloté par CPU et GPU

J'ai récemment mis à jour ma carte graphique. Le nouveau modèle de GPU a un TDP plus élevé que mon CPU et un ancien GPU, je voulais donc également installer des ventilateurs de boîtier supplémentaires. Malheureusement, mon MOBO n'a que 3 connecteurs de ventilateur avec contrôle de vitesse, et ils ne peuvent être liés qu'à la température du processeur ou du chipset. J'ai décidé d'y remédier en concevant mon propre contrôleur de ventilateur pour PC qui lit les vitesses de rotation des ventilateurs déjà installés (à la fois ceux connectés au MOBO et pilotés par la température du processeur et ceux qui refroidissent le GPU) et dispose de deux canaux de sortie. Le canal A utilise la vitesse des ventilateurs liés à la température du CPU et du GPU pour piloter des ventilateurs de sortie à 3 broches à vitesse variable. Le canal B ne détecte que la vitesse des ventilateurs du GPU et son circuit de sortie utilise un transistor supplémentaire qui permet d'obtenir des vitesses de ventilateurs plus faibles (il fonctionne bien avec une carte graphique semi-passive).

À mon avis, la lecture de la vitesse des autres ventilateurs est plus facile et moins chère que l'installation de sondes de température supplémentaires juste à côté des processeurs recouverts de dissipateurs thermiques (il faut essentiellement connecter le fil des tachymètres des ventilateurs directement à une broche du microcontrôleur).

Certaines des méthodes de contrôle de la vitesse des ventilateurs sont décrites ici. J'ai décidé d'utiliser le PWM basse fréquence, mais avec quelques modifications à la méthode décrite dans l'article. Premièrement, chaque canal a 6 diodes connectées en série, qui peuvent être utilisées pour réduire la tension qui alimente un ventilateur de 4-5V. Dans cette configuration, les niveaux de tension PWM sont ~8V - 12V et 0V - ~8V (non disponible dans le canal A) au lieu de 0V - 12V. Cela réduit considérablement le bruit produit par le ventilateur. Une autre astuce que j'ai utilisée pour rendre le ventilateur contrôlé de cette manière plus silencieux est décrite ici. Cette astuce nécessite l'installation d'un circuit RC entre la sortie du microcontrôleur et une grille d'un MOSFET que j'ai utilisé pour commuter les niveaux de tension du ventilateur. Cela réduit la vitesse de balayage d'un signal qui contrôle le MOSFET, rendant à son tour la secousse angulaire du ventilateur pendant le changement de niveau de tension moins importante, coupant les vibrations et les pics de tension.

Fournitures

Pièces et matériaux:

  • ATtiny13 ou ATtiny13A dans un boîtier 8-PDIP
  • Prise DIP à 8 broches
  • 3x transistor IRF530
  • 12x diode 1N4007 (toute autre diode 1A avec une chute de tension d'environ 0,7V devrait fonctionner)
  • Condensateur électrolytique radial 220uF/25V
  • Condensateur électrolytique radial 10uF/16V
  • Condensateur à disque céramique 5x 100nF
  • Résistance 10k 0.25W
  • 4x 22k 0.25W résistance
  • 2x résistance 1k 0.25W
  • Bouton de commutation tactile 6x6mm
  • 2x 2 broches mâle droit 2,54 mm en-tête de broche
  • 4x connecteur de ventilateur mâle à 3 broches (Molex 2510), vous pouvez également utiliser des en-têtes de broche réguliers si vous le souhaitez (je l'ai fait), mais vous devez alors être très prudent lors de la connexion des ventilateurs, et les connecteurs femelles de ces ventilateurs seront attaché moins solidement
  • Connecteur Molex à 4 broches, boîtier femelle/broches mâles (connecteur d'alimentation AMP MATE-N-LOK 1-480424-0), j'en ai utilisé un qui faisait partie de l'adaptateur Molex mâle vers 2x SATA femelle fourni avec un ancien MOBO
  • 2x câbles de démarrage avec connecteurs femelles 2,54 mm (ou boîtiers de connecteurs + broches + fils), ils seront soudés aux fils du tachymètre des ventilateurs d'entrée (ou directement à leurs connecteurs sur PCB)
  • panneau préfabriqué (50 mm x 70 mm, réseau min 18 x 24 trous), vous pouvez également graver vous-même le panneau plaqué de cuivre et percer des trous
  • quelques morceaux de fil
  • ruban isolant
  • du ruban adhésif en aluminium (si vous souhaitez attacher le connecteur à la plaque arrière du GPU, reportez-vous à l'étape 5)
  • papier

Outils:

  • coupe diagonale
  • pinces
  • tournevis plat
  • couteau tout usage
  • multimètre
  • poste de soudure
  • souder
  • Programmeur AVR (programmeur autonome comme USBasp ou vous pouvez utiliser ArduinoISP
  • planche à pain et câbles de démarrage qui seront utilisés pour programmer le microcontrôleur en dehors du PCB (ou tout autre outil pouvant atteindre cet objectif)

Étape 1: Avis de non-responsabilité

La construction de cet appareil nécessite l'utilisation d'outils modérément dangereux et peut causer des dommages ou des dommages matériels. Certaines des étapes requises peuvent annuler la garantie de votre matériel ou même l'endommager lorsqu'elles sont mal exécutées. Vous construisez et utilisez l'appareil décrit à vos risques et périls

Étape 2: Comment fonctionne le contrôle des ventilateurs

Comment fonctionne le contrôle des ventilateurs
Comment fonctionne le contrôle des ventilateurs

Le canal A utilise deux entrées. Chacune de ces entrées du canal A a un niveau qui lui est associé, appelons ces niveaux A0 et A1. Par défaut, ces deux niveaux sont à 0. Les deux entrées ont des valeurs de seuil RPM qui leur sont associées (3 seuils par entrée). Lorsque le premier seuil est atteint, A0 ou A1 passe à 1, lorsque le deuxième passe à 2, et le troisième seuil définit l'un des niveaux d'entrée à 3. Plus tard, A0 et A1 sont combinés (simplement additionnés et empêchés d'atteindre une valeur supérieure que 3), faisant de la sortie principale un numéro de niveau du canal A dans la plage 0-3. Ce nombre est utilisé pour contrôler la vitesse des ventilateurs de sortie, 0 signifie qu'ils sont alimentés en 7-8V (cycle d'utilisation de 0%). Des niveaux de sortie plus élevés signifient que le ventilateur est alimenté à partir de 12 V complet pendant 33 %, 66 % ou 100 % d'un cycle de 100 ms ou 33 ms (cela dépend de la fréquence sélectionnée).

Le canal B n'a qu'une seule entrée (B1, physiquement, il est partagé avec le canal A [broche PB1]). Il existe six niveaux B1 possibles (1-6), le niveau par défaut est 1. Cinq valeurs de seuil existent, qui peuvent augmenter B1. B1 est utilisé comme sortie principale au niveau du canal B. Lorsqu'il est de 1, 7-8V alimentent les ventilateurs de sortie pendant 33% du temps de cycle dans un cycle, dans l'autre pour 66%, pour le reste du temps, l'alimentation est déconnectée. Le niveau 2 signifie que 66% de chaque cycle est 7-8V, reste 0V. Le niveau 3 signifie que 7-8V est constamment appliqué. Les niveaux 4 à 6 signifient que le ventilateur est alimenté à partir de 12 V complet pendant 33 %, 66 % ou 100 % du cycle, pour le reste du temps, la tension est de 7 à 8 V.

La fréquence de ce contrôle PWM par défaut est de 10 Hz. Il peut être augmenté à 30 Hz en fermant les broches du cavalier J7.

Lorsque le seuil supérieur est atteint, les niveaux A0, A1 et B1 augmentent instantanément. Cependant, lorsque les RPM chutent, le niveau est maintenu pendant 200 ms et ne peut diminuer que de 1 toutes les 200 ms. C'est pour empêcher des changements rapides de ces niveaux lorsque le régime du ventilateur d'entrée est très proche du seuil.

Étape 3: Souder des composants électroniques

Souder des composants électroniques
Souder des composants électroniques
Souder des composants électroniques
Souder des composants électroniques
Souder des composants électroniques
Souder des composants électroniques

Soudez tous les composants électroniques sur le prefboard (sauf Attiny13, il sera ensuite mis dans une prise). Utilisez des fils de cuivre (ceux de 0,5 mm de diamètre du câble UTP devraient être parfaits) pour établir les connexions électriques entre les composants. Si vous avez du mal à pousser les gros fils sortant du connecteur Molex (AMP MATE-N-LOK), vous pouvez percer des trous plus grands pour eux. Si vous ne voulez pas utiliser de perceuse, vous pouvez toujours tourner une vis plusieurs fois à l'intérieur de petits trous de préfabriqués. Assurez-vous que les fils ne provoquent aucun court-circuit.

Si vous préférez créer votre propre circuit imprimé, je fournis également des fichiers.svg (les dimensions de la carte sont de 53,34 x 63,50 mm) et.pdf (format de page A4, à l'intérieur de l'archive.zip). Un panneau plaqué cuivre simple face devrait suffire, car il n'y a qu'une seule connexion sur la face avant (elle peut être réalisée avec un fil), donc les fichiers pour la face avant sont fournis principaux afin que cette connexion puisse être identifiée.

Je vous recommande fortement de couvrir le dos du PCB avec un matériau isolant qui empêchera tout court-circuit accidentel. J'ai utilisé quelques couches de papier ordinaire qui sont maintenues aux bords du PCB par quelques bandes de ruban isolant.

Étape 4: Programmation du microcontrôleur ATtiny

Programmation du microcontrôleur ATtiny
Programmation du microcontrôleur ATtiny
Programmation du microcontrôleur ATtiny
Programmation du microcontrôleur ATtiny

Le programme qui s'exécute sur le MCU a codé en dur plusieurs seuils de vitesses de rotation des ventilateurs d'entrée. Ces seuils sont situés au début du fichier fan_controller.c. La ligne qui contient le premier seuil, responsable de la légère augmentation du niveau de sortie du canal A en réponse à un ventilateur input_0 dépassant 450 tr/min, ressemble à ceci:

#define A0_SPEED_0 3 // 450 RPM

Si vous souhaitez modifier la valeur du seuil RPM, vous devez remplacer le numéro 3 par autre chose. L'incrémentation de ce nombre de 1 changera le seuil de 150 tr/min.

Une autre chose que vous voudrez peut-être changer est la diminution du retard du niveau de sortie. Ce délai empêche les changements rapides du niveau de sortie lorsque le régime du ventilateur d'entrée est très proche du seuil. Il y a 3 lignes qui contrôlent cela (car le canal A utilise 2 entrées et le canal B en utilise 1) et la première d'entre elles ressemble à ceci:

if(channel_A0_lower_rpm_cycles > 2) {

L'augmentation du nombre 2 augmentera ce délai. Le retard est compté en cycles de 100 ms.

Pour compiler le code source puis programmer la puce, vous aurez besoin d'un logiciel. Sur une distribution Linux basée sur Debian, il peut être installé en exécutant la commande suivante:

sudo apt-get install avr-libc gcc-avr avrdude

Si vous utilisez Windows, vous pouvez essayer d'installer la suite WinAVR, qui contient également les logiciels requis.

Pour compiler le code source, vous devez exécuter ceci:

avr-gcc -mmcu=attiny13 -Os -Wall fan_controller.c -o fan_controller.out -lm

Pour créer un fichier.hex, vous devez copier cette ligne dans le terminal:

avr-objcopy -O ihex -R.eeprom fan_controller.out fan_controller.hex

Cette commande permet de vérifier la quantité de mémoire utilisée par le programme (le texte est en Flash, les données sont des variables qui seront stockées en Flash puis copiées en RAM, et bss sont des variables initialisées avec une valeur de 0 en RAM):

avr-size fan_controller.out

Lorsque votre fichier.hex est prêt, vous devez insérer ATtiny13 dans la maquette et le connecter au programmeur avec des câbles de démarrage. Il est préférable de déconnecter l'alimentation du programmateur lorsque vous le connectez au MCU. Conservez les bits de fusible par défaut (H:FF, L:6A). Si votre programmeur est USBasp, cette commande programmera la mémoire flash du MCU:

avrdude -c usbasp -p t13 -B 8 -U flash:w:fan_controller.hex

-B 8 modifie la vitesse de transmission entre le programmeur et le MCU (bitclock). Vous devrez peut-être le modifier à une valeur plus élevée si vous rencontrez des problèmes de connexion au microcontrôleur.

Lorsque le MCU est prêt, placez-le dans la prise DIP 8. Pour retirer le MCU de la planche à pain, je le soulève généralement avec un tournevis à lame plate.

Étape 5: connexion des ventilateurs à l'appareil

Connexion des ventilateurs à l'appareil
Connexion des ventilateurs à l'appareil
Connexion des ventilateurs à l'appareil
Connexion des ventilateurs à l'appareil
Connexion des ventilateurs à l'appareil
Connexion des ventilateurs à l'appareil

En tant que ventilateur d'entrée 0 (celui connecté au PB0), j'ai sélectionné l'un des ventilateurs de boîtier branchés sur MOBO, dont la vitesse variait avec la température du processeur. J'ai retiré l'isolation de la partie du fil du tachymètre du ventilateur et j'y ai soudé une extrémité du câble de démarrage. L'autre extrémité (avec un connecteur femelle de 2,54 mm qui y est attaché) sera connectée au contrôleur de ventilateur. Si le câble de démarrage est trop court, prolongez-le en soudant un autre câble entre ceux mentionnés précédemment. Ensuite, couvrez tous les conducteurs exposés avec du ruban isolant.

L'entrée 1 lit la vitesse des ventilateurs GPU (dans mon cas, il y en a en fait 3, mais il n'y a qu'un seul connecteur de ventilateur sur le PCB de la carte graphique). J'ai soudé le câble de démarrage de l'entrée 1 directement à l'un des fils du connecteur de ventilateur mini GPU à 4 broches situé sur le PCB. Comme ce fil était situé entre le PCB et la plaque arrière, j'ai d'abord isolé la plaque arrière avec un morceau de papier (en particulier parce que le matériau de la plaque arrière était assez soudable), puis j'ai fermement attaché le connecteur femelle du câble de l'autre côté de la plaque arrière à l'aide de ruban en aluminium. Ensuite, le ou les ventilateurs du GPU peuvent être connectés à la broche PB1 à l'aide d'un autre câble de démarrage (étendu). Si vous ne voulez rien souder sur le PCB de votre carte graphique, vous pouvez attacher un câble de raccordement aux fils du ventilateur ou créer un adaptateur qui sera placé entre le(s) ventilateur(s) et le connecteur sur le PCB, la décision vous appartient.

Le ventilateur transmet sa vitesse actuelle à travers le fil du tachymètre en connectant ce fil à la terre via un drain/collecteur ouvert deux fois par rotation (le rotor du ventilateur a généralement 4 pôles [NSNS] qui sont détectés par le capteur Hall, la sortie du ventilateur diminue lorsque sur le type de pôle est détecté). De l'autre côté, ce fil est généralement tiré au niveau de tension de 3,3 V. Si vous n'êtes pas sûr d'avoir le bon fil, vous pouvez utiliser un oscilloscope ou construire l'un des circuits de détection qui sont dessinés sur la dernière image de cette étape. Le premier d'entre eux vous permet de vérifier la tension maximale qui apparaît à l'emplacement mesuré, le second de vérifier si des impulsions de basse fréquence y apparaissent.

3.3V doit être lu par les broches d'entrée d'ATtiny comme état HAUT, mais si vous avez des problèmes avec cela, vous pouvez essayer de réduire la tension qui alimente le MCU (cela augmentera également la résistance des MOSFET !). Je n'ai eu aucun problème, néanmoins, j'ai décidé d'inclure cette pensée ici.

Lorsque les ventilateurs d'entrée sont prêts, vous pouvez placer le contrôleur de ventilateur dans le boîtier de votre PC, à l'endroit de votre choix. Je l'ai monté sur le côté de deux de mes baies de lecteur vides de 5,25 pouces, en le poussant entre les parties métalliques de la baie, en plaçant du papier derrière et en le verrouillant en place à l'aide d'une attache zippée enfoncée dans l'un des grands trous dans le prefboard et quelques autres trous dans la baie de 5,25 . Assurez-vous qu'aucune partie métallique du boîtier du PC ne peut toucher les conducteurs exposés du contrôleur de ventilateur.

Vous pouvez maintenant connecter des ventilateurs de sortie à 3 broches au contrôleur. Les ventilateurs de sortie connectés au canal A seront liés aux ventilateurs CPU et GPU, et la tension minimale qui les alimentera sera d'environ 7-8V. Les ventilateurs branchés sur les connecteurs de sortie B du canal ne seront entraînés que par le ou les ventilateurs du refroidisseur GPU et leur tension peut chuter à 0 V (mais seulement pendant 66 ms tous les deux cycles de 100 ms au niveau de sortie le plus bas). Les ventilateurs ne doivent pas consommer plus de 1 A par canal de sortie.

Étape 6: Autres modifications que j'ai apportées à mon PC

Autres modifications que j'ai apportées à mon PC
Autres modifications que j'ai apportées à mon PC
Autres modifications que j'ai apportées à mon PC
Autres modifications que j'ai apportées à mon PC
Autres modifications que j'ai apportées à mon PC
Autres modifications que j'ai apportées à mon PC
Autres modifications que j'ai apportées à mon PC
Autres modifications que j'ai apportées à mon PC

Le canal A entraîne deux ventilateurs situés sur le dessus de mon boîtier. Ce sont le même modèle et ils sont alimentés par la même tension, ce qui les fait tourner à des vitesses très similaires. Un certain battement audible (motif d'interférence entre deux sons de fréquences légèrement différentes) est apparu à la suite de cela. Pour y remédier j'ai installé 2 diodes (une normale et une Schottky) en série avec l'un des ventilateurs. Cela a réduit la tension et la vitesse du ventilateur, faisant disparaître le battement.

Un autre changement, qui est lié à l'un de ceux que j'ai apportés aux ventilateurs, est l'installation d'un ventilateur supérieur à soufflet mural en papier situé plus à l'avant. Son but est d'empêcher ce ventilateur d'aspirer de l'air qui n'est pas encore passé par l'un des dissipateurs thermiques. J'ai également essayé de créer d'autres murs en papier qui empêchaient l'air d'échappement du GPU d'être aspiré dans le refroidisseur du processeur. Ils ont en fait réduit la température du processeur, mais au prix d'un échauffement accru du GPU, donc à la fin je les ai supprimés.

Une autre modification inhabituelle que j'ai apportée est la suppression du filtre à poussière à l'échappement de ces deux ventilateurs supérieurs (la plupart du temps, l'air est de toute façon expulsé du boîtier, et lorsque mon PC est éteint, un tiroir situé légèrement au-dessus du boîtier du PC le protège à partir de poussière). J'ai également installé un ventilateur de 92 mm devant deux baies de lecteur vides de 5,25 pouces (le contrôleur de ventilateur est situé juste derrière). Ce ventilateur n'est tenu par aucune vis, il s'adapte juste parfaitement entre le ventilateur de 120 mm en dessous et le lecteur optique au-dessus (les surfaces des deux sont recouvertes de ruban isolant pour amortir les vibrations).