ianuarie 27, 2022

cum se construiește un controler de ventilator PWM cu viteză variabilă

în acest articol, vă voi arăta cum să construiți un controler de ventilator PWM (DC) folosind un scurt program C și câteva părți, inclusiv kitul de dezvoltare a microcontrolerului Launchpad RM57L. Permite utilizatorilor să varieze eficient viteza ventilatoarelor PWM pentru a reduce nivelul de zgomot și consumul de energie. Acest proiect monitorizează automat temperatura obiectului la care este atașat senzorul de temperatură (în acest caz, un radiator CPU folosit pentru răcirea unui mic modul termoelectric) și controlează viteza ventilatorului în consecință pentru a minimiza producția de zgomot, precum și consumul de energie. Mai jos este o demonstrație a controlerului ventilatorului utilizat pe un cooler CPU desktop.

Video: Kompulsa.

înainte de a învăța cum să construiți un controler de viteză al ventilatorului, vă ajută să aflați cum funcționează diferitele metode de control al vitezei. Voi explica două tehnologii cheie: controlere de viteză rezistive și controlere de ventilator PWM.

controlere de turație rezistive

controlere de turație rezistive controlează turația unui anumit motor al ventilatorului rezistând la curgerea curentului de la sursa de alimentare la motor. Acest lucru se poate face folosind o combinație de potențiometru și tranzistor sau un alt circuit varistor. Tehnologia anterioară este extrem de ușor de construit, dar face ca tranzistorul să ardă destul de puțin din curentul care trece prin el. Prin urmare, este ineficient. PWM pe de altă parte, pulsează curentul complet pornit și oprit de mai multe ori pe secundă. Tranzistorul va pierde în continuare ceva energie electrică, dar nu la fel de mult.

controlere de viteză PWM

modularea lățimii impulsurilor este o metodă de control curent mult mai complexă, superioară și din ce în ce mai comună, care facilitează controlul vitezei motorului, luminozității lămpii, printre altele într-o manieră eficientă din punct de vedere energetic. Principalele motive pentru controlerele motorului PWM includ îmbunătățirea eficienței aparatelor, precum și reducerea nivelului de zgomot prin operarea acestora la viteze mici ori de câte ori este posibil.

am folosit TI Launchpad RM57L MCU development kit pentru a construi acest controler ventilator (datorită TI pentru trimiterea acestuia), dar acest cod poate fi ușor modificat pentru a rula pe Launchpad mai ieftin TMS57012, sau Launchpad Tms57004 Launchpad, de asemenea.

când învățați cum să construiți un controler de ventilator pwm, vă ajută să înțelegeți sau să învățați cum să executați diferitele tehnologii/metode, precum și meritele și dezavantajele acestora. În acest fel, veți ști exact ce să utilizați și când.

acest articol presupune că aveți o experiență de inginerie electrică și știți cum să conectați în siguranță tranzistorul, senzorul și toate celelalte echipamente menționate. Încercați acest proiect pe propriul risc.

Cuprins

  1. Lista Pieselor.
  2. Pregătirea Mediului De Dezvoltare.
  3. să începem codificarea!

această prezentare necesită JavaScript.

Lista de piese

toate prețurile sunt în USD.

  1. 2n6284g NPN Darlington BJT tranzistor. BJT înseamnă tranzistor de joncțiune bipolar (convenabil deoarece are un câștig de curent continuu de 750).
  2. trei rezistențe de 12 kOhm 1/2 watt.
  3. cutie de joncțiune cu borne cu șurub sau conector de bare.
  4. Texas Instruments Launchpad RM57L MCU (RM57L843) kit de dezvoltare.
  5. 10 kOhm NTC termistor cu o valoare B de 3435. NTC înseamnă că rezistența scade ori de câte ori crește temperatura.
  6. 40mm x 40mm (sau mai mare, dacă nu puteți găsi această dimensiune) radiator pentru tranzistor.
  7. Jumper fire/pin prize pentru a conecta pinii kitului de dezvoltare la tranzistor și pentru a conecta tranzistorul la sursa de alimentare (cu excepția cazului în care utilizați o placă de pâine). Acestea sunt de obicei în intervalul $3-6.
  8. sursă de alimentare de 12 sau 5 volți.
  9. ventilator CPU de 12 volți sau un ventilator laptop de 5 volți (acest proiect este destinat ventilatoarelor cu trei sau patru fire care acceptă PWM). Acestea sunt de obicei în intervalul $10 – $20.
  10. cooler CPU (cu radiator și ventilator inclus) sau orice altă combinație a unui ventilator și a unui obiect fierbinte care poate fi răcit cu acesta. Acest lucru vă permite să urmăriți controlerul ventilatorului să se răcească automat și să opriți ventilatorul. Am folosit un cooler CPU cu un ventilator încorporat. Este testul final!

aș recomanda atașarea unui radiator la tranzistor dacă aveți de gând să alimentați ventilatoare mari (mai mari decât ventilatoarele mici de 80 mm care sunt utilizate în mod obișnuit pentru răcirea procesorului desktop). Acesta va genera o cantitate semnificativă de căldură.

pregătiți-vă mediul de dezvoltare

kitul de dezvoltare RM57L843 este inima acestui controler de ventilator PWM (modul în care funcționează aceste microcontrolere nu este mult diferit de un Arduino, așa că nu vă lăsați intimidați!). Primul nostru pas pentru construirea acestui controler de ventilator pwm este de a configura mediul nostru de dezvoltare pe care îl vom folosi pentru a programa/bloca MCU.

conectați kitul de dezvoltare Launchpad RM57L la portul USB al computerului utilizând cablul furnizat, apoi creați un cont Texas Instruments pentru a putea descărca IDE-ul CCS. De asemenea, vom folosi HALCoGen pentru acest exercițiu. HALCoGen este un generator de cod HAL care vă permite să configurați cu ușurință MCU folosind un GUI. În acest caz, îl vom folosi pentru a configura convertorul analog-digital (mibadc) și modulul temporizator HET.

descărcați HALCoGen și CCS (asigurați-vă că sunteți conectat la contul dvs. TI pentru CCS), apoi urmați instrucțiunile de mai jos pentru a crea proiectul HALCoGen.

mai întâi, creați un nou proiect în HALCoGen, selectați kitul de dezvoltare ‘RM57Lx’ și apoi veți vedea o listă a variantelor sale în partea dreaptă a ecranului. În acest caz, există o singură variantă: RM57L843ZWT. Selectați-l și denumiți proiectul dvs. ‘ PWM ‘ așa cum se arată mai jos. Introduceți calea proiectului în câmpul ‘Locație’, notați-l și faceți clic pe OK. Vom stoca proiectul nostru CCS în același director. Proiectul dvs. PWM ar trebui să fie localizat într-un folder numit PWM, sub directorul dvs. de lucru, pe care îl vom numi RM57L.

o captură de ecran a ecranului ' new project 'în HALCoGen

creați un nou proiect numit’ PWM ‘ în HALCoGen. Aici configurați modulele ADC și HET.

pentru a construi un controler de ventilator PWM, trebuie să configurați cronometre care vor oscila un mic electric pornit și oprit și să setați frecvența acestora.

apoi, activați driverele ADC1 și HET1 selectând fila ‘activare Driver’ și bifând casetele așa cum se arată mai jos. Convertorul analogic la Digital (ADC) va fi utilizat pentru a converti citirea senzorului de temperatură analogic la o valoare digitală pe care o putem folosi pentru a determina temperatura, permițând controlerului ventilatorului să regleze viteza ventilatorului în consecință. Cronometrul high-end (HET) va fi utilizat pentru a genera semnalul nostru PWM, care va fi utilizat pentru a controla un tranzistor BJT simplu.

vă recomand să debifați restul driverelor pentru a economisi resursele sistemului (de exemplu: RAM și memorie flash).

enable-ADC-and-Het-drivers

Enable driverele HET1 și ADC1 în HALCoGen.

acum este timpul să configurați convertorul analogic la Digital al controlerului ventilatorului pwm (care este încorporat în platforma de lansare RM57L MCU). Accesați fila ADC1 și setați dimensiunea FiFo la 1, deoarece asta este tot ce avem nevoie pentru acest proiect. De asemenea, selectați Activați pinul 7, deoarece la asta vom conecta senzorul de temperatură. Pinul 7 este marcat ‘AI1_7’ pe partea inferioară a kitului de dezvoltare Launchpad.

cum funcționează conversia analogică la digitală

captură de ecran a configurației ADC1

treceți la fila HET1 unde veți configura cronometrul PWM al controlerului ventilatorului (încorporat în kitul de dezvoltare RM57L) și pinul HET care controlează tranzistorul care alimentează ventilatorul și faceți următoarele așa cum se arată în următoarea captură de ecran.

selectați fila Pwm 0-7, setați câmpul Duty pentru PWM 0 la 0. Aceasta stabilește ciclul de funcționare al semnalului PWM la 0, prin urmare, setarea ciclului de funcționare al ventilatorului pe care îl controlați la 0. Un ciclu de funcționare de 0 înseamnă pur și simplu că ventilatorul va fi oprit. Un alt mod de a spune este: procentul de timp în care puterea va fi pornită este 0.

vom începe cu un ciclu de funcționare de 0 în acest proiect, deoarece vom regla programatic ciclul de funcționare (și, prin urmare, viteza ventilatorului) în așa fel încât să urmeze temperatura radiatorului la care este atașat senzorul de temperatură. Când ciclul de funcționare este setat la 0, controlerul ventilatorului va opri ventilatorul (0 corespunde la 0%). Apoi, bifați perechea de casete de selectare’ Enable ‘chiar în stânga câmpului’ Pin’. Aceasta permite semnalul PWM. Introduceți 2 în câmpul ‘Pin’, care este portul HET 1, pinul 2, marcat’ HET1_2 ‘ pe partea inferioară a platformei de lansare. În cele din urmă: introduceți 10.000 (fără virgulă) în câmpul perioadă.

unitatea utilizată în acest câmp este microsecunda. O microsecundă este o milionime de secundă. Setarea acestui câmp la 10.000 va face ca ciclul temporizatorului HET să pornească și să se oprească la fiecare 10.000 de microsecunde (la fiecare 0.01 secunde). Datorită acestei comutări rapide, nu veți observa că alimentarea este pornită și oprită, rezultând o funcționare lină și continuă a ventilatorului.

 ecranul de configurare PWM.

activați cronometrul ‘PWM 0’.

pentru a încheia configurația HALCoGen, selectați fila Pin 0-7. Aici veți configura pinul RM57L la care va fi conectată baza tranzistorului (prin rezistorul 12 kOhm, desigur). Bifați caseta de selectare DIR din secțiunea’ Bit 2′, așa cum se arată mai jos, pentru a seta bitul 2 pe direcția de ieșire. Acest lucru ne permite să pornim ventilatorul. Un pin poate fi denumit bit, deci ‘Bit 2’ în acest caz înseamnă het Pin 2.

Ce Este Un Rezistor?

valoarea de ieșire (marcată DOUT în captura de ecran de mai jos) este starea pinului, care poate fi pornit (1) sau oprit (0). Asigurați-vă că este setat la 0, deci este oprit atunci când MCU pornește inițial.

ecranul de configurare a temporizatorului HET

setați HET1, pinul 2 la Direcția de ieșire.

selectați Fișier > Salvare proiect, apoi fișier > Generare cod (sau apăsați F5). Uita-te la’ ieșire ‘ panoul din partea de jos până când se spune că generarea de cod este completă. Acum Puteți trece la configurația CCS, iar când ați terminat, puteți aduna în cele din urmă piesele și puteți construi controlerul ventilatorului.

să Codăm!

lansați CCS și selectați/Creați un director numit RM57L ca spațiu de lucru, așa cum se arată mai jos. Creați un nou proiect în Code Composer Studio numit PWM, care va fi salvat în rădăcina directorului PWM unde veți vedea PWM.fișier hcg. PWM.hcg este fișierul dvs. de proiect HALCoGen. Așa cum am spus mai sus, fișierele de proiecte CCS și HALCoGen trebuie să fie în același director pentru acest exercițiu.

conectați kitul de dezvoltare Launchpad RM57L utilizând cablul USB furnizat.

în dreapta, selectați ‘RM57L8x’ din caseta derulantă, deoarece aceasta este ceea ce vom folosi. Apoi, selectați sonda de depanare USB XDS110 din caseta derulantă de sub ea. În cele din urmă, selectați ‘Empty Project’ și faceți clic pe Finish.

Creare proiect CCS

faceți clic dreapta pe proiectul PWM din panoul Project Explorer (se află în partea stângă a ecranului), apoi adăugați folderul HALCoGen /include din directorul Proiectului PWM în proiectul CCS făcând clic pe butonul încercuit mai jos. Aceste RM57L includ fișiere constau din biblioteci și drivere care fac mult mai ușor pentru a scrie programe pentru MCU.

adăugați include directorul

navigați la HL_sys_main.fișier C în panoul Project Explorer din stânga sub /PWM/source/. În acel fișier, lipiți eșantionul de cod RM57L de mai jos.

codul sursă (eșantion de cod Hercules RM57L)

următorul cod de eșantion RM57L poate fi încărcat pe platforma de lansare prin USB utilizând Code Composer Studio. Acesta este modul în care fișierul sursă ar trebui să arate:

citirile de temperatură sunt în 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 */}

sunteți binevenit să redistribuiți acest cod RM57L, cu condiția să includeți un link înapoi la această pagină.

plasați întotdeauna codul dvs. între comentariile /* USER CODE BEGIN */ și /* USER CODE END*/, astfel încât HALCoGen să nu îl șteargă după ce a făcut modificări la proiectul dvs.

amintiți-vă întotdeauna că temperatura radiatorului va fi mai mică decât temperatura procesorului sau a oricărui dispozitiv pe care îl răcește. Acest lucru înseamnă că, dacă radiatorul este 70 C, atunci CPU-ul este chiar mai fierbinte decât asta. De asemenea, puteți proiecta acest controler de ventilator pwm pentru a măsura direct temperatura procesorului și a plasa termistorul pe el. Acest lucru este mai precis, deoarece temperatura radiatorului se situează încet în spatele temperaturii procesorului.

fiecare dintre valorile ADC sunt reprezentări digitale ale citirilor de temperatură ale controlerului ventilatorului și fiecare interval de valori reprezintă un interval de temperatură care necesită o anumită cantitate de flux de aer pentru a-l răci. În cazul acestui termistor, o valoare ADC mai mică corespunde unei temperaturi mai ridicate și invers. Codul a fost acum actualizat pentru a converti valorile convertorului analog-digital la citirile de temperatură în grade Celsius.

exemplu de scenariu: Un interval de valori ADC de la 310 la 320 poate fi suficient de mare pentru a justifica pornirea ventilatorului până la 80%, deoarece indică faptul că subiectul nostru de testare (radiatorul și, prin urmare, procesorul) se încălzește. Cu toate acestea, dacă radiatorul/ventilatorul sunt suficient de mari, această viteză nu ar trebui să fie necesară de cele mai multe ori. Acesta este un caz în care poate doriți să valorificați un radiator mai mare.

pe de altă parte, un interval de valori ADC de la 340 la 350 poate indica faptul că radiatorul este doar puțin cald și necesită doar ventilatorul să funcționeze la o setare foarte scăzută (20%), deci va fi mult mai silențios la această setare. Am setat ciclul de funcționare pe baza intervalelor de valori ADC, în loc de valorile ADC exacte pentru a evita fluctuațiile frecvente de viteză. Aș recomanda foarte implementarea unei rutine UART care transmite citirile convertorului analog – digital pe computer, astfel încât să puteți vedea tot ce se întâmplă în timp real. Aceasta facilitează depanarea și este, de asemenea, informativă.

aplicațiile utile pentru PWM includ, dar nu se limitează la:

  1. controlul vitezei compresorului de aer condiționat și frigider pentru o eficiență îmbunătățită și niveluri reduse de zgomot.
  2. lampa cu LED-uri întunecare.
  3. HEV/controlul vitezei vehiculului electric.
  4. controlere ventilatoare de ventilație.
  5. controlere ventilator Radiator, care pot economisi energie electrică, gaz și reduce poluarea fonică cauzată de mașini pe drumuri. Reducerea zgomotului ar putea ajuta chiar și oamenii să doarmă mai bine noaptea în unele cazuri.

vă rugăm să rețineți că toate aplicațiile de mai sus necesită un ventilator care acceptă PWM. Din păcate, nu toți fanii sunt construiți pentru acest lucru.

configurare Hardware

așa cum am spus la început, acest articol a fost scris cu presupunerea că știți cum să utilizați un tranzistor și cum să conectați senzorul la platforma de lansare în siguranță.

conectați termistorul la portul ADC 1 pinul 7 și tranzistorul la portul HET 1 pinul 2 de pe kitul dvs. de dezvoltare RM57L, utilizând în consecință cele trei rezistențe din lista de piese. Dacă utilizați un răcitor CPU (radiator + combo ventilator încorporat), introduceți senzorul de temperatură în radiator (asigurați-vă că nu permiteți ca niciunul dintre bornele senzorului să intre în contact cu radiatorul, care poate fi conductiv electric). Conectați ventilatorul radiatorului la controler. Tutorialele legate mai jos vă vor ajuta să aflați cum să configurați ventilatorul, pinul ADC și tranzistorul.

Sparkfun explică conversia analogică la cea digitală și un exemplu de bază al unei conexiuni senzor ADC aici (ceea ce am folosit pentru acest proiect, cu excepția senzorului meu are două cabluri, mai degrabă decât cele trei pe care le face potențiometrul lor). De asemenea, explică tranzistoarele aici.

odată ce ați stăpânit asta, puteți avea controlerul ventilatorului în funcțiune în cel mai scurt timp!

senzor

ADC din kitul de dezvoltare RM57L MCU convertește fluctuațiile de tensiune analogice cauzate de termistor (sau oricare senzor de temperatură pe care îl utilizați) în valori digitale stocate în variabila de valoare de mai sus. Datorită faptului că valorile ADC depind de senzorul pe care îl utilizați, trebuie să utilizați specificațiile din documentația senzorului pentru a converti citirile de temperatură în grade.

senzorul utilizat pentru acest proiect a fost un termistor uxcell 3435b 10 kOhm. Un termistor este un rezistor conceput pentru a-și varia rezistența cu temperatura (mult mai mult decât un rezistor obișnuit). Dacă un termistor este evaluat la 10 kOhm, asta înseamnă că rezistența sa este de 10 kOhm la 25 C.

NB: rezistența unui termistor dat nu va varia liniar în funcție de temperatură, motiv pentru care producătorii de termistori vor furniza o diagramă de temperatură vs rezistență și (uneori) valorile A, B și C pentru utilizare în ecuația Steinhart-Hart, care abordează această problemă.

Cod testat cu succes cu versiunile CCS:

Lasă un răspuns

Adresa ta de email nu va fi publicată.