kuinka rakentaa muuttuva nopeus PWM tuuletin ohjain
tässä artikkelissa näytän, miten rakentaa PWM tuuletin ohjain (DC)käyttäen lyhyt C-ohjelma, ja muutamia osia, kuten Launchpad rm57l Mikrocontroller development kit. Sen avulla käyttäjät voivat tehokkaasti vaihdella nopeutta PWM puhaltimet vähentää melutasoa, ja virrankulutus. Tämä projekti seuraa automaattisesti kohteen lämpötilaa, johon lämpötila-anturi on kiinnitetty (tässä tapauksessa CPU: n jäähdytyselementti, jota käytetään pienen termosähköisen moduulin jäähdyttämiseen), ja ohjaa tuulettimen nopeutta vastaavasti minimoidakseen melutehon sekä virrankulutuksen. Alla on demo desktop CPU coolerissa käytössä olevasta Tuulettimen ohjaimesta.
Video: Kompulsa.
ennen kuin oppii rakentamaan Tuulettimen nopeudensäätimen, se auttaa oppimaan, miten eri nopeudensäätömenetelmät toimivat. Selitän kaksi keskeistä teknologiaa: resistiiviset nopeudensäätimet ja PWM tuuletin ohjaimet.
resistiiviset Nopeudensäätimet
resistiiviset nopeudensäätimet ohjaavat tietyn puhallinmoottorin nopeutta vastustamalla virran virtausta voimanlähteestä moottoriin. Tämä voidaan tehdä käyttämällä potentiometrin ja transistorin tai muun varistoripiirin yhdistelmää. Entinen tekniikka on erittäin helppo rakentaa, mutta aiheuttaa transistori polttaa pois melko vähän virtaa sen läpi. Siksi se on tehoton. PWM taas pulssaa koko virran päälle ja pois monta kertaa sekunnissa. Transistori tuhlaa vielä jonkin verran sähköä, mutta ei niin paljon.
PWM-Nopeudensäätimet
Pulssinleveysmodulaatio on paljon monimutkaisempi, parempi ja yhä yleisempi virransäätömenetelmä, joka helpottaa muun muassa moottorin nopeuksien ja lampun kirkkauden säätöä energiatehokkaalla tavalla. Tärkeimpiä syitä PWM-moottoriohjaimille ovat laitteiden tehokkuuden parantaminen sekä melutason alentaminen käyttämällä niitä alhaisilla nopeuksilla aina kun se on mahdollista.
käytin ti Launchpad RM57L MCU development kitiä tämän tuulettimen ohjaimen rakentamiseen (kiitos TI: n lähettämisestä), mutta tämä koodi voidaan helposti muuttaa toimimaan myös halvemmalla Launchpad TMS57012: lla tai Launchpad TMS57004 Launchpadilla.
kun opetellaan PWM-puhallinsäätimen rakentamista, se auttaa ymmärtämään tai oppimaan eri teknologioiden/menetelmien toteuttamista sekä niiden hyviä ja huonoja puolia. Näin tiedät tarkalleen, mitä käyttää ja milloin.
tässä artikkelissa oletetaan, että sinulla on jonkin verran kokemusta sähkötekniikasta ja että osaat yhdistää turvallisesti transistorin, anturin ja kaikki muut mainitut laitteet. Kokeile tätä projektia omalla vastuullasi.
Sisällysluettelo
- Osaluettelo.
- Kehitysympäristön Valmistelu.
- aletaan koodaamaan!
tämä diaesitys vaatii JavaScriptin.
osaluettelo
kaikki hinnat ovat dollareissa.
- 2n6284g NPN Darlington BJT transistori. BJT tarkoittaa bipolaarista liitostransistoria (kätevä, koska sen tasavirta on 750).
- kolme 12 kohmin 1/2 watin vastusta.
- liitäntärasia, jossa on ruuviliitäntä tai tankoliitin.
- Texas Instruments Launchpad RM57L MCU (RM57L843) development kit.
- 10 kohmin NTC-termistori, jonka B-arvo on 3435. ’NTC’ tarkoittaa, että sen resistanssi pienenee aina, kun sen lämpötila nousee.
- 40mm x 40mm (tai suurempi, jos et löydä sitä kokoa) jäähdytyslevy transistorille.
- hyppyjohdot / pin-pistokkeet, joilla kytketään kehityspakkauksen nastat transistoriin ja transistori virtalähteeseen (ellet käytä leipälautaa). Nämä ovat yleensä 3-6 dollaria välillä.
- 12 tai 5 voltin voimanlähde.
- 12 voltin SUORITINTUULETIN tai 5 voltin kannettava tuuletin (tämä projekti on tarkoitettu PWM: ää tukeville kolmi-tai nelilankaisille tuulettimille). Nämä ovat tyypillisesti $10 – $20 välillä.
- SUORITINJÄÄHDYTIN (johon sisältyy jäähdytyslevy ja tuuletin) tai mikä tahansa muu Tuulettimen ja kuuman esineen yhdistelmä, jota voidaan jäähdyttää sillä. Näin voit katsoa Tuulettimen ohjaimen automaattisesti jäähtyvän ja sammuttaa Tuulettimen. Käytin PROSESSORIJÄÄHDYTINTÄ, jossa on sisäänrakennettu tuuletin. Se on äärimmäinen testi!
suosittelisin jäähdytyslevyn kiinnittämistä transistoriin, jos aiot käyttää suuria tuulettimia (suurempia kuin pienet 80mm Tuulettimet, joita käytetään tyypillisesti työpöytäprosessorin jäähdytykseen). Se tuottaa merkittävän määrän lämpöä.
valmistele Kehitysympäristösi
rm57l843-kehityspaketti on tämän PWM-tuulettimen ohjaimen sydän (näiden mikrokontrollereiden toimintatapa ei juuri eroa arduinosta, joten älä pelkää!). Meidän ensimmäinen askel rakentaa tämän PWM tuuletin ohjain on perustaa meidän kehitysympäristö, jota käytämme ohjelmoida / flash MCU.
kytke Launchpad RM57L kehityspaketti tietokoneen USB-porttiin mukana toimitetulla kaapelilla ja luo sitten Texas Instruments-tili, jotta voit ladata CCS IDE: n. Käytämme myös Halcogenia tähän harjoitukseen. HALCoGen on HAL-koodi generaattori, jonka avulla voit helposti määrittää MCU käyttäen GUI. Tässä tapauksessa, käytämme sitä määrittää analoginen-digitaalimuunnin (MibADC), ja Het ajastinmoduuli.
Lataa HALCoGen ja CCS (varmista, että olet kirjautunut CCS-tilillesi) ja luo sitten halcogen-projektisi alla olevien ohjeiden mukaisesti.
luo ensin uusi projekti Halcogeniin, valitse ”RM57Lx” – kehityspaketti, jonka jälkeen näet listan sen muunnelmista näytön oikealla puolella. Tässä tapauksessa on vain yksi variantti: Rm57l843zwt. Valitse tämä ja nimeä projekti’ PWM ’ alla esitetyllä tavalla. Kirjoita projektin polku ”Sijainti” – kenttään, kirjoita se muistiin ja napsauta OK. Tallennamme CCS-projektimme samaan hakemistoon. PWM-projektisi tulee sijaita PWM-nimisessä kansiossa työhakemistosi alla, jolle annamme nimen RM57L.
”new project” – näytöstä Luo uusi projekti nimeltä ” PWM ” halcogenissa. Tässä määrität ADC-ja HET-moduulit.
PWM-tuulettimen ohjaimen rakentamiseen tarvitaan ajastimia, jotka värähtelevät pientä sähkövirtaa päälle ja pois päältä ja asettavat niiden taajuuden.
ota seuraavaksi käyttöön adc1-ja HET1-ajurit valitsemalla ”Driver Enable” – välilehti ja valitsemalla alla olevat ruudut. Analogista digitaalimuunninta (ADC) käytetään analogisen lämpötila-anturin lukemien muuntamiseen digitaaliseksi arvoksi, jota voimme käyttää lämpötilan määrittämiseen, jolloin Tuulettimen ohjain voi säätää tuulettimen nopeutta vastaavasti. High-end ajastin (HET) käytetään tuottamaan meidän PWM signaali, jota käytetään ohjaamaan yksinkertainen BJT transistori.
suosittelen muiden ajurien valitsematta jättämistä järjestelmän resurssien (esimerkiksi RAM-muistin ja flash-muistin) säästämiseksi.
Enable the HET1 and ADC1 drivers in HALCoGen.
nyt on aika konfiguroida PWM-tuulettimen ohjain analogisesta digitaalimuuntimeen (joka on rakennettu Launchpad RM57L MCU: hun). Siirry adc1-välilehteen ja aseta FiFo-Koko 1: ksi, sillä siinä kaikki, mitä tarvitsemme tähän projektiin. Valitse myös Ota Pin 7, koska se on mitä liitämme lämpötila-anturi. Pin 7 on merkitty ’AI1_7’ alapuolella Launchpad development kit.
miten analoginen Digitaalimuunnos toimii
Siirry HET1-välilehteen, jossa voit määrittää Tuulettimen ohjaimemme PWM-ajastimen (sisäänrakennettu rm57l-kehityspakkaukseen) ja Het-tappin, joka ohjaa Tuulettimen virroittavaa transistoria ja tehdä seuraavan kuvakaappauksen mukaisesti.
valitse PWM 0-7-välilehti, aseta tehtäväkenttä PWM 0: lle 0: lle. Se asettaa PWM-signaalin toimintasyklin 0: een, mikä asettaa ohjattavan Tuulettimen toimintasyklin arvoon 0. Toimintasykli 0 tarkoittaa yksinkertaisesti sitä, että tuuletin on pois päältä. Toinen tapa ilmaista asia on: prosenttiosuus ajasta, että virta on päällä on 0.
tässä projektissa käynnistämme toimintasyklin 0: lla, koska aiomme ohjelmallisesti säätää toimintasyklin (ja siten tuulettimen nopeuden) siten, että se seuraa sen jäähdytyslevyn lämpötilaa, johon lämpötila-anturi on kiinnitetty. Kun toimintasykli on asetettu arvoon 0, Tuulettimen ohjain sammuttaa Tuulettimen (0 vastaa 0%). Seuraava, tarkista pari ’ ota ’valintaruudut vain vasemmalla’ Pin ’ kenttään. Se mahdollistaa PWM-signaalin. Kirjoita 2 ” Pin ” – kenttään, joka on HET-portti 1, Pin 2, merkitty ’HET1_2’ Laukaisulevyn alapuolella. Lopuksi: syötä 10 000 (ilman pilkkua) Jaksokenttään.
tässä kentässä käytetty yksikkö on mikrosekunti. Mikrosekunti on sekunnin miljoonasosa. Tämän kentän asettaminen 10 000: een tekee het-ajastinsyklistä virran päälle ja pois päältä 10 000 mikrosekunnin välein (joka 0.01 sekuntia). Nopean kytkemisen ansiosta et huomaa, että virta kytketään päälle ja pois päältä, mikä johtaa Tuulettimen sujuvaan ja jatkuvaan toimintaan.
Käytä ajastinta ”PWM 0”.
päättääksesi HALCoGen-kokoonpanon, Valitse Pin 0-7-välilehti. Tässä voit määrittää rm57l pin että transistori pohja on kytketty (kautta 12 kOhm Vastus, tietenkin). Valitse DIR-valintaruutu ’Bit 2’ – osiossa, kuten alla on esitetty, asettaaksesi bitin 2 lähtösuuntaan. Näin voimme kytkeä tuulettimen päälle. Pin voidaan kutsua vähän, joten ’Bit 2’ tässä tapauksessa tarkoittaa HET Pin 2.
Mikä On Vastus?
lähtöarvo (merkitty DOUT alla olevassa kuvakaappauksessa) on pin-koodin tila, joka voi olla joko päällä (1) tai pois (0). Varmista, että se on asetettu 0, joten sen pois, kun MCU aluksi käynnistyy.
Aseta HET1, Pin 2 lähtösuuntaan.
Valitse tiedosto > Tallenna projekti ja sitten Tiedosto > Luo koodi (tai paina F5). Katso ”Lähtö” ruudun alareunassa, kunnes se sanoo, että koodin luominen on valmis. Nyt voit siirtyä CCS-asetuksiin, ja kun olet valmis, voit vihdoin koota osat ja rakentaa Tuulettimen ohjaimen.
Let ’ s Code!
Käynnistä CCS ja valitse / Luo rm57l-niminen Hakemisto työtilaksesi alla kuvatulla tavalla. Luo uusi projekti Code Composer studiossa nimeltään PWM, joka tallennetaan juureen PWM hakemistoon, jossa näet PWM.hcg-tiedosto. PWM.hcg on HALCoGen-Projektin tiedosto. Kuten edellä sanoin, CCS – ja HALCoGen-projektitiedostot ovat samassa hakemistossa tätä tehtävää varten.
kytke Launchpad rm57l kehityspaketti käyttäen mukana toimitettua USB-kaapelia.
valitse oikealla puolellasi pudotusvalikosta ”RM57L8x”, sillä sitä me käytämme. Valitse seuraavaksi XDS110 USB-debug-anturi sen alapuolella olevasta pudotusvalikosta. Valitse lopuksi ”tyhjä projekti” ja valitse Valmis.
Napsauta PWM-projektia right click the Project Explorer-ruudussa (se on näytön vasemmalla puolella) ja lisää sitten halcogen /includes-kansio PWM-projektihakemistostasi CCS-projektiin klikkaamalla alla ympyröityä painiketta. Nämä RM57L sisältävät tiedostot koostuvat kirjastoista ja ajureista, jotka helpottavat ohjelmien kirjoittamista MCU: lle.
Navigoi hl_sys_mainiin.C-tiedosto projektin Resurssienhallinnan ruudussa vasemmalla kohdassa /PWM/source/. Liitä tiedostoon alla oleva rm57l-koodinäyte.
lähdekoodi (Hercules RM57L-Koodinäyte)
seuraava rm57l-näytenäyte voidaan ladata Laukaisulevyllesi USB: n kautta Code Composer Studion kautta. Tältä lähdetiedoston pitäisi näyttää:
lämpötilalukemat ovat °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 */}
voit jakaa tämän rm57l-koodin uudelleen edellyttäen, että lisäät linkin takaisin tälle sivulle.
Aseta koodi aina /* USER CODE BEGIN * / – ja /* USER CODE END * / – kommenttien väliin, jotta HALCoGen ei poista sitä tehtyään muutoksia projektiisi.
muista aina, että jäähdytyselementin lämpötila tulee olemaan alempi kuin suorittimen tai sen jäähdyttämän laitteen lämpötila. Tämä tarkoittaa sitä, että jos jäähdytyslevy on 70 °C, suoritin on sitäkin kuumempi. Voit myös suunnitella tämän PWM-tuulettimen ohjaimen suoraan mittaamaan suorittimen lämpötilaa ja asettamaan termistorin sille. Tämä on tarkempaa, sillä Jäähdytyslämpötila laahaa hitaasti suorittimen lämpötilaa jäljessä.
jokainen ADC-arvo on digitaalinen esitys Tuulettimen ohjaimen lämpötilalukemista, ja jokainen arvoalue edustaa lämpötila-aluetta, jonka jäähdyttämiseen tarvitaan tietty määrä ilmavirtaa. Tämän termistorin tapauksessa pienempi ADC-arvo vastaa korkeampaa lämpötilaa ja päinvastoin. Koodi on nyt päivitetty muuntaa analoginen-digitaalimuuntimen arvot lämpötilalukemiin celsiusasteina.
Esimerkkiskenaario: ADC-arvoalue 310 – 320 voi olla niin korkea, että tuulettimen käynnistäminen aina 80%: iin asti on perusteltua, koska se osoittaa, että testikohteemme (jäähdytyslevy ja siten CPU) kuumenee. Kuitenkin, jos jäähdytyslevy/tuuletin on tarpeeksi suuri, tämä nopeus ei pitäisi olla tarpeen suurimman osan ajasta. Tämä on yksi tapaus, jossa saatat haluta hyödyntää suurempi jäähdytyslevy.
toisaalta ADC-arvoalue 340-350 voi osoittaa, että jäähdytyselementti on vain hieman lämmin ja vaatii puhaltimen toimimaan vain hyvin matalalla asetuksella (20%), joten tällä asetuksella on paljon hiljaisempaa. Asetin toimintasyklin ADC – arvojen perusteella tarkkojen ADC-arvojen sijaan välttääkseni toistuvia nopeusvaihteluita. Suosittelen lämpimästi UART-rutiinin toteuttamista, joka lähettää analogi-digitaalimuuntimen lukemat tietokoneellesi, jotta näet kaiken tapahtuvan reaaliajassa. Se helpottaa virheenkorjausta, ja se on myös informatiivinen.
PWM: n hyödyllisiä käyttökohteita ovat mm.:
- Ilmastointilaitteen ja jääkaapin kompressorin nopeudensäätö parantaa tehokkuutta ja vähentää melutasoa.
- LED-lampun himmennys.
- HEV / sähköauton nopeusvalvonta.
- tuulettimien ohjaimet.
- jäähdyttimien Tuulettimet, joilla voidaan säästää sähköä, kaasua ja vähentää autojen aiheuttamaa meluhaittaa maanteillä. Melun vähentäminen voisi jopa auttaa ihmisiä nukkumaan paremmin yöllä joissakin tapauksissa.
muista, että kaikki yllä olevat sovellukset vaativat tuulettimen, joka tukee PWM: ää. Valitettavasti kaikkia faneja ei ole rakennettu tätä varten.
laitteistoasetukset
kuten alussa sanoin, tämä artikkeli on kirjoitettu olettaen, että osaat käyttää transistoria ja miten anturi liitetään laukaisualustaan turvallisesti.
Liitä termistori ADC-porttiin 1 pin 7, ja transistori HET-porttiin 1 pin 2 teidän rm57l kehitys kit, käyttäen kolmea vastukset osaluettelossa vastaavasti. Jos käytät CPU-jäähdytin (siili + sisäänrakennettu tuuletin combo), aseta lämpötila-anturi jäähdytyselementtiin (varmista, ettet salli minkään anturin liittimien joutua kosketuksiin jäähdytyselementin kanssa, joka voi olla sähköä johtava). Liitä jäähdytyselementin tuuletin ohjaimeen. Alla olevat tutoriaalit auttavat sinua oppimaan Tuulettimen, ADC-pin-koodin ja transistorin asettamisen.
Sparkfun selittää analogisen digitaaliseen muuntamiseen, ja perusesimerkki ADC-anturiliitännästä tässä (jota käytin tässä projektissa, paitsi että anturissani on kaksi johtoa, niiden kolmen potentiometrin sijaan). Tässä selitetään myös transistorit.
kun olet oppinut sen, voit saada Tuulettimen ohjaimesi toimimaan hetkessä!
anturi
RM57L MCU-kehityspaketin ADC muuntaa termistorin (tai sen lämpötila-anturin, jota käytät) aiheuttamat analogiset jännitevaihtelut digitaalisiksi arvoiksi, jotka on tallennettu yllä olevaan arvomuuttujaan. Koska ADC-arvot riippuvat käyttämästäsi anturista, sinun on käytettävä anturin dokumentaation määrityksiä lämpötilalukemien muuntamiseksi asteiksi.
tässä projektissa käytetty anturi oli uxcell 3435B 10 kohmin termistori. Termistori on vastus, joka on suunniteltu muuttamaan resistanssiaan lämpötilan mukaan (paljon enemmän kuin tavallinen vastus). Jos termistori on mitoitettu arvolla 10 kOhm, se tarkoittaa, että sen vastus on 10 kOhm lämpötilassa 25 °C.
NB: tietyn termistorin vastus ei lineaarisesti muutu lämpötilan mukaan, minkä vuoksi termistorin valmistajat antavat lämpötilan vs vastuskaavion, ja (joskus) A, B ja C arvot käytettäväksi Steinhart-Hart-yhtälössä, joka käsittelee tätä ongelmaa.
CCS-versioilla testattu koodi: