Inhoudsopgave:

DIY PWM-besturing voor pc-fans - Ajarnpa
DIY PWM-besturing voor pc-fans - Ajarnpa

Video: DIY PWM-besturing voor pc-fans - Ajarnpa

Video: DIY PWM-besturing voor pc-fans - Ajarnpa
Video: Home Assistant 4-Wire PWM Fan Controller Prt 2 - Flash & Breakdown 2024, November
Anonim
DIY PWM-besturing voor pc-fans
DIY PWM-besturing voor pc-fans

Deze Instructable beschrijft het bouwen van een volledig uitgeruste 12 V pc-ventilator PWM-controller. Het ontwerp kan tot 16 3-pins computerventilatoren aansturen. Het ontwerp maakt gebruik van een paar Dialog GreenPAK™ configureerbare mixed-signal IC's om de inschakelduur van elke ventilator te regelen. Het bevat ook twee manieren om de snelheid van de ventilator te wijzigen:

A. met een kwadratuur/roterende encoder

B. met een in C# ingebouwde Windows-applicatie die via I2C met de GreenPAK communiceert.

Hieronder hebben we de stappen beschreven die nodig zijn om te begrijpen hoe de GreenPAK-chip is geprogrammeerd om de PWM-besturing voor pc-fans te creëren. Als u echter alleen het resultaat van het programmeren wilt hebben, download dan GreenPAK-software om het reeds voltooide GreenPAK-ontwerpbestand te bekijken. Sluit de GreenPAK Development Kit aan op uw computer en klik op programma om de aangepaste IC voor PWM-besturing voor pc-fans te maken.

Stap 1: Systeemblokdiagram

Systeemblokdiagram
Systeemblokdiagram

Stap 2: SLG46108 Roterend decoderontwerp

SLG46108 Roterend decoderontwerp
SLG46108 Roterend decoderontwerp
SLG46108 Roterend decoderontwerp
SLG46108 Roterend decoderontwerp
SLG46108 Roterend decoderontwerp
SLG46108 Roterend decoderontwerp

Een roterende encoder wordt gebruikt om de inschakelduur van de ventilatoren handmatig te verhogen of te verlagen. Dit apparaat voert pulsen uit op zijn kanaal A- en kanaal B-uitgangen die 90 ° uit elkaar liggen. Zie AN-1101: Unclocked Quadrature Decoder voor meer informatie over hoe een roterende encoder werkt.

Een geklokte roterende decoder kan worden gemaakt met behulp van een Dialog GreenPAK SLG46108 om de signalen van kanaal A en kanaal B te verwerken en uit te voeren als pulsen tegen de klok in (CCW) en met de klok mee (CW).

Wanneer kanaal A kanaal B leidt, geeft het ontwerp een korte puls op CW af. Wanneer kanaal B voor kanaal A leidt, geeft het een korte puls op CCW

Drie DFF's synchroniseren de ingang van kanaal A met de klok. Evenzo creëert de pijpvertraging met OUT0 ingesteld op twee DFF's en OUT1 ingesteld op drie DFF's dezelfde functionaliteit voor kanaal B.

Gebruik een paar LUT's om CW- en CCW-uitgangen te maken. Bezoek deze website voor meer informatie over dit standaard roterende decoderontwerp.

De GreenPAK-draaidecoder ontvangt ingangspulsen A en B en voert de CW- en CCW-pulsen uit, zoals weergegeven in afbeelding 4.

De schakeling achter de XOR-poorten zorgt ervoor dat er nooit een CW-puls en CCW-puls tegelijkertijd zal zijn, waardoor eventuele fouten met de roterende encoder mogelijk zijn. De 8 ms dalende flankvertraging op de CW- en CCW-signalen dwingt ze om hoog te blijven gedurende 8 ms plus één klokcyclus, wat nodig is voor de stroomafwaartse SLG46826 GreenPAK's.

Stap 3: SLG46826 Ontwerp van ventilatorcontroller

SLG46826 Ontwerp van ventilatorcontroller
SLG46826 Ontwerp van ventilatorcontroller

Stap 4: PWM-generatie met offsettellers

PWM-generatie met offsettellers
PWM-generatie met offsettellers
PWM-generatie met offsettellers
PWM-generatie met offsettellers

Een paar offset-tellers met dezelfde periode worden gebruikt om het PWM-signaal te genereren. De eerste teller stelt een DFF in en de tweede stelt deze opnieuw in, waardoor een consistent PWM-signaal voor de werkcyclus wordt gecreëerd, zoals weergegeven in Afbeelding 6 en Afbeelding 7.

CNT6 stelt DFF10 in en de omgekeerde uitvoer van CNT1 stelt DFF10 opnieuw in. Pin 18 en 19 worden gebruikt om het PWM-signaal uit te voeren naar externe circuits

Stap 5: Duty Cycle Control met klokinjectie en klok overslaan

Duty Cycle Control met klokinjectie en klok overslaan
Duty Cycle Control met klokinjectie en klok overslaan
Duty Cycle Control met klokinjectie en klok overslaan
Duty Cycle Control met klokinjectie en klok overslaan

De ventilatorcontroller ontvangt de CW- en CCW-signalen als invoer van de roterende decoder en gebruikt deze om het PWM-signaal dat de ventilatorsnelheid regelt te verhogen of te verlagen. Dit wordt bereikt met verschillende digitale logische componenten.

De duty-cycle moet toenemen wanneer een CW-puls wordt ontvangen. Dit wordt gedaan door een extra klokpuls in het CNT6-blok te injecteren, waardoor het een klokcyclus eerder uitvoert dan anders het geval zou zijn. Dit proces is weergegeven in figuur 8.

CNT1 wordt nog steeds met een constante snelheid geklokt, maar CNT6 heeft een paar extra klokken geïnjecteerd. Elke keer dat er een extra klok op de teller staat, verschuift deze zijn output één klokperiode naar links.

Omgekeerd, om de duty cycle te verminderen, slaat u een klokpuls voor CNT6 over, zoals weergegeven in afbeelding 9. CNT1 wordt nog steeds met een constante snelheid geklokt, en er zijn overgeslagen klokpulsen voor CNT6, waar de teller niet werd geklokt toen het de bedoeling was tot. Op deze manier wordt de uitvoer van CNT6 met één klokperiode per keer naar rechts geduwd, waardoor de PWM-werkcyclus van de uitvoer wordt verkort.

De klokinjectie en klok overslaan functionaliteit wordt uitgevoerd met behulp van enkele digitale logische elementen binnen de GreenPAK. Een paar multifunctionele blokken worden gebruikt om een paar vergrendelings-/randdetectorcombinaties te maken. 4-bit LUT0 wordt gebruikt om te muxen tussen het algemene kloksignaal (CLK/8) en de klokinjecterende of klok overslaande signalen. Deze functionaliteit wordt in stap 7 nader beschreven.

Stap 6: KNOP Invoer

KNOP Invoer
KNOP Invoer

De BUTTON-ingang wordt 20 ms gedebounced en vervolgens gebruikt om een vergrendeling te schakelen die bepaalt of deze specifieke chip is geselecteerd. Als deze is geselecteerd, geeft de 4-bits LUT de klok overslaande of injectiesignalen door. Als de chip niet is geselecteerd, geeft de 4-bits LUT gewoon het CLK/8-signaal door.

Stap 7: Overrollen van bedrijfscyclus voorkomen

Rollover van bedrijfscyclus voorkomen
Rollover van bedrijfscyclus voorkomen
Rollover van bedrijfscyclus voorkomen
Rollover van bedrijfscyclus voorkomen
Rollover van bedrijfscyclus voorkomen
Rollover van bedrijfscyclus voorkomen

De RS-latches 3-bit LUT5 en 3-bit LUT3 worden gebruikt om ervoor te zorgen dat u niet zoveel klokken kunt injecteren of overslaan dat de offset-tellers overslaan. Dit is om te voorkomen dat het systeem een duty cycle van 100% bereikt en vervolgens overgaat naar een duty cycle van 1% als het een andere geïnjecteerde klok ontvangt.

De RS-vergrendelingen voorkomen dat dit gebeurt door de ingangen naar de multifunctionele blokken te vergrendelen wanneer het systeem één klokcyclus verwijderd is van omrollen. Een paar DFF's vertragen de PWM_SET- en PWM_nRST-signalen met één klokperiode, zoals weergegeven in afbeelding 11.

Een paar LUT's wordt gebruikt om de nodige logica te creëren. Als de duty-cycle zo laag is dat het vertraagde PWM_SET-signaal tegelijkertijd met het PWM_nRST-signaal optreedt, zal een verdere afname van de duty-cycle een rollover veroorzaken.

Evenzo, als de maximale werkcyclus nadert, zodat het vertraagde PWM_nRST-signaal tegelijkertijd met het PWM_SET-signaal optreedt, is het noodzakelijk om een verdere verhoging van de werkcyclus te vermijden. Vertraag in dit geval het nRST-signaal met twee klokcycli om ervoor te zorgen dat het systeem niet overschakelt van 99% naar 1%.

Stap 8: Duty Cycle Control met I2C

Inschakelduurregeling met I2C
Inschakelduurregeling met I2C
Inschakelduurregeling met I2C
Inschakelduurregeling met I2C
Inschakelduurregeling met I2C
Inschakelduurregeling met I2C

Dit ontwerp bevat een andere manier om de duty-cycle te regelen, anders dan het overslaan van de klok/klokinjectie. Een externe microcontroller kan worden gebruikt om I2C-opdrachten naar de GreenPAK te schrijven om de werkcyclus in te stellen.

Om de duty-cycle via I2C te regelen, moet de controller een specifieke opdrachtreeks uitvoeren. Deze commando's worden in volgorde weergegeven in Tabel 1. Een "x" geeft een bit aan dat niet mag veranderen, "[" geeft een START-bit aan en "]" geeft een STOP-bit aan

Het PDLY-blok genereert een korte actieve hoge puls op de dalende flank van het CLK/8-signaal, dat !CLK/8 wordt genoemd. Dat signaal wordt gebruikt om DFF14 op een constante frequentie te klokken. Wanneer I2C_SET asynchroon hoog wordt, zorgt de volgende stijgende flank van !CLK/8 ervoor dat DFF14 HIGH uitvoert, wat de CNT5 OneShot activeert. De OneShot wordt uitgevoerd voor het aantal klokcycli dat de gebruiker heeft geschreven zoals gespecificeerd in de I2C-opdracht "Schrijven naar CNT5" in tabel 1. In dit geval zijn het 10 klokcycli. Met de OneShot kan de 25 MHz-oscillator precies zijn duur draaien en niet langer, zodat 3-bit LUT0 het aantal klokcycli ontvangt dat naar CNT5 is geschreven.

Afbeelding 15 toont deze signalen, waarbij de rode klokken degenen zijn die naar 3-bit LUT0 worden gestuurd, die ze doorgeeft aan CNT6 (de PWM_SET-teller), waardoor de offset voor het genereren van de duty cycle wordt gecreëerd.

Stap 9: Toerenteller aflezen

Toerenteller lezen
Toerenteller lezen
Toerenteller lezen
Toerenteller lezen

Indien gewenst kan de gebruiker de toerentellerwaarde via I2C aflezen om bij te houden hoe snel de ventilator draait door de CNT2-waarde af te lezen. CNT2 wordt verhoogd elke keer dat ACMP0H een stijgende flank heeft en kan asynchroon worden gereset met een I2C-commando. Houd er rekening mee dat dit een optionele functie is en dat de drempel van ACMP0H moet worden aangepast aan de specificaties van de specifieke ventilator die wordt gebruikt.

Stap 10: Extern circuitontwerp

Extern circuitontwerp
Extern circuitontwerp

Het externe circuit is vrij eenvoudig. Er is een drukknop aangesloten op Pin6 van de GreenPAK om te schakelen of dit specifieke apparaat is geselecteerd voor draaibediening, en een LED aangesloten op Pin12 en Pin13 om aan te geven wanneer het apparaat is geselecteerd.

Omdat de ventilator op 12 V werkt, is een paar FET's nodig om het schakelen te regelen. De Pin18 en Pin19 van de GreenPAK sturen een nFET aan. Wanneer de nFET is ingeschakeld, trekt deze de poort van de pFET LOW, die de ventilator verbindt met +12 V. Wanneer de nFET is uitgeschakeld, wordt de poort van de PFET omhoog getrokken door de weerstand van 1 kΩ, die de ventilator loskoppelt vanaf +12 V.

Stap 11: PCB-ontwerp

PCB-ontwerp
PCB-ontwerp

Om een prototype van het ontwerp te maken, werden een aantal PCB's geassembleerd. De PCB aan de linkerkant is de "Fan Controller", die de roterende encoder, 12 V-aansluiting, SLG46108 GreenPAK en connectoren voor de FT232H USB naar I2C breakout-kaart bevat. De twee PCB's aan de rechterkant zijn "Fan Boards", die de SLG46826 GreenPAK's, drukknoppen, schakelaars, LED's en ventilatorheaders bevatten.

Elk Fan Board heeft een gehulde mannelijke header aan de linkerkant en een vrouwelijke header aan de rechterkant, zodat ze aan elkaar kunnen worden gekoppeld. Elk ventilatorbord kan worden gevuld met middelen om onafhankelijk twee ventilatoren te besturen.

Stap 12: C#-toepassing

C#-toepassing
C#-toepassing

Er is een C#-toepassing geschreven om te communiceren met de Fan Boards via de FT232H USB-I2C-brug. Deze applicatie kan worden gebruikt om de frequentie van elke ventilator aan te passen met I2C-commando's die door de applicatie worden gegenereerd.

De applicatie pingt eenmaal per seconde alle 16 I2C-adressen en vult de GUI met de aanwezige slave-adressen. In dit voorbeeld zijn Ventilator 1 (slave-adres 0001) en Ventilator 3 (slave-adres 0011) aangesloten op de kaart. Aanpassingen aan de werkcyclus van elke ventilator afzonderlijk kunnen worden gemaakt door de schuifbalk te verplaatsen of door een waarde van 0-256 in het tekstvak onder de schuifbalk te typen.

conclusies

Met dit ontwerp is het mogelijk om tot 16 ventilatoren onafhankelijk te regelen (aangezien er 16 mogelijke I2C-slave-adressen zijn), hetzij met een roterende encoder of met een C#-toepassing. Er is aangetoond hoe een PWM-signaal kan worden gegenereerd met een paar offset-tellers, en hoe de duty-cycle van dat signaal kan worden verhoogd en verlaagd zonder rollover.

Aanbevolen: