CPU- och GPU -driven fläktkontroll: 6 steg (med bilder)
CPU- och GPU -driven fläktkontroll: 6 steg (med bilder)
Anonim
CPU- och GPU -driven fläktkontroll
CPU- och GPU -driven fläktkontroll

Jag har nyligen uppgraderat mitt grafikkort. Ny GPU -modell har högre TDP än min CPU och en gammal GPU, så jag ville också installera ytterligare fläktar. Tyvärr har min MOBO bara tre fläktkontakter med varvtalsreglering, och de kan bara kopplas till CPU- eller chipset -temperaturen. Jag bestämde mig för att åtgärda detta genom att designa min egen PC -fläktkontroll som läser varvtal på redan installerade fläktar (både de som är anslutna till MOBO och drivs av CPU -temp och de som kyler GPU) och har två utgångskanaler. Kanal A använder hastighet för både CPU och GPU temperaturkopplade fläktar för att driva 3-stifts utgångsfläktar med variabel hastighet. Kanal B känner bara av GPU-fläktarnas hastighet och dess utgångskrets använder ytterligare transistor som gör det möjligt att uppnå lägre hastigheter för fläktar som drivs av den (den fungerar bra med halvpassivt grafikkort).

Enligt min mening är det lättare och billigare att läsa andra fläkthastigheter än att installera ytterligare temperatursonder bredvid processorer som är täckta med kylflänsar (det kräver i princip anslutning av fläkternas varvräknare direkt till en mikrokontrollstift).

Några av metoderna för att kontrollera fläkthastigheter beskrivs här. Jag bestämde mig för att använda lågfrekvent PWM, men med få ändringar av metoden som beskrivs i artikeln. För det första har varje kanal 6 dioder som är seriekopplade, som kan användas för att minska spänningen som driver en fläkt med 4-5V. I denna inställning är PWM -spänningsnivåerna ~ 8V - 12V och 0V - ~ 8V (finns inte i kanal A) istället för 0V - 12V. Detta minskar kraftigt buller från fläkten. Ett annat trick som jag använde för att göra fläktstyrning på detta sätt tystare beskrivs här. Detta trick kräver att man installerar RC -krets mellan mikrokontrollerns utgång och en grind till en MOSFET som jag använde för att byta fläktens spänningsnivåer. Detta minskar svänghastigheten för en signal som styr MOSFET, vilket i sin tur gör att fläktens vinkelryck under spänningsnivåförändringar blir mindre framträdande, skär vibrationer och spänningspikar.

Tillbehör

Delar och material:

  • ATtiny13 eller ATtiny13A i ett 8-PDIP-fodral
  • 8 -stifts DIP -uttag
  • 3x IRF530 -transistor
  • 12x 1N4007 -diod (någon annan 1A -diod med spänningsfall på cirka 0,7V borde fungera)
  • 220uF/25V radiell elektrolytkondensator
  • 10uF/16V radiell elektrolytkondensator
  • 5x 100nF keramisk skivkondensator
  • 10k 0,25W motstånd
  • 4x 22k 0,25W motstånd
  • 2x 1k 0,25W motstånd
  • 6x6mm taktil knapp
  • 2x 2 -stifts 2,54 mm rak hankontakt
  • 4x 3-stift hanfläktkontakt (Molex 2510), alternativt kan du använda vanliga stifthuvuden om du vill (jag gjorde det), men då måste du vara extra försiktig när du ansluter fläktar, och honkontakter till dessa fläktar kommer att vara fästs mindre säkert
  • 4-polig Molex-kontakt, hona/hanstiften (AMP MATE-N-LOK 1-480424-0 strömkontakt), jag använde en som var en del av Molex hane till 2x SATA honadapter med en gammal MOBO
  • 2x bygelkablar med 2,54 mm hankontakter (eller anslutningshöljen + stift + ledningar), de löds till ingångsfläktarnas varvräknartrådar (eller direkt till deras kontakter på kretskort)
  • prefboard (50mm x 70mm, min 18 x 24 håls array), alternativt kan du etsa kopparklädda skivor själv och borra hål
  • några bitar av tråd
  • isoleringstejp
  • aluminiumfolie tejp (om du ska ansluta kontakten till GPU: s bakplatta, se steg 5)
  • papper

Verktyg:

  • diagonal skärare
  • tång
  • platt skruvmejsel
  • verktygskniv
  • multimeter
  • lödstation
  • löda
  • AVR -programmerare (fristående programmerare som USBasp eller du kan använda ArduinoISP
  • brödbräda och bygelkablar som kommer att användas för att programmera mikrokontroller utanför kretskortet (eller något annat verktyg som kan uppnå detta mål)

Steg 1: Ansvarsfriskrivning

Konstruktion av denna enhet kräver användning av måttligt farliga verktyg och kan orsaka skada eller skada på egendom. Några av de nödvändiga stegen kan ogiltigförklara en garanti för din maskinvara eller till och med skada den vid felaktig användning. Du bygger och använder den beskrivna enheten på egen risk

Steg 2: Hur fläktkontroll fungerar

Hur fläktkontroll fungerar
Hur fläktkontroll fungerar

Kanal A använder två ingångar. Var och en av dessa kanal A -ingångar har en nivå associerad med den, låt oss kalla dessa nivåer A0 och A1. Som standard är båda dessa nivåer 0. Båda ingångarna har tröskel -RPM -värden associerade med dem (3 trösklar per ingång). När det första tröskelvärdet uppnås, ökar A0 eller A1 till 1, när det andra ökar till 2, och det tredje tröskelvärdet sätter en av ingångsnivåerna till 3. Senare kombineras A0 och A1 (läggs helt enkelt ihop och förhindras att uppnå ett högre värde än 3), vilket gör huvudutgång kanal A-nivå i 0-3-intervallet. Detta nummer används för att styra utgående fläkthastighet, 0 betyder att de drivs av 7-8V (driftscykel på 0%). Högre utgångsnivåer innebär att fläkten drivs från full 12V under 33%, 66% eller 100% av en 100ms eller 33ms cykel (det beror på vald frekvens).

Kanal B har bara en ingång (B1, fysiskt delas den med kanal A [PB1 -stift]). Det finns sex möjliga B1-nivåer (1-6), standardnivån är 1. Det finns fem tröskelvärden som kan öka B1. B1 används som huvudutgång kanal B -nivå. När det är 1, driver 7-8V utfläktarna under 33% av cykeltiden i en cykel, i den andra i 66%, under resten av tiden kopplas strömmen ifrån. Nivå 2 betyder att 66% av varje cykel är 7-8V, vila 0V. Nivå 3 innebär att 7-8V ständigt appliceras. Nivå 4-6 betyder att fläkten drivs från full 12V under 33%, 66% eller 100% av cykeln, för resten av tidspänningen är 7-8V.

Som standard är denna PWM -kontroll 10 Hz. Den kan ökas till 30 Hz genom att stänga J7 -stift.

När högre tröskel uppnås ökar nivåerna A0, A1 och B1 omedelbart. När varvtalet faller hålls dock nivån i 200 ms och kan bara minska med 1 per 200 ms. Det är för att förhindra snabba förändringar av dessa nivåer när ingångsfläktens varvtal är mycket nära tröskeln.

Steg 3: Lödning av elektroniska komponenter

Lödning av elektroniska komponenter
Lödning av elektroniska komponenter
Lödning av elektroniska komponenter
Lödning av elektroniska komponenter
Lödning av elektroniska komponenter
Lödning av elektroniska komponenter

Löd alla elektroniska komponenter till prefabriken (förutom Attiny13, den kommer senare att sättas i ett uttag). Använd koppartrådar (0,5 mm diameter från UTP -kabeln bör vara perfekta) för att göra elektriska anslutningar mellan komponenter. Om du har problem med att skjuta stora ledningar från Molex (AMP MATE-N-LOK) -kontakten kan du borra större hål för dem. Om du inte vill använda en borr kan du alltid vrida en skruv några gånger inuti små prefabricerade hål. Se till att ledningar inte orsakar några kortslutningar.

Om du föredrar att göra din egen PCB tillhandahåller jag också.svg (kortmått är 53,34x63,50mm) och.pdf (A4 -sidstorlek, inuti.zip -arkiv) filer. Enkelsidig kopparklädd bräda borde räcka, eftersom det bara finns en anslutning på framsidan (den kan göras med en tråd), så att filerna på framsidan tillhandahålls huvudsakliga så att denna anslutning kan identifieras.

Jag rekommenderar starkt att du täcker tillbaka PCB med lite isolerande material som förhindrar oavsiktliga kortslutningar. Jag använde några lager vanligt papper som hålls vid PCB: s kanter med några remsor av isoleringstejp.

Steg 4: Programmering av ATtiny Microcontroller

Programmering av ATtiny Microcontroller
Programmering av ATtiny Microcontroller
Programmering av ATtiny Microcontroller
Programmering av ATtiny Microcontroller

Program som körs på MCU har hårdkodade flera trösklar för ingångsfläktars varvtal. Dessa trösklar finns i början av fan_controller.c -filen. Linje som innehåller första tröskeln, som är ansvarig för att något ökar kanal A -utgångsnivån som svar på input_0 -fläkt över 450 varv / min, ser ut så här:

#define A0_SPEED_0 3 // 450 RPM

Om du vill ändra tröskelvärde för varvtal måste du ersätta nummer 3 med något annat. Om detta nummer ökas med 1 ändras tröskeln med 150 varv / min.

Andra saker som du kanske vill ändra är minskning av utgångsnivåfördröjning. Denna fördröjning förhindrar snabba utgångsnivåer när ingångsfläktens varvtal är mycket nära tröskeln. Det finns 3 linjer som styr detta (eftersom kanal A använder 2 ingångar och kanal B använder 1) och först av dem ser ut så här:

om (channel_A0_lower_rpm_cycles> 2) {

Att öka nummer 2 kommer att öka denna fördröjning. Fördröjning räknas i 100 ms cykler.

För att kompilera källkod och sedan programmera chip behöver du lite programvara. På en Debian-baserad Linux-distribution kan den installeras genom att köra följande kommando:

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

Om du använder Windows kan du försöka installera WinAVR suite, som också innehåller nödvändig programvara.

För att kompilera källkoden måste du köra detta:

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

För att skapa.hex -fil måste du kopiera den här raden till terminalen:

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

Detta kommando gör det möjligt att kontrollera hur mycket minne som kommer att användas (text är Flash, data är variabler som kommer att lagras i Flash och sedan kopieras till RAM, och bss är variabler som initieras med ett värde på 0 i RAM):

av_-storlek fan_controller.out

När din.hex -fil är klar måste du sätta in ATtiny13 i brödbrädan och ansluta den till programmeraren med bygelkablar. Det är bäst att koppla bort strömmen från programmeraren när du ansluter den till MCU. Behåll standard säkringsbitar (H: FF, L: 6A). Om din programmerare är USBasp kommer detta kommando att programmera MCU: s flashminne:

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

-B 8 ändrar överföringshastigheten mellan programmerare och MCU (bitklocka). Du kan behöva ändra det till ett högre värde om du har problem med att ansluta till mikrokontrollern.

När MCU är redo lägger du in den i DIP 8 -uttaget. För att ta bort MCU från brödbräda brukar jag bända den med en platt skruvmejsel.

Steg 5: Ansluta fläktar till enheten

Ansluta fläktar till enheten
Ansluta fläktar till enheten
Ansluta fläktar till enheten
Ansluta fläktar till enheten
Ansluta fläktar till enheten
Ansluta fläktar till enheten

Som en ingång 0 -fläkt (den som är ansluten till PB0) valde jag en av fläktarna som är anslutna till MOBO, vilken hastighet varierade med CPU -temperaturen. Jag tog bort isoleringen från den del av fläktens varvräknare och lödde ena änden av bygelkabeln till den. Den andra änden (med 2,54 mm honkontakt ansluten till den) kommer att anslutas till fläktkontrollen. Om bygelkabeln är för kort, förläng den genom att löda en annan kabel mellan de tidigare nämnda. Täck sedan alla exponerade ledare med isoleringstejp.

Ingång 1 läser hastigheten för GPU -fläktar (i mitt fall finns det faktiskt tre av dem, men det finns bara en fläktkontakt på grafikkortets kretskort). Jag lödde ingång 1-bygelkabel direkt till en av ledningarna på den 4-poliga mini GPU-fläktkontakten på kretskortet. Eftersom denna ledning var belägen mellan PCB och bakplatta, isolerade jag först bakplattan med ett papper först (speciellt eftersom bakplåtens material var ganska lödbart) och fäst sedan ordentligt honkontakten på kabeln på andra sidan av bakplattan med användning av aluminiumfolie tejp. Då kan GPU -fläktar anslutas till PB1 -stiftet med hjälp av en annan (förlängd) bygelkabel. Om du inte vill lödda något på ditt grafikkorts kretskort kan du fästa bygelkabel till fläktens ledningar eller göra en adapter som placeras mellan fläkt (ar) och kontakt på kretskortet, beslutet är ditt.

Fläkt överför sin nuvarande hastighet genom varvräknartråd genom att ansluta denna kabel till marken via öppet avlopp/uppsamlare två gånger per rotation (fläktens rotor har vanligtvis 4-poliga [NSNS] som detekteras av Hall-sensorn, fläktens utgång blir låg när på typ av pol detekteras). På andra sidan dras denna tråd vanligtvis till 3,3V spänningsnivå. Om du inte är säker på om du har rätt tråd kan du använda oscilloskop eller bygga en av detekteringskretsarna som drar på den sista bilden i detta steg. Först av dem kan du kontrollera maximal spänning som visas på uppmätt plats, den andra för att kontrollera om lågfrekventa pulser visas där.

3.3V bör läsas av ATtinys ingångsstiften som HIGH -tillstånd, men om du har problem med detta kan du försöka minska spänningen som driver MCU (det kommer också att öka motståndet hos MOSFET!). Jag hade inga problem, men jag bestämde mig för att inkludera denna tanke här.

När ingångsfläktarna är klara kan du placera fläktkontrollen inuti ditt PC -fodral på en plats du väljer. Jag monterade det på sidan av två av mina tomma 5,25”enhetsfack genom att skjuta det mellan metalldelar i facket, lägga lite papper bakom det och låsa det på plats med hjälp av en dragkedja tryckt genom ett av de stora hålen i prefboard och några andra hål i 5,25”-facket. Se till att inga metalldelar i PC -fodralet kan röra någon av fläktkontrollens exponerade ledare.

Nu kan du ansluta 3-poliga utgångsfläktar till styrenheten. Utgångsfläktar anslutna till kanal A kommer att kopplas till både CPU- och GPU-fläktar, och minsta spänning som driver dem kommer att vara cirka 7-8V. Fläktar som är anslutna till kanalens B -utgångar kommer endast att drivas av GPU -kylarens fläktar och deras spänning kan sjunka till 0V (men bara för 66ms varannan 100ms -cykel vid den lägsta utmatningsnivån). Fläktar bör inte dra mer än 1A per utgångskanal.

Steg 6: Andra ändringar som jag gjorde på min dator

Andra ändringar som jag gjorde på min dator
Andra ändringar som jag gjorde på min dator
Andra ändringar som jag gjorde på min dator
Andra ändringar som jag gjorde på min dator
Andra ändringar som jag gjorde på min dator
Andra ändringar som jag gjorde på min dator
Andra ändringar som jag gjorde på min dator
Andra ändringar som jag gjorde på min dator

Kanal A driver två fläktar på toppen av mitt fodral. De är samma modell och de drivs av samma spänning, vilket får dem att snurra i mycket liknande hastigheter. Något hörbart slag (interferensmönster mellan två ljud med lite olika frekvenser) dök upp som ett resultat av det. För att åtgärda detta installerade jag 2 dioder (en vanlig en och en Schottky) i serie med en av fläktarna. Detta minskade fläktens spänning och hastighet, vilket gjorde att beatet försvann.

En annan förändring, som är relaterad till en av dem till fläktar som jag gjorde, är installationen av en pappersvägg med toppfläkt som ligger mer fram. Dess syfte är att förhindra att denna fläkt suger luft som ännu inte har passerat någon av kylflänsarna. Jag försökte också göra andra pappersväggar som hindrade GPU -frånluft från att sugas in i CPU -kylaren. De sänkte faktiskt CPU -temp, men till kostnaden för GPU -värmen mer, så till slut tog jag bort dem.

En annan ovanlig ändring som jag gjorde är att ta bort dammfilter vid avgaserna från de två översta fläktarna (oftast pressas luften ur höljet i alla fall, och när min dator är avstängd skyddar lådan något ovanför PC -fodralet den från damm). Jag installerade också en 92 mm fläkt framför två tomma 5,25”enhetsfack (fläktkontrollen ligger precis bakom den). Denna fläkt hålls inte av några skruvar, passar bara fint mellan 120 mm fläkt bälg den och optisk enhet ovan (ytorna på båda är täckta med isoleringstejp för att ge viss vibrationsdämpning).