Innholdsfortegnelse:

DIY PWM -kontroll for PC -vifter: 12 trinn
DIY PWM -kontroll for PC -vifter: 12 trinn

Video: DIY PWM -kontroll for PC -vifter: 12 trinn

Video: DIY PWM -kontroll for PC -vifter: 12 trinn
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Juli
Anonim
DIY PWM -kontroll for PC -vifter
DIY PWM -kontroll for PC -vifter

Denne instruksjonsboken beskriver å bygge en fullt utstyrt 12 V PC-vifte PWM-kontroller. Designet kan kontrollere opptil 16 3-pinners datamaskinvifter. Designet bruker et par Dialog GreenPAK ™ konfigurerbare IC-er med blandet signal for å kontrollere hver vifters driftssyklus. Den inkluderer også to måter å endre viftehastigheten på:

en. med en kvadratur/roterende encoder

b. med en Windows -applikasjon innebygd C# som kommuniserer med GreenPAK gjennom I2C.

Nedenfor har vi beskrevet trinnene som trengs for å forstå hvordan GreenPAK -brikken er programmert til å lage PWM -kontrollen for PC -fans. Men hvis du bare vil få resultatet av programmeringen, kan du laste ned GreenPAK -programvare for å se den allerede fullførte GreenPAK -designfilen. Koble GreenPAK Development Kit til datamaskinen din og trykk på programmet for å lage den tilpassede IC for PWM -kontroll for PC -fans.

Trinn 1: Systemblokkdiagram

Systemblokkdiagram
Systemblokkdiagram

Trinn 2: SLG46108 Rotary Decoder Design

SLG46108 Design for roterende dekoder
SLG46108 Design for roterende dekoder
SLG46108 Design for roterende dekoder
SLG46108 Design for roterende dekoder
SLG46108 Design for roterende dekoder
SLG46108 Design for roterende dekoder

En roterende encoder brukes til å øke eller redusere driftssyklusen til viftene manuelt. Denne enheten sender ut pulser på kanal A- og kanal B -utgangene som er 90 ° fra hverandre. Se AN-1101: Unclocked Quadrature Decoder for mer informasjon om hvordan en roterende encoder fungerer.

En klokket roterende dekoder kan opprettes ved hjelp av en Dialog GreenPAK SLG46108 for å behandle kanal A- og kanal B -signalene og sende dem ut som mot klokken (CCW) og med klokken (CW) pulser.

Når kanal A leder kanal B, sender designet en kort puls på CW. Når kanal B leder kanal A, sender den ut en kort puls på CCW

Tre DFF synkroniserer kanal A -inngangen med klokken. På samme måte skaper rørforsinkelsen med OUT0 satt til to DFF og OUT1 satt til tre DFFs den samme funksjonaliteten for kanal B.

For å lage CW- og CCW -utganger, bruk noen få LUT -er. For mer informasjon om denne standard roterende dekoderdesign, besøk dette nettstedet.

GreenPAK Rotary Decoder mottar inngangspulser A og B og sender ut CW- og CCW -pulser som vist i figur 4.

Kretsløpet etter XOR -portene sikrer at det aldri vil være en CW -puls og en CCW -puls på samme tid, noe som gir mulighet for feil med den roterende omkoderen. Forsinkelsen på 8 ms fallende kant på CW- og CCW -signalene tvinger dem til å holde seg høye i 8 ms pluss en klokkesyklus, noe som er nødvendig for nedstrøms SLG46826 GreenPAK -er.

Trinn 3: Design av viftekontroller SLG46826

SLG46826 Design av viftekontroller
SLG46826 Design av viftekontroller

Trinn 4: PWM -generasjon med offset -tellere

PWM -generasjon med offset -tellere
PWM -generasjon med offset -tellere
PWM -generasjon med offset -tellere
PWM -generasjon med offset -tellere

Et par offset -tellere med samme periode brukes til å generere PWM -signalet. Den første telleren setter en DFF, og den andre tilbakestiller den, og skaper et konsistent PWM -signal for arbeidssyklusen som vist i figur 6 og figur 7.

CNT6 setter DFF10 og invertert utgang fra CNT1 tilbakestiller DFF10. Pinnene 18 og 19 brukes til å sende PWM -signalet til eksterne kretser

Trinn 5: Driftssykluskontroll med klokkeinjeksjon og klokkehopp

Driftssykluskontroll med klokkeinjeksjon og klokkehopp
Driftssykluskontroll med klokkeinjeksjon og klokkehopp
Driftssykluskontroll med klokkeinjeksjon og klokkehopp
Driftssykluskontroll med klokkeinjeksjon og klokkehopp

Viftekontrolleren mottar CW- og CCW -signalene som innganger fra den roterende dekoderen og bruker dem til enten å øke eller redusere PWM -signalet som styrer viftehastigheten. Dette oppnås med flere digitale logikkomponenter.

Driftssyklusen må øke når en CW -puls mottas. Dette gjøres ved å injisere en ekstra klokkepuls i CNT6 -blokken, slik at den sender ut en klokkesyklus tidligere enn den ellers ville ha gjort. Denne prosessen er vist i figur 8.

CNT1 blir fremdeles klokket med en konstant hastighet, men CNT6 har et par ekstra klokker injisert. Hver gang det er en ekstra klokke til telleren, forskyver den utgangen en klokkeperiode til venstre.

Omvendt, for å redusere driftssyklusen, hopper du over en klokkepuls for CNT6 som vist i figur 9. CNT1 blir fremdeles klokket med en konstant hastighet, og det er hoppet over klokkepulser for CNT6, der telleren ikke ble klokka da den skulle til. På denne måten skyves utgangen til CNT6 til høyre med en klokkeperiode om gangen, noe som reduserer PWM -driftssyklusen for utgangen.

Klokkeinjeksjonen og klokkehoppingsfunksjonaliteten utføres ved bruk av noen digitale logiske elementer i GreenPAK. Et par multifunksjonsblokker brukes til å lage et par lås/kantdetektorkombinasjoner. 4-biters LUT0 brukes til å mikse mellom det generelle klokkesignalet (CLK/8) og klokkeinjiserings- eller klokkehoppingsignalene. Denne funksjonaliteten er beskrevet mer detaljert i trinn 7.

Trinn 6: KNAPP -inngang

KNAPP -inngang
KNAPP -inngang

KNAPPE -inngangen blir frakoblet i 20 ms, og brukes deretter til å veksle en sperre som avgjør om denne brikken er valgt. Hvis den er valgt, passerer 4-biters LUT klokkehoppingen eller injeksjonssignalene. Hvis brikken ikke er valgt, passerer 4-bits LUT ganske enkelt CLK/8-signalet.

Trinn 7: Forebygge driftssyklusoverføring

Forebygging av driftssyklusoverføring
Forebygging av driftssyklusoverføring
Forebygging av rullesyklus
Forebygging av rullesyklus
Forebygging av driftssyklusoverføring
Forebygging av driftssyklusoverføring

RS-låsene 3-biters LUT5 og 3-biters LUT3 brukes for å sikre at du ikke kan injisere eller hoppe over så mange klokker at forskyvningstellerne velter. Dette er for å unngå at systemet når 100 % driftssyklus og deretter ruller over til en 1 % driftssyklus hvis det mottar en annen injisert klokke.

RS -låsene forhindrer at dette skjer ved å låse inngangene til multifunksjonsblokkene når systemet er en klokkesyklus unna å rulle. Et par DFF -er forsinker PWM_SET- og PWM_nRST -signalene med en klokkeperiode som vist i figur 11.

Et par LUT -er brukes til å lage den nødvendige logikken. Hvis driftssyklusen er så lav at det forsinkede PWM_SET -signalet oppstår samtidig som PWM_nRST -signalet, vil en ytterligere nedgang i driftssyklusen forårsake en velt.

På samme måte, hvis du nærmer deg maksimal driftssyklus, slik at det forsinkede PWM_nRST -signalet oppstår samtidig som PWM_SET -signalet, er det nødvendig å unngå ytterligere økning i driftssyklusen. I dette tilfellet, forsink nRST -signalet med to klokkesykluser for å sikre at systemet ikke ruller fra 99 % til 1 %.

Trinn 8: Driftssykluskontroll med I2C

Driftssykluskontroll med I2C
Driftssykluskontroll med I2C
Driftssykluskontroll med I2C
Driftssykluskontroll med I2C
Driftssykluskontroll med I2C
Driftssykluskontroll med I2C

Denne designen inneholder en annen måte å kontrollere driftssyklusen enn klokkehopp/klokkeinjeksjon. En ekstern mikrokontroller kan brukes til å skrive I2C -kommandoer til GreenPAK for å stille driftssyklusen.

Kontroll av driftssyklusen over I2C krever at kontrolleren utfører en spesifikk kommandosekvens. Disse kommandoene vises i rekkefølge i tabell 1. En "x" indikerer en bit som ikke bør endres, "[" indikerer en START -bit, og "]" indikerer en STOP -bit

PDLY -blokken genererer en kort aktiv høy puls på den fallende kanten av CLK/8 -signalet, som kalles! CLK/8. Dette signalet brukes til å klokke DFF14 med en jevn frekvens. Når I2C_SET går høyt asynkront, får neste stigende kant av! CLK/8 DFF14 til å sende HØY, noe som utløser CNT5 OneShot. OneShot kjører for antall klokkesykluser som brukeren skrev som spesifisert i "Skriv til CNT5" I2C -kommandoen i tabell 1. I dette tilfellet er det 10 klokkesykluser. OneShot lar 25 MHz-oscillatoren kjøre nøyaktig så lenge den varer, og ikke lenger, slik at 3-biters LUT0 mottar antall klokkesykluser som ble skrevet til CNT5.

Figur 15 viser disse signalene, der de røde klokkene er de som sendes til 3-biters LUT0, som sender dem inn i CNT6 (PWM_SET-telleren), og skaper dermed forskyvningen for generering av driftssyklusen.

Trinn 9: Turtelleravlesning

Turtelleravlesning
Turtelleravlesning
Turtelleravlesning
Turtelleravlesning

Om ønskelig kan brukeren lese turtellerverdien over I2C for å spore hvor raskt viften snur ved å lese CNT2 -verdien. CNT2 økes hver gang ACMP0H har en stigende kant, og kan nullstilles asynkront med en I2C -kommando. Vær oppmerksom på at dette er en valgfri funksjon, og terskelen til ACMP0H må justeres i henhold til spesifikasjonene til den aktuelle viften som brukes.

Trinn 10: Utvendig kretsdesign

Utvendig kretsdesign
Utvendig kretsdesign

Den eksterne kretsen er ganske enkel. Det er en trykknapp tilkoblet Pin6 på GreenPAK for å veksle om denne spesielle enheten er valgt for rotasjonskontroll, og en LED koblet til Pin12 og Pin13 for å indikere når enheten er valgt.

Siden viften går av 12 V, kreves et par FET -er for å kontrollere bytte. GreenPAKs Pin18 og Pin19 driver en nFET. Når nFET er slått på, trekker den porten til pFET LOW, som kobler viften til +12 V. Når nFET er slått av, trekkes porten til PFET opp av 1 kΩ motstanden, som kobler viften fra fra +12 V.

Trinn 11: PCB -design

PCB -design
PCB -design

For å prototype designen ble det satt sammen et par PCB -er. Kretskortet til venstre er "Fan Controller", som huser den roterende encoderen, 12 V -kontakten, SLG46108 GreenPAK og kontakter for FT232H USB til I2C breakout -kortet. De to PCB -ene til høyre er "Fan Boards", som inneholder SLG46826 GreenPAK, trykknapper, brytere, lysdioder og viftehoder.

Hvert viftebrett har en innhyllet mannlig overskrift på venstre side og en kvinnelig overskrift på høyre side, slik at de kan kobles sammen med en tusenfryd. Hvert fanebord kan fylles med ressurser for å kontrollere to fans uavhengig.

Trinn 12: C# -program

C# Søknad
C# Søknad

En C# -applikasjon ble skrevet for å koble til viftebordene gjennom FT232H USB-I2C-broen. Denne applikasjonen kan brukes til å justere frekvensen til hver vifte med I2C -kommandoer som genereres av applikasjonen.

Programmet pinger alle 16 I2C -adressene en gang i sekundet og fyller ut brukergrensesnittet med slaveadressene som er tilstede. I dette eksemplet er vifte 1 (slaveadresse 0001) og vifte 3 (slaveadresse 0011) koblet til kortet. Justeringer av driftssyklusen til hver vifte individuelt kan gjøres ved å flytte glidebryteren eller ved å skrive en verdi fra 0-256 i tekstboksen under glidebryteren.

Konklusjoner

Ved å bruke dette designet er det mulig å styre opptil 16 vifter uavhengig (siden det er 16 mulige I2C -slaveadresser) enten med en roterende encoder eller med en C# -applikasjon. Det har blitt demonstrert hvordan man genererer et PWM -signal med et par forskyvningstellere, og hvordan man kan øke og redusere driftssyklusen til det signalet uten velt.

Anbefalt: