Hvordan Bygge En Variabel Hastighet Pwm Fan Controller
i denne artikkelen vil jeg vise deg hvordan du bygger en PWM fan controller (DC) ved hjelp Av et kort c-program, og noen få deler, inkludert Launchpad RM57L microcontroller development kit. Det gjør det mulig for brukere å effektivt variere hastigheten PÅ PWM-vifter for å redusere støynivå og strømforbruk. Dette prosjektet overvåker automatisk temperaturen på objektet som temperatursensoren er festet til (i dette tilfellet EN CPU – kjøleribbe som brukes til å avkjøle en liten termoelektrisk modul), og styrer viftehastigheten tilsvarende for å minimere støyutgang, samt strømforbruk. Nedenfor er en demo av viftekontrolleren i bruk på en stasjonær CPU-kjøler.
Video: Kompulsa.
før du lærer å bygge en viftehastighetskontroller, hjelper det å lære hvordan de ulike hastighetskontrollmetodene fungerer. Jeg vil forklare to nøkkelteknologier: Resistive hastighetsregulatorer og pwm-viftekontrollere.
Resistive Hastighetsregulatorer
Resistive hastighetsregulatorer styrer en gitt viftemotors hastighet ved å motstå strømmen av strøm fra strømkilden til motoren. Dette kan gjøres ved hjelp av en kombinasjon av et potensiometer og transistor, eller en annen varistorkrets. Den tidligere teknologien er ekstremt lett å bygge, men får transistoren til å brenne av ganske mye av strømmen som går gjennom den. Derfor er det ineffektivt. PWM på den annen side pulser full strøm på og av mange ganger per sekund. Transistoren vil fortsatt kaste bort litt strøm, men ikke så mye.
Pwm Hastighetsregulatorer
Pulsbreddemodulasjon er en langt mer kompleks, overlegen og en stadig mer vanlig strømstyringsmetode som letter kontrollen av motorhastigheter, lampens lysstyrke, blant annet på en energieffektiv måte. Viktige årsaker til pwm motorstyringer inkluderer å forbedre effektiviteten til apparater, samt redusere støynivået ved å betjene dem ved lave hastigheter når det er mulig.
jeg brukte TI Launchpad RM57L MCU development kit for å konstruere denne viftekontrolleren (takk TIL TI for å sende DEN), men denne koden kan enkelt endres for å kjøre på billigere Launchpad TMS57012, eller Launchpad TMS57004 Launchpads også.
når du lærer å konstruere en pwm-viftekontroller, hjelper det å forstå eller lære å utføre de ulike teknologiene / metodene, samt deres fordeler og ulemper. På denne måten vet du nøyaktig hvilken du skal bruke, og når.
Denne artikkelen forutsetter at du har noen elektroteknikk erfaring, og vet hvordan du trygt koble transistor, sensor, og alt annet utstyr som er nevnt. Prøv dette prosjektet på egen risiko.
Innholdsfortegnelse
- Deleliste.
- Utvikling Miljø Forberedelse.
- La Oss Starte Koding!
denne lysbildeserien krever JavaScript.
Deleliste
alle priser er i USD.
- 2n6284g Npn Darlington BJT Transistor. BJT betyr bipolar kryss transistor(praktisk fordi DEN har EN LIKESTRØMSGEVINST på 750).
- Tre 12 kOhm 1/2 watt motstander.
- Koblingsboks med skrueklemmer eller stangkontakt.
- Texas Instruments Launchpad RM57L MCU (RM57L843) utviklingssett.
- 10 kOhm NTC Termistor Med en b-verdi på 3435. ‘NTC’ betyr at motstanden minker når temperaturen øker.
- 40mm x 40mm (eller større, hvis du ikke finner den størrelsen) kjøleribbe for transistoren.
- Jumper ledninger/pin plugger for å koble utviklingssettets pinner til transistoren, og for å koble transistoren til strømkilden(med mindre du bruker et brødbrett). Disse er vanligvis i $3-6-serien.
- 12 eller 5 volt strømkilde.
- 12 volt CPU fan, eller en 5 volt laptop fan (dette prosjektet er beregnet for tre eller fire-wire fans som støtter PWM). Disse er vanligvis i $10 – $20-serien.
- CPU-kjøler (med kjøleribbe og vifte inkludert) eller en annen kombinasjon av en vifte og en varm gjenstand som kan avkjøles med den. Dette gjør at du kan se viften kontrolleren automatisk kjøle seg av, og slå av viften. Jeg brukte EN CPU kjøler med en innebygd vifte. Det er den ultimate testen!
jeg vil anbefale å feste en kjøleribbe til transistoren hvis du skal drive store fans (større enn de små 80mm-fansen som vanligvis brukes til desktop CPU-kjøling). Det vil generere en betydelig mengde varme.
Forbered Ditt Utviklingsmiljø
RM57L843 utviklingssettet er hjertet av DENNE pwm-viftekontrolleren (måten disse mikrokontrollene fungerer på, er ikke mye forskjellig fra En Arduino, så vær ikke skremt!). Vårt første skritt for å bygge denne pwm fan controller er å sette opp vårt utviklingsmiljø som vi vil bruke til å programmere / blinke MCU.
Koble Launchpad RM57L development kit til datamaskinens USB-port ved hjelp av kabelen som følger med, og opprett Deretter En Texas Instruments-konto slik at DU kan laste NED CCS IDE. Vi vil også bruke HALCoGen for denne øvelsen. HALCoGen er EN HAL kode generator som lar deg enkelt konfigurere MCU ved HJELP AV EN GUI. I dette tilfellet vil vi bruke den til å konfigurere analog-til-digital-omformeren (MibADC) og HET-timermodulen.
Last Ned HALCoGen og CCS (sørg for at Du er logget INN PÅ DIN ti-konto for CCS), og følg deretter instruksjonene nedenfor for å opprette Ditt HALCoGen-prosjekt.
opprett Først et nytt prosjekt I HALCoGen, velg ‘RM57Lx’ utviklingssett, og så ser du en liste over varianter til høyre på skjermen. I dette tilfellet er det bare en variant: RM57L843ZWT. Velg det og navngi prosjektet DITT ‘ PWM ‘ som vist nedenfor. Skriv inn prosjektets bane i Feltet’ Plassering’, noter det, og klikk OK. VI lagrer VÅRT CCS-prosjekt i samme katalog. DITT pwm-prosjekt skal være plassert i en mappe som heter PWM, under arbeidskatalogen din, som vi vil nevne RM57L.
Opprett et nytt prosjekt kalt ‘ PWM ‘ I HALCoGen. Det er her du konfigurerer adc-og HET-modulene.
for å bygge EN pwm-viftekontroller må du sette opp timere som vil svinge en liten elektrisk på og av, og angi frekvensen.
aktiver DERETTER adc1-og HET1-driverne ved å velge Fanen ‘Driver Enable’, og merk av i boksene som vist nedenfor. Den analoge til digitale omformeren (ADC) vil bli brukt til å konvertere den analoge temperatursensoravlesningen til en digital verdi vi kan bruke til å bestemme temperaturen, slik at viftekontrolleren kan justere viftehastigheten tilsvarende. High-end timer (HET) vil bli brukt til å generere VÅR PWM signal, som vil bli brukt til å styre en enkel BJT transistor.
jeg anbefaler at du fjerner merket for resten av driverne for å spare systemressurser (FOR EKSEMPEL: RAM og flashminne).
Aktiver HET1-og ADC1-driverne I HALCoGen.
Det er nå på tide å konfigurere vår pwm fan controller analog til digital converter (som er innebygd I Launchpad RM57L MCU). Gå TIL adc1-fanen og sett FiFo-størrelsen til 1, da det er alt vi trenger for dette prosjektet. Velg Også Aktiver Pin 7, da det er det vi vil koble temperatursensoren til. Pin 7 er merket ‘AI1_7’ på undersiden av Launchpad development kit.
Hvordan Analog Til Digital Konvertering Fungerer
Fortsett TIL HET1-fanen der du konfigurerer viftekontrollerens pwm-timer (innebygd I RM57L-utviklingssettet), OG HET-pinnen som styrer transistoren som driver viften og gjør følgende som vist på neste skjermbilde.
Velg kategorien pwm 0-7, sett Feltet Plikt FOR PWM 0 til 0. Det setter driftssyklusen TIL pwm-signalet til 0, og setter dermed driftssyklusen til viften du styrer til 0. En driftssyklus på 0 betyr ganske enkelt at viften vil være av. En annen måte å si det på er: prosentandelen av tiden som strømmen vil være på, er 0.
vi starter med en driftssyklus på 0 i dette prosjektet fordi vi skal programmatisk justere driftssyklusen (og dermed viftens hastighet) på en slik måte at den følger temperaturen på kjøleribben temperatursensoren er festet til. Når driftssyklusen er satt til 0, vil viftekontrolleren slå av viften (0 tilsvarer 0%). Deretter merker du av for ‘Aktiver’ – boksene til venstre for ‘ Pin ‘ – feltet. Det aktiverer PWM-signalet. Skriv inn 2 i’ Pin ‘- feltet, SOM ER HET port 1, Pin 2, merket ‘HET1_2’ pa undersiden av Launchpad. Til slutt: skriv inn 10 000 (uten komma) I Punktum-feltet.
enheten som brukes i dette feltet er mikrosekundet. Et mikrosekund er en milliondel av et sekund. Hvis du setter dette feltet til 10 000, vil HET-timersyklusen slå på og av hver 10 000 mikrosekunder (hver 0.01 sekunder). På grunn av denne raske bryteren vil du ikke merke at strømmen slås på og av, noe som resulterer i jevn, kontinuerlig drift av viften.
Aktiver timeren ‘PWM 0’.
for Å bryte Opp HALCoGen konfigurasjon, velg Kategorien Pin 0-7. Det er her DU vil konfigurere RM57L-pinnen som transistorens base vil bli koblet til (gjennom 12 kOhm motstanden, selvfølgelig). Merk AV I DIR-boksen i Delen ‘Bit 2’ som vist nedenfor for å sette bit 2 til utgangsretningen. Dette gjør at vi kan slå på viften. En pin kan bli referert til som en bit, Så ‘Bit 2’ betyr I dette tilfellet HET Pin 2.
Hva Er En Motstand?
utgangsverdien (merket DOUT i skjermbildet nedenfor) er tilstanden til pinnen, som kan være enten på (1) eller av (0). Kontroller at den er satt til 0,så den er av når MCU starter opp.
Sett HET1, Pin 2 til utgangsretningen.
Velg Fil > Lagre Prosjekt, Og Deretter Fil > Generer Kode(eller trykk F5). Se På ‘Output’ – ruten nederst til det står at kodegenereringen er fullført. Nå kan du flytte inn PÅ CCS-konfigurasjonen, og når du er ferdig, kan du endelig samle delene og bygge viftekontrolleren.
La Oss Kode!
Start CCS og velg / opprett EN katalog MED NAVNET RM57L som arbeidsområde som vist nedenfor. Opprett et nytt prosjekt I Code Composer Studio kalt PWM, som vil bli lagret i roten TIL pwm-katalogen der DU vil se PWM.hcg-fil. PWM.hcg er Din HALCoGen prosjekt fil. SOM jeg sa ovenfor, SKAL CCS-og HALCoGen-prosjektfilene være i samme katalog for denne øvelsen.
Koble Til Launchpad RM57L development kit med den medfølgende USB-kabelen.
til høyre velger Du ‘RM57L8x’ fra rullegardinlisten, da det er det vi skal bruke. Deretter velger DU XDS110 USB debug probe fra rullegardinlisten under den. Til Slutt velger Du ‘Tomt Prosjekt’ og klikker På Fullfør.
Høyreklikk pwm-prosjektet i Project Explorer-ruten (det er på venstre side av skjermen), og legg Deretter Til HALCoGen /includes-mappen Fra pwm-prosjektkatalogen TIL CCS-prosjektet ved å klikke på knappen sirklet nedenfor. DISSE RM57L inkluderer filer består av biblioteker og drivere som gjør det mye enklere å skrive programmer FOR MCU.
Naviger Til HL_sys_main.c-fil I Prosjektutforsker-Ruten til venstre under / pwm / source/. I den filen limer DU INN RM57L-kodeeksemplet nedenfor.
Kildekoden (Hercules RM57L Kodeeksempel)
FØLGENDE RM57L eksempelkode kan lastes opp til Launchpad via USB ved Hjelp Av Code Composer Studio. Slik ser kildefilen din ut:
Temperaturavlesningene er i °C.
HL_sys_main.c
/* USER CODE BEGIN (1) */#include "HL_het.h" //The HET library we'll use for PWM.#include "HL_adc.h" //The ADC library we'll use to read the sensor./* USER CODE END */void main(void){/* USER CODE BEGIN (3) */adcData_t adc_data; //ADC Data Structure.adcData_t *adc_data_ptr = &adc_data; //ADC Data Pointer.unsigned int value; //The ADC value is stored in this variable.float resistance; //The resistance of the thermistor at the current temperature reading;float degperohm = 0.003267974; //Degrees per ohm of resistance.unsigned int temperature; //The temperature in degrees Celsius.hetInit(); //Initialize the HET module.adcInit(); //Initialize the ADC module.while(1) //ADC conversion loop.{ adcStartConversion(adcREG1, 1U); //Start conversion on ADC 1. while(!adcIsConversionComplete(adcREG1, 1U)); //Keep looping until the conversion is complete. adcGetData(adcREG1, 1U, adc_data_ptr); //Store conversion into ADC pointer value = (unsigned int)adc_data_ptr->value; resistance = 1000 * (4096 / value); temperature = degperohm * resistance;//Adjust the fan speed based on the temperature readings obtained above. pwmStart(hetRAM1, pwm0); if (temperature < 40) { pwmSetDuty(hetRAM1, pwm0, 0U); //0% duty cycle. Fan is switched off. } else if (temperature >= 40 && temperature <= 42) { //If the temp is between 40°C and 42°C, set the fan to 20%. pwmSetDuty(hetRAM1, pwm0, 20U); //20% duty cycle. Fan Speed 1. } else if (temperature >= 42 && temperature <= 44) { pwmSetDuty(hetRAM1, pwm0, 30U); //30% duty cycle. Fan Speed 2. } else if (temperature >= 44 && temperature <= 46) { pwmSetDuty(hetRAM1, pwm0, 40U); //40% duty cycle. Fan Speed 3. } else if (temperature >= 46 && temperature <= 48) { pwmSetDuty(hetRAM1, pwm0, 50U); //50% duty cycle. Fan Speed 4. } else if (temperature >= 48 && temperature <= 50) { pwmSetDuty(hetRAM1, pwm0, 60U); //60% duty cycle. Fan Speed 5. } else if (temperature >= 50 && temperature <= 52) { pwmSetDuty(hetRAM1, pwm0, 70U); //70% duty cycle. Fan Speed 6. } else if (temperature >= 52 && temperature <= 54) { pwmSetDuty(hetRAM1, pwm0, 80U); //80% duty cycle. Fan Speed 7. } else if (temperature >= 54 && temperature <= 56) { pwmSetDuty(hetRAM1, pwm0, 90U); //90% duty cycle. Fan Speed 8. } else if (temperature >= 56 && temperature <= 58) { pwmSetDuty(hetRAM1, pwm0, 100U); //100% duty cycle. Fan Speed 9 (full speed). } else if (temperature > 65) { //65 //Code to display a temperature warning. 65 °C is a bit hot, warn the user. } else if (temperature > 70) { //Code to shut the device down (70 °C just won't do, shut it off). }} //End of ADC conversion loop./* USER CODE END */}
DU er velkommen til å omfordele DENNE RM57L-koden, forutsatt at du inkluderer en link tilbake til denne siden.
plasser alltid koden mellom / * BRUKERKODEN BEGIN * / og / * BRUKERKODEN END * / comments, slik At HALCoGen ikke vil slette Den etter å ha gjort endringer i prosjektet.
husk alltid at kjøletemperaturen kommer til å være lavere enn TEMPERATUREN PÅ CPU eller hvilken enhet den kjøler. Dette betyr at hvis kjøleribben er 70 °C, er CPUEN enda varmere enn det. Du kan også designe denne pwm-viftekontrolleren for å måle CPU-temperaturen direkte og plassere termistoren på den. Dette er mer nøyaktig, da kjøleflatetemperaturen sakte ligger bak CPU-temperaturen.
HVER av ADC-verdiene er digitale representasjoner av viftekontrollerens temperaturavlesninger, og hvert verdiområde representerer et temperaturområde som krever en viss mengde luftstrøm for å avkjøle den. I tilfelle av denne termistoren tilsvarer en lavere ADC-verdi en høyere temperatur og omvendt. Koden er nå oppdatert for å konvertere analog-til-digital omformer verdier til temperaturavlesninger i grader Celsius.
eksempel scenario: ET ADC-verdiområde på 310 til 320 kan være høyt nok til å garantere å dreie viften helt opp til 80%, da det indikerer at testpersonen vår (kjøleribben og DERMED CPU) blir varm. Men hvis kjøleribben/viften er stor nok, bør denne hastigheten ikke være nødvendig mesteparten av tiden. Dette er et tilfelle der du kanskje vil kapitalisere på en større kjøleribbe.
PÅ den ANNEN side kan ET ADC-verdiområde på 340 til 350 indikere at kjøleribben bare er litt varm, og krever bare at viften skal fungere ved svært lav innstilling (20%), så det blir mye roligere ved denne innstillingen. Jeg angir driftssyklusen basert PÅ ADC-verdiområdene, i stedet for de nøyaktige ADC-verdiene for å unngå hyppige hastighetssvingninger. Jeg vil anbefale å implementere EN UART-rutine som overfører analog-til-digital-omformeravlesningene til datamaskinen din, slik at du kan se alt som skjer i sanntid. Det gjør feilsøking enklere, og det er også informativt.
Nyttige applikasjoner for PWM inkluderer, men er ikke begrenset til:
- klimaanlegg og kjøleskap kompressor hastighetskontroll for forbedret effektivitet og redusert støynivå.
- led lampe dimming.
- HEV / elektrisk kjøretøy hastighetskontroll.
- ventilasjonsviftekontrollere.
- Radiatorviftekontrollere, som kan spare strøm, gass og redusere støyforurensning forårsaket av biler på veiene. Støyreduksjonen kan til og med hjelpe folk til å sove bedre om natten i noen tilfeller.
vær oppmerksom på at alle programmene ovenfor krever en vifte som støtter PWM. Dessverre er ikke alle fans bygget for dette.
Maskinvareoppsett
som jeg sa i begynnelsen, ble denne artikkelen skrevet med antagelsen om at du vet hvordan du bruker en transistor, og hvordan du kobler sensoren til Launchpad trygt.
Koble termistoren TIL ADC port 1 pin 7, og transistoren TIL HET port 1 pin 2 på RM57L development kit, ved hjelp av de tre motstandene i delelisten tilsvarende. Hvis DU bruker EN CPU-kjøler (heatsink + innebygd viftekombinasjon), sett deretter temperatursensoren inn i kjøleribben(pass på at ingen av sensorterminalene kommer i kontakt med kjøleribben, som kan være elektrisk ledende). Koble kjøleviften til kontrolleren. Tutorials koblet nedenfor vil hjelpe deg å lære å sette opp fan, ADC pin, og transistor.
Sparkfun forklarer analog til digital konvertering, og et grunnleggende eksempel på EN ADC-sensorforbindelse her (som er det jeg brukte til dette prosjektet, bortsett fra at sensoren min har to ledninger, i stedet for de tre som deres potensiometer gjør). De forklarer også transistorer her.
når du har mestret det, kan du få din viftekontroller oppe på kort tid!
Sensor
ADC i RM57L MCU development kit konverterer analoge spenningsfluktuasjoner forårsaket av termistoren (eller hvilken temperatursensor du bruker) til digitale verdier lagret i verdivariabelen ovenfor. PÅ GRUNN AV AT adc-verdiene er avhengig av sensoren du bruker, må du bruke spesifikasjonene i sensorens dokumentasjon for å konvertere temperaturavlesningene til grader.
sensoren som ble brukt til dette prosjektet var en uxcell 3435b 10 kOhm termistor. En termistor er en motstand designet for å variere motstanden med temperatur(mye mer enn en vanlig motstand). Hvis en termistor er vurdert til 10 kOhm, betyr det at motstanden er 10 kOhm ved 25 °C.
NB: motstanden til en gitt termistor vil ikke lineært variere med temperatur, og derfor vil termistorprodusenter gi et temperatur mot motstandsdiagram, og (noen ganger) a -, B-og C-verdiene for bruk I Steinhart-Hart-ligningen, som løser dette problemet.
Kode testet vellykket MED ccs-versjoner: