CPU- og GPU -drevet viftekontroller: 6 trinn (med bilder)
CPU- og GPU -drevet viftekontroller: 6 trinn (med bilder)
Anonim
CPU- og GPU -drevet viftekontroller
CPU- og GPU -drevet viftekontroller

Jeg har nylig oppgradert grafikkortet. Ny GPU -modell har høyere TDP enn CPU -en min og en gammel GPU, så jeg ønsket også å installere ekstra vifter. Dessverre har min MOBO bare 3 viftekontakter med hastighetskontroll, og de kan bare kobles til CPU- eller brikkesettemperaturen. Jeg bestemte meg for å rette opp dette, ved å designe min egen PC -viftekontroller som leser RPM -hastigheter på allerede installerte vifter (både de som er koblet til MOBO og drives av CPU -temp og de som kjøler GPU) og har to utgangskanaler. Kanal A bruker hastigheten til både CPU og GPU temperaturkoblede vifter for å drive 3-pinners utgangsvifter med variabel hastighet. Kanal B registrerer bare GPU-vifterens hastighet, og utgangskretsen bruker ekstra transistor som gjør det mulig å oppnå lavere hastigheter på vifter som drives av den (den fungerer bra med semi-passivt grafikkort).

Etter min mening er det lettere å lese andre viftehastigheter enn å installere ekstra temperaturprober ved siden av prosessorer som er dekket av kjøleribber (det krever i utgangspunktet å koble viftens turteller direkte til en mikrokontroller -pin).

Noen av metodene for å kontrollere viftehastigheter er beskrevet her. Jeg bestemte meg for å bruke lavfrekvent PWM, men med få endringer i metoden beskrevet i artikkelen. For det første har hver kanal 6 dioder seriekoblet, som kan brukes til å redusere spenningen som driver en vifte med 4-5V. I dette oppsettet er PWM spenningsnivåer ~ 8V - 12V og 0V - ~ 8V (ikke tilgjengelig i kanal A) i stedet for 0V - 12V. Dette reduserer støyen fra viften sterkt. Et annet triks som jeg brukte for å gjøre viftekontrollert på denne måten mer stille, er beskrevet her. Dette trikset krever å installere RC -krets mellom mikrokontrollerens utgang og en port til en MOSFET som jeg brukte til å bytte vifts spenningsnivå. Dette reduserer svingningshastigheten til et signal som styrer MOSFET, noe som igjen gjør viftens vinkelrykk under spenningsnivåendringer mindre fremtredende, noe som reduserer vibrasjon og spenningsspisser.

Rekvisita

Deler og materialer:

  • ATtiny13 eller ATtiny13A i et 8-PDIP-tilfelle
  • 8 -pins DIP -kontakt
  • 3x IRF530 transistor
  • 12x 1N4007 diode (enhver annen 1A diode med spenningsfall på rundt 0,7V bør fungere)
  • 220uF/25V radial elektrolytisk kondensator
  • 10uF/16V radial elektrolytisk kondensator
  • 5x 100nF keramisk skivekondensator
  • 10k 0,25W motstand
  • 4x 22k 0,25W motstand
  • 2x 1k 0,25W motstand
  • 6x6mm taktil bryterknapp
  • 2x 2 -pinners 2,54 mm rett hannstift
  • 4x 3-pinners hankontakt (Molex 2510), alternativt kan du bruke vanlige stifthoder hvis du vil (jeg gjorde det), men da må du være ekstra forsiktig når du kobler til vifter, og hunkontakter til disse viftene vil være festet mindre sikkert
  • 4-pinners Molex-kontakt, hunhus/hannpinner (AMP MATE-N-LOK 1-480424-0 strømkontakt), jeg brukte en som var en del av Molex male til 2x SATA hunnadapter sammen med noen gamle MOBO
  • 2x jumperkabler med 2,54 mm hunkontakter (eller kontakthus + pinner + ledninger), de vil bli loddet til inngangsvifterens turteller (eller direkte til kontaktene på PCB)
  • prefboard (50 mm x 70 mm, min. 18 x 24 hulls array), alternativt kan du etse kobberplater selv og bore hull
  • noen biter av ledning
  • isoleringstape
  • aluminiumsfoliebånd (hvis du skal feste kontakten til GPU -bakplaten, se trinn 5)
  • papir

Verktøy:

  • diagonal kutter
  • tang
  • flat skrutrekker
  • verktøykniv
  • multimeter
  • loddestasjon
  • loddetinn
  • AVR -programmerer (frittstående programmerer som USBasp eller du kan bruke ArduinoISP
  • brødbrett og startkabler som skal brukes til å programmere mikrokontroller utenfor PCB (eller annet verktøy som kan oppnå dette målet)

Trinn 1: Ansvarsfraskrivelse

Konstruksjon av denne enheten krever bruk av moderat farlige verktøy og kan forårsake skade eller skade på eiendom. Noen av de nødvendige trinnene kan ugyldiggjøre en garanti for maskinvaren din eller til og med skade den når den utføres feil. Du bygger og bruker beskrevet enhet på egen risiko

Trinn 2: Hvordan viftestyring fungerer

Slik fungerer viftekontroll
Slik fungerer viftekontroll

Kanal A bruker to innganger. Hver av disse kanal A -inngangene har et nivå som er knyttet til det, lar oss kalle disse nivåene A0 og A1. Som standard er begge disse nivåene 0. Begge inngangene har terskel -RPM -verdier knyttet til dem (3 terskler per inngang). Når den første terskelen er oppnådd, øker A0 eller A1 til 1, når den andre øker til 2, og den tredje terskelen setter ett av inngangsnivåene til 3. Senere kombineres A0 og A1 (ganske enkelt lagt sammen og forhindret i å oppnå en høyere verdi enn 3), noe som gjør hovedutgangskanal A nivånummer i 0-3-området. Dette tallet brukes til å kontrollere utgangsviftens hastighet, 0 betyr at de drives av 7-8V (driftssyklus på 0%). Høyere utgangsnivåer betyr at viften drives fra full 12V i 33%, 66% eller 100% av en 100ms eller 33ms syklus (det avhenger av valgt frekvens).

Kanal B har bare én inngang (B1, fysisk deles den med kanal A [PB1 -pin]). Det er seks mulige B1-nivåer (1-6), standardnivået er 1. Det finnes fem terskelverdier som kan øke B1. B1 brukes som hovedutgang kanal B -nivå. Når den er 1, driver 7-8V utgangsvifter for 33% av syklustiden i en syklus, i den andre for 66%, for resten av tiden er strømmen frakoblet. Nivå 2 betyr at 66% av hver syklus er 7-8V, hvile 0V. Nivå 3 betyr at 7-8V tilføres konstant. Nivå 4-6 betyr at viften er drevet fra full 12V i 33%, 66% eller 100% av syklusen, for resten av tidsspenningen er 7-8V.

Frekvensen til denne PWM -kontrollen er som standard 10 Hz. Den kan økes til 30Hz ved å lukke J7 -jumperpinner.

Når høyere terskel er nådd, øker nivåene A0, A1 og B1 øyeblikkelig. Når turtallene faller, holdes imidlertid nivået i 200 ms og kan bare falle med 1 per 200 ms. Det er for å forhindre raske endringer av disse nivåene når inngangsviftens turtall er veldig nær terskelen.

Trinn 3: Lodding av elektroniske komponenter

Lodding av elektroniske komponenter
Lodding av elektroniske komponenter
Lodding av elektroniske komponenter
Lodding av elektroniske komponenter
Lodding av elektroniske komponenter
Lodding av elektroniske komponenter

Lodd alle elektroniske komponenter til prefbrettet (unntatt Attiny13, det blir senere satt i en stikkontakt). Bruk kobbertråder (0,5 mm diameter fra UTP -kabelen bør være perfekte) for å lage elektriske forbindelser mellom komponenter. Hvis du har problemer med å skyve store ledninger som kommer ut av Molex-kontakten (AMP MATE-N-LOK), kan du bore større hull for dem. Hvis du ikke vil bruke et bor, kan du alltid skru en skrue noen ganger inne i små prefabrikkhull. Pass på at ledninger ikke forårsaker kortslutning.

Hvis du foretrekker å lage din egen PCB, leverer jeg også.svg (brettmål er 53,34x63,50mm) og.pdf (A4 -sidestørrelse, inne i.zip -arkiv) filer. Enkeltsidig kobberkledd brett bør være tilstrekkelig, ettersom det bare er en tilkobling på forsiden (den kan lages med en ledning), så filene på forsiden leveres som hoved slik at denne forbindelsen kan identifiseres.

Jeg anbefaler på det sterkeste at du dekker tilbake til PCB med noe isolerende materiale som forhindrer utilsiktede kortslutninger. Jeg brukte noen få lag med vanlig papir som holdes til PCB -kantene med noen strimler isolasjonstape.

Trinn 4: Programmering av ATtiny Microcontroller

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

Program som kjører på MCU har hardkodede flere terskler for inngangsvifterens turtall. Disse tersklene er plassert i begynnelsen av fan_controller.c -filen. Linjen som inneholder første terskel, som er ansvarlig for å øke kanal A -utgangsnivået som svar på input_0 -vifte som overstiger 450 o / min, ser slik ut:

#define A0_SPEED_0 3 // 450 RPM

Hvis du vil endre terskel -RPM -verdien, må du erstatte nummer 3 med noe annet. Hvis du øker dette tallet med 1, endres terskelen med 150 o / min.

En annen ting du kanskje vil endre er reduksjon av forsinkelsen på utgangsnivået. Denne forsinkelsen forhindrer raske endringer i utgangsnivået når inngangsviftens turtall er veldig nær terskelen. Det er 3 linjer som styrer dette (ettersom kanal A bruker 2 innganger og kanal B bruker 1) og den første av dem ser slik ut:

hvis (channel_A0_lower_rpm_cycles> 2) {

Økning nummer 2 vil øke denne forsinkelsen. Forsinkelse telles i 100 ms sykluser.

For å kompilere kildekoden og deretter programmere brikken trenger du litt programvare. På en Debian-basert Linux-distribusjon kan den installeres ved å utføre følgende kommando:

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

Hvis du bruker Windows, kan du prøve å installere WinAVR suite, som også inneholder nødvendig programvare.

For å kompilere kildekoden må du utføre dette:

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

For å lage.hex -fil må du kopiere denne linjen til terminalen:

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

Denne kommandoen gjør det mulig å kontrollere hvor mye minne som skal brukes (tekst er Flash, data er variabler som blir lagret i Flash og deretter kopiert til RAM, og bss er variabler initialisert med verdien 0 i RAM):

av_-størrelse fan_controller.out

Når.hex -filen er klar, må du sette inn ATtiny13 i brødbrettet og koble den til programmereren med jumperkabler. Det er best å koble strømmen fra programmereren når du kobler den til MCU. Behold standard sikringsbiter (H: FF, L: 6A). Hvis programmereren din er USBasp, vil denne kommandoen programmere MCUs flashminne:

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

-B 8 endrer overføringshastigheten mellom programmereren og MCU (bitklokke). Du må kanskje endre den til en høyere verdi hvis du har problemer med å koble til mikrokontrolleren.

Når MCU er klar, legg den i DIP 8 -kontakten. For å fjerne MCU fra brødbrettet, lirker jeg det vanligvis med en flat skrutrekker.

Trinn 5: Koble vifter til enheten

Koble vifter til enheten
Koble vifter til enheten
Koble vifter til enheten
Koble vifter til enheten
Koble vifter til enheten
Koble vifter til enheten

Som Input 0 -vifte (den som er koblet til PB0) valgte jeg en av viftene som var koblet til MOBO, hvilken hastighet varierte med CPU -temperaturen. Jeg fjernet isolasjonen fra delen av viftens turtellerledning og loddet den ene enden av startkabelen til den. Den andre enden (med 2,54 mm hunnkontakt festet til den) kobles til viftekontrolleren. Hvis startkabelen er for kort, forleng den ved å lodde en annen kabel mellom de tidligere nevnte. Dekk deretter alle eksponerte ledere med isolasjonstape.

Inngang 1 leser hastigheten til GPU -vifter (i mitt tilfelle er det faktisk 3 av dem, men det er bare en viftekontakt på grafikkortets PCB). Jeg loddet inngangskabel 1 for inngang 1 direkte til en av ledningene til 4-pinners mini GPU-viftekontakt på kretskortet. Siden denne ledningen var plassert mellom PCB og bakplate, isolerte jeg bakplaten med et stykke papir først (spesielt fordi bakplatematerialet var ganske loddetinnbart) og deretter festet hunkontakten til kabelen godt til den andre siden av bakplaten med bruk av aluminiumsfoliebånd. Deretter kan GPU -vifter kobles til PB1 -pinnen ved bruk av en annen (forlenget) startkabel. Hvis du ikke vil lodde noe på grafikkortets PCB, kan du feste en startkabel til viftens ledninger eller lage en adapter som skal plasseres mellom viftene og kontakten på kretskortet, avgjørelsen er din.

Vifte overfører sin nåværende hastighet gjennom turtellerledning ved å koble denne ledningen til bakken via åpent avløp/oppsamler to ganger per rotasjon (vifterotor har vanligvis 4-poler [NSNS] som oppdages av Hall-sensor, vifteeffekten blir lav når på type pol er detektert). På den andre siden trekkes denne ledningen vanligvis til 3,3V spenningsnivå. Hvis du ikke er sikker på om du har den riktige ledningen, kan du bruke oscilloskop eller bygge en av deteksjonskretsene som trekker på det siste bildet i dette trinnet. Den første av dem lar deg sjekke maksimal spenning som vises på målt sted, den andre for å kontrollere om lavfrekvente pulser vises der.

3.3V bør leses av ATtiny sine inngangspinner som HIGH -tilstand, men hvis du har problemer med dette, kan du prøve å redusere spenningen som driver MCU (det vil også øke motstanden til MOSFET -er!). Jeg hadde ingen problemer, men jeg bestemte meg for at jeg skulle inkludere denne tanken her.

Når inngangsvifter er klare, kan du plassere viftekontrolleren inne i PC -etuiet, på et sted du velger. Jeg monterte den på siden av to av mine tomme 5,25”stasjonsrom, ved å skyve den mellom metaldelene i bukta, legge litt papir bak den og låse den på plass ved bruk av glidelås som er presset gjennom et av de store hullene i prefboard og noen andre hull i 5,25”-bukta. Forsikre deg om at ingen metalldeler i PC -etuiet kan berøre noen av viftestyringens eksponerte ledere.

Nå kan du koble 3-pinners utgangsvifter til kontrolleren. Utgangsvifter koblet til kanal A vil være knyttet til både CPU- og GPU-vifter, og minimumsspenningen som vil drive dem vil være omtrent 7-8V. Vifter som er koblet til kanalens B -utgangskontakter vil bare drives av GPU -kjøleviften (e) og spenningen kan falle til 0V (men bare for 66ms hver andre 100ms -syklus på det laveste utgangsnivået). Vifter bør ikke trekke mer enn 1A per utgangskanal.

Trinn 6: Andre endringer jeg har gjort på PCen min

Andre endringer som jeg har gjort på min PC
Andre endringer som jeg har gjort på min PC
Andre endringer som jeg har gjort på min PC
Andre endringer som jeg har gjort på min PC
Andre endringer som jeg har gjort på PCen min
Andre endringer som jeg har gjort på PCen min
Andre endringer som jeg har gjort på min PC
Andre endringer som jeg har gjort på min PC

Kanal A driver to vifter på toppen av saken min. De er av samme modell og de drives av samme spenning, noe som får dem til å snurre i svært like hastigheter. Noen hørbare slag (interferensmønster mellom to lyder med litt forskjellige frekvenser) dukket opp som et resultat av det. For å fikse dette installerte jeg 2 dioder (en vanlig og en Schottky) i serie med en av viftene. Dette reduserte viftespenningen og hastigheten, og gjorde at beatet forsvant.

En annen endring, som er relatert til en av dem til vifter som jeg har gjort, er installasjon av en papirvifte med toppvifte som ligger mer foran. Formålet er å forhindre at denne viften suger luft som ikke har passert gjennom noen kjøleribber ennå. Jeg prøvde også å lage andre papirvegger som forhindret at GPU -avtrekksluft ble sugd inn i CPU -kjøligere. De reduserte faktisk CPU -temp, men på bekostning av GPU -oppvarming mer, så til slutt fjernet jeg dem.

En annen uvanlig modifikasjon som jeg har gjort er fjerning av støvfilter ved eksosen til de to toppviftene (mesteparten av tiden blir luften skjøvet ut av saken uansett, og når min PC er slått av, beskytter skuffen litt over PC -saken den fra støv). Jeg installerte også en 92 mm vifte foran to tomme 5,25”stasjonsrom (viftekontrolleren er plassert like bak den). Denne viften holdes ikke av noen skruer, den sitter fint mellom 120 mm vifte og den optiske stasjonen over (overflater på begge er dekket med isolasjonstape for å gi litt vibrasjonsdemping).