Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Ik heb onlangs mijn grafische kaart geüpgraded. Nieuw GPU-model heeft een hoger TDP dan mijn CPU en een oude GPU, dus ik wilde ook extra casefans installeren. Helaas heeft mijn MOBO slechts 3 ventilatoraansluitingen met snelheidsregeling, en deze kunnen alleen worden gekoppeld aan de CPU- of chipsettemperatuur. Ik besloot dit te verhelpen door mijn eigen pc-ventilatorcontroller te ontwerpen die RPM-snelheden leest van reeds geïnstalleerde ventilatoren (zowel die aangesloten op de MOBO als aangedreven door CPU-temperatuur en degenen die GPU koelen) en twee uitgangskanalen heeft. Kanaal A gebruikt de snelheid van zowel CPU- als GPU-temperatuurgekoppelde ventilatoren om 3-pins uitvoerventilatoren met variabele snelheid aan te sturen. Kanaal B detecteert alleen de GPU-ventilatorsnelheid en het uitgangscircuit gebruikt een extra transistor die het mogelijk maakt om lagere snelheden te bereiken van de ventilatoren die erdoor worden aangedreven (het werkt goed met een semi-passieve grafische kaart).
Het lezen van de snelheid van andere ventilatoren is naar mijn mening gemakkelijker en goedkoper dan het installeren van extra temperatuursondes direct naast processors die bedekt zijn met koellichamen (het vereist in feite dat de tachometerdraad van de ventilator rechtstreeks op een microcontroller-pin wordt aangesloten).
Enkele methoden voor het regelen van ventilatorsnelheden worden hier beschreven. Ik besloot om laagfrequente PWM te gebruiken, maar met enkele aanpassingen aan de methode die in het artikel wordt beschreven. Ten eerste heeft elk kanaal 6 diodes die in serie zijn geschakeld, die kunnen worden gebruikt om de spanning die een ventilator van stroom voorziet met 4-5V te verminderen. In deze opstelling zijn de PWM-spanningsniveaus ~8V – 12V en 0V - ~8V (niet beschikbaar in kanaal A) in plaats van 0V – 12V. Dit vermindert het geluid dat door de ventilator wordt geproduceerd aanzienlijk. Een andere truc die ik gebruikte om de ventilator op deze manier stiller te maken, wordt hier beschreven. Deze truc vereist het installeren van een RC-circuit tussen de uitgang van de microcontroller en een poort van een MOSFET die ik gebruikte om de spanningsniveaus van de ventilator te schakelen. Dit vermindert de zwenksnelheid van een signaal dat de MOSFET bestuurt, waardoor de hoekschok van de ventilator tijdens het veranderen van het spanningsniveau minder prominent wordt, waardoor trillingen en spanningspieken worden verminderd.
Benodigdheden
Onderdelen en materialen:
- ATtiny13 of ATtiny13A in een 8-PDIP-behuizing
- 8-pins DIP-aansluiting
- 3x IRF530-transistor
- 12x 1N4007-diode (elke andere 1A-diode met een spanningsval van ongeveer 0,7V zou moeten werken)
- 220uF/25V radiale elektrolytische condensator
- 10uF/16V radiale elektrolytische condensator
- 5x 100nF keramische schijfcondensator
- 10k 0.25W weerstand
- 4x 22k 0.25W weerstand
- 2x 1k 0.25W weerstand
- 6x6mm tactiele schakelknop
- 2x 2-pins 2,54 mm rechte mannelijke pin-header
- 4x 3-pins mannelijke ventilatorconnector (Molex 2510), als alternatief kun je gewone pin-headers gebruiken als je wilt (ik deed het), maar dan moet je extra voorzichtig zijn bij het aansluiten van fans, en vrouwelijke connectoren van die fans zullen minder stevig bevestigd
- 4-pins Molex-connector, vrouwelijke behuizing / mannelijke pinnen (AMP MATE-N-LOK 1-480424-0 voedingsconnector), ik gebruikte er een die deel uitmaakte van Molex mannelijk naar 2x SATA vrouwelijke adapter gebundeld met een oude MOBO
- 2x startkabels met 2,54 mm vrouwelijke connectoren (of connectorbehuizingen + pinnen + draden), ze worden gesoldeerd aan de toerentellerdraden van de invoerventilatoren (of rechtstreeks aan hun connectoren op PCB's)
- prefboard (50 mm x 70 mm, min 18 x 24 gaten), als alternatief kunt u zelf koperen plaat etsen en gaten boren
- paar stukjes draad
- isolatieband
- aluminiumfolietape (zie stap 5 als u de connector op de GPU-achterplaat wilt bevestigen)
- papier
Gereedschap:
- diagonale snijder
- tang
- platte schroevendraaier
- mes
- multimeter
- soldeerstation
- soldeer
- AVR-programmeur (zelfstandige programmeur zoals USBasp of u kunt ArduinoISP gebruiken)
- breadboard- en startkabels die zullen worden gebruikt om de microcontroller buiten de PCB te programmeren (of een ander hulpmiddel dat dit doel kan bereiken)
Stap 1: Disclaimer
De constructie van dit apparaat vereist het gebruik van matig gevaarlijk gereedschap en kan schade aan eigendommen veroorzaken. Sommige van de vereiste stappen kunnen een garantie van uw hardware ongeldig maken of deze zelfs beschadigen wanneer deze onjuist wordt uitgevoerd. U bouwt en gebruikt het beschreven apparaat op eigen risico
Stap 2: Hoe ventilatorregeling werkt
Kanaal A gebruikt twee ingangen. Elk van die kanaal A-ingangen heeft een bijbehorende niveau, laten we die niveaus A0 en A1 noemen. Standaard zijn beide niveaus 0. Aan beide ingangen zijn drempel RPM-waarden gekoppeld (3 drempels per ingang). Wanneer de eerste drempel is bereikt, wordt A0 of A1 verhoogd tot 1, wanneer de tweede wordt verhoogd tot 2, en de derde drempel stelt een van de invoerniveaus in op 3. Later worden A0 en A1 gecombineerd (gewoon bij elkaar opgeteld en wordt voorkomen dat een hogere waarde wordt bereikt dan 3), waardoor het hoofduitgangskanaal A-niveaunummer in het bereik van 0-3 ligt. Dit nummer wordt gebruikt om de snelheid van de uitvoerventilatoren te regelen, 0 betekent dat ze worden gevoed door 7-8V (inschakelduur van 0%). Hogere uitgangsniveaus betekenen dat de ventilator wordt gevoed met volledige 12V gedurende 33%, 66% of 100% van een cyclus van 100 ms of 33 ms (afhankelijk van de geselecteerde frequentie).
Kanaal B heeft slechts één ingang (B1, fysiek wordt deze gedeeld met kanaal A [PB1-pin]). Er zijn zes mogelijke B1-niveaus (1-6), het standaardniveau is 1. Er zijn vijf drempelwaarden die B1 kunnen verhogen. B1 wordt gebruikt als hoofduitgangskanaal B-niveau. Als het 1, 7-8V is, voedt 7-8V de uitvoerventilatoren voor 33% van de cyclustijd in één cyclus, in de andere voor 66%, voor de rest van de tijd is de stroom uitgeschakeld. Niveau 2 betekent dat 66% van elke cyclus 7-8V is, rust 0V. Niveau 3 betekent dat er constant 7-8V wordt toegepast. Niveaus 4-6 betekenen dat de ventilator gedurende 33%, 66% of 100% van de cyclus wordt gevoed met volledige 12V, voor de rest van de tijd is de spanning 7-8V.
De frequentie van deze PWM-besturing is standaard 10 Hz. Het kan worden verhoogd tot 30 Hz door J7-jumperpinnen te sluiten.
Wanneer een hogere drempel wordt bereikt, nemen de A0-, A1- en B1-niveaus onmiddellijk toe. Wanneer RPM's echter dalen, wordt het niveau 200 ms vastgehouden en mag het slechts met 1 per 200 ms afnemen. Het is bedoeld om snelle veranderingen van die niveaus te voorkomen wanneer het toerental van de ingangsventilator zeer dicht bij de drempel ligt.
Stap 3: Solderen van elektronische componenten
Soldeer alle elektronische componenten op het prefboard (behalve Attiny13, deze wordt later in een socket geplaatst). Gebruik koperdraden (0,5 mm diameter van de UTP-kabel zou perfect moeten zijn) om elektrische verbindingen tussen componenten te maken. Als je problemen hebt met het duwen van grote draden die uit de Molex (AMP MATE-N-LOK)-connector komen, kun je er grotere gaten voor boren. Als je geen boor wilt gebruiken, kun je altijd een paar keer een schroef in kleine prefboard-gaatjes draaien. Zorg ervoor dat draden geen kortsluiting veroorzaken.
Als u liever uw eigen PCB maakt, lever ik ook.svg-bestanden (afmetingen van het bord zijn 53,34x63,50 mm) en.pdf-bestanden (A4-paginaformaat, in.zip-archief). Enkelzijdig met koper beklede plaat zou voldoende moeten zijn, aangezien er slechts één aansluiting aan de voorzijde is (deze kan met een draad worden gemaakt), dus bestanden voor de voorzijde worden hoofd geleverd zodat deze aansluiting kan worden geïdentificeerd.
Ik raad u ten zeerste aan om de achterkant van de PCB te bedekken met wat isolatiemateriaal dat onbedoelde kortsluitingen voorkomt. Ik heb een paar lagen gewoon papier gebruikt die door een paar stroken isolatietape aan de randen van de printplaat worden vastgehouden.
Stap 4: ATtiny-microcontroller programmeren
Het programma dat op de MCU draait, heeft verschillende drempels voor de RPM-snelheden van de invoerventilatoren hard gecodeerd. Die drempels bevinden zich aan het begin van het fan_controller.c-bestand. Regel die de eerste drempel bevat, die verantwoordelijk is voor het iets verhogen van het uitgangsniveau van kanaal A als reactie op een input_0-ventilator die 450 RPM overschrijdt, ziet er als volgt uit:
#define A0_SPEED_0 3 // 450 RPM
Als u de drempelwaarde voor RPM wilt wijzigen, moet u nummer 3 door iets anders vervangen. Door dit aantal met 1 te verhogen, wordt de drempel met 150 RPM gewijzigd.
Een ander ding dat u misschien wilt veranderen, is het verminderen van de vertraging van het uitgangsniveau. Deze vertraging voorkomt snelle veranderingen van het uitgangsniveau wanneer het toerental van de ingangsventilator zeer dicht bij de drempel ligt. Er zijn 3 lijnen die dit regelen (omdat kanaal A 2 ingangen gebruikt en kanaal B 1) en de eerste ziet er als volgt uit:
if(channel_A0_lower_rpm_cycles> 2) {
Als u nummer 2 verhoogt, wordt deze vertraging groter. De vertraging wordt geteld in cycli van 100 ms.
Om de broncode te compileren en vervolgens de chip te programmeren heb je wat software nodig. Op een op Debian gebaseerde Linux-distributie kan het worden geïnstalleerd door het volgende commando uit te voeren:
sudo apt-get install avr-libc gcc-avr avrdude
Als u Windows gebruikt, kunt u proberen de WinAVR-suite te installeren, die ook de vereiste software bevat.
Om de broncode te compileren, moet u dit uitvoeren:
avr-gcc -mmcu=attiny13 -Os -Wall fan_controller.c -o fan_controller.out -lm
Om een .hex-bestand te maken, moet u deze regel naar de terminal kopiëren:
avr-objcopy -O ihex -R.eeprom fan_controller.out fan_controller.hex
Met deze opdracht kunt u controleren hoeveel geheugen het programma zal gebruiken (tekst is Flash, gegevens zijn variabelen die in Flash worden opgeslagen en vervolgens naar RAM worden gekopieerd, en bss zijn variabelen die worden geïnitialiseerd met een waarde van 0 in RAM):
avr-formaat fan_controller.out
Wanneer je.hex-bestand klaar is, moet je ATtiny13 in het breadboard plaatsen en het met startkabels op de programmer aansluiten. Het is het beste om de stroom naar de programmer los te koppelen wanneer u deze op de MCU aansluit. Houd standaard zekeringbits (H:FF, L:6A). Als uw programmeur USBasp is, programmeert deze opdracht het flashgeheugen van de MCU:
avrdude -c usbasp -p t13 -B 8 -U flash:w:fan_controller.hex
-B 8 verandert de transmissiesnelheid tussen programmeur en MCU (bitclock). Mogelijk moet u deze naar een hogere waarde wijzigen als u problemen ondervindt bij het verbinden met de microcontroller.
Wanneer MCU ons klaar is, plaats het dan in de DIP 8-socket. Om MCU van breadboard te verwijderen, wrik ik het meestal los met een platte schroevendraaier.
Stap 5: Ventilatoren aansluiten op het apparaat
Als een Input 0-ventilator (degene die is aangesloten op de PB0) selecteerde ik een van de case-fans aangesloten op MOBO, waarvan de snelheid varieerde met de CPU-temperatuur. Ik heb de isolatie van het deel van de toerentellerdraad van de ventilator verwijderd en het ene uiteinde van de startkabel eraan gesoldeerd. Het andere uiteinde (met een vrouwelijke connector van 2,54 mm eraan) wordt aangesloten op de ventilatorcontroller. Als de jumperkabel te kort is, verleng deze dan door een andere kabel tussen de eerder genoemde kabels te solderen. Bedek vervolgens alle blootliggende geleiders met isolatietape.
Ingang 1 leest de snelheid van GPU-fans (in mijn geval zijn het er eigenlijk 3, maar er is slechts één ventilatorconnector op de printplaat van de grafische kaart). Ik heb Input 1 jumperkabel rechtstreeks gesoldeerd aan een van de draden van de 4-pins mini GPU-ventilatorconnector op de PCB. Omdat deze kabel zich tussen de printplaat en de achterplaat bevond, heb ik eerst de achterplaat geïsoleerd met een stuk papier (vooral omdat het materiaal van de achterplaat vrij soldeerbaar was) en vervolgens de vrouwelijke connector van de kabel stevig aan de andere kant van de achterplaat bevestigd met behulp van aluminiumfolietape. Vervolgens konden GPU-ventilator(en) worden aangesloten op PB1-pin met behulp van een andere (verlengde) jumperkabel. Als je niets op de printplaat van je grafische kaart wilt solderen, kun je een jumperkabel aan de draden van de ventilator bevestigen of een adapter maken die tussen de ventilator(en) en de connector op de printplaat wordt geplaatst, de beslissing is aan jou.
Ventilator zendt zijn huidige snelheid door toerentellerdraad door deze draad via open afvoer/collector twee keer per omwenteling met de grond te verbinden (de rotor van de ventilator heeft meestal 4-polige [NSNS] die worden gedetecteerd door Hall-sensor, de uitvoer van de ventilator wordt laag wanneer op type paal wordt gedetecteerd). Aan de andere kant wordt deze draad meestal naar het spanningsniveau van 3,3 V getrokken. Als je niet zeker weet of je de juiste draad hebt, kun je een oscilloscoop gebruiken of een van de detectiecircuits bouwen die op de laatste afbeelding in deze stap zijn getekend. Ten eerste kunt u de maximale spanning controleren die op de gemeten locatie verschijnt, de tweede om te controleren of laagfrequente pulsen daar verschijnen.
3.3V moet door de ingangspinnen van ATtiny worden gelezen als HIGH-status, maar als je hier problemen mee hebt, kun je proberen de spanning die MCU van stroom voorziet te verlagen (het zal ook de weerstand van MOSFET's verhogen!). Ik had geen problemen, toch besloot ik dat ik deze gedachte hier moest opnemen.
Wanneer de invoerventilatoren gereed zijn, kunt u de ventilatorcontroller in uw pc-behuizing plaatsen op een plaats naar keuze. Ik heb hem aan de zijkant van twee van mijn lege 5,25-inch drive bays gemonteerd door hem tussen metalen delen van de bay te duwen, er wat papier achter te plaatsen en hem op zijn plaats te vergrendelen met behulp van een ritssluiting die door een van de grote gaten is geduwd in prefboard en enkele andere gaten in de 5,25-inch baai. Zorg ervoor dat er geen metalen delen van de pc-behuizing in aanraking kunnen komen met de blootliggende geleiders van de ventilatorcontroller.
Nu kunt u 3-pins uitgangsventilatoren op de controller aansluiten. Uitgangsventilatoren die op kanaal A zijn aangesloten, worden gekoppeld aan zowel CPU- als GPU-ventilatoren, en de minimale spanning die ze van stroom voorziet, is ongeveer 7-8V. Ventilatoren die zijn aangesloten op de B-uitgangen van het kanaal, worden alleen aangedreven door de GPU-koelerventilator(en) en hun spanning kan dalen tot 0 V (maar slechts gedurende 66 ms per seconde 100 ms-cyclus op het laagste uitgangsniveau). Ventilatoren mogen niet meer dan 1A per uitgangskanaal trekken.
Stap 6: Andere wijzigingen die ik op mijn pc heb aangebracht
Kanaal A drijft twee ventilatoren aan die zich bovenop mijn kast bevinden. Ze zijn van hetzelfde model en worden aangedreven door dezelfde spanning, waardoor ze met zeer vergelijkbare snelheden ronddraaien. Als gevolg daarvan verscheen er een hoorbare beat (interferentiepatroon tussen twee geluiden van enigszins verschillende frequenties). Om dit te verhelpen heb ik 2 diodes (een gewone en een Schottky) in serie met een van de ventilatoren geplaatst. Dit verminderde de spanning en snelheid van de ventilator, waardoor de beat verdween.
Een andere verandering, die verband houdt met een van de ventilatoren die ik heb gemaakt, is de installatie van een balgventilator met een papieren muur die meer naar voren is geplaatst. Het doel is om te voorkomen dat deze ventilator lucht aanzuigt die nog niet door een van de koellichamen is gegaan. Ik heb ook geprobeerd andere papieren wanden te maken die verhinderden dat GPU-uitlaatlucht in de CPU-koeler werd gezogen. Ze verlaagden eigenlijk de CPU-temperatuur, maar ten koste van de GPU die meer opwarmde, dus uiteindelijk heb ik ze verwijderd.
Een andere ongebruikelijke wijziging die ik heb aangebracht, is het verwijderen van het stoffilter bij de uitlaat van die twee bovenste ventilatoren (meestal wordt er toch lucht uit de behuizing geduwd, en wanneer mijn pc uit staat, beschermt de lade die zich iets boven de pc-behuizing bevindt het van stof). Ik heb ook een ventilator van 92 mm geïnstalleerd voor twee lege 5,25-inch schijfposities (de ventilatorcontroller bevindt zich er net achter). Deze ventilator wordt niet vastgehouden door schroeven, hij past gewoon mooi tussen de 120 mm ventilator en het optische station erboven (de oppervlakken van beide zijn bedekt met isolatietape om trillingen te dempen).