január 27, 2022

Hogyan építsünk egy változó sebességű PWM ventilátor vezérlő

ebben a cikkben megmutatom, hogyan kell építeni egy pwm ventilátor vezérlő (DC) segítségével egy rövid C programot, és néhány alkatrész, beleértve a Launchpad rm57l mikrokontroller development kit. Lehetővé teszi a felhasználók számára a PWM ventilátorok sebességének hatékony változtatását a zajszint és az energiafogyasztás csökkentése érdekében. Ez a projekt automatikusan figyeli annak a tárgynak a hőmérsékletét, amelyhez a hőmérséklet-érzékelő csatlakozik (ebben az esetben egy CPU hűtőborda, amelyet egy kis termoelektromos modul hűtésére használnak), és ennek megfelelően szabályozza a ventilátor sebességét a zajkibocsátás, valamint az energiafogyasztás minimalizálása érdekében. Az alábbiakban bemutatjuk az asztali CPU hűtőn használt ventilátorvezérlőt.

Videó: Kompulsa.

mielőtt megtanulná a ventilátor sebességszabályozójának felépítését, segít megtanulni a különféle sebességszabályozási módszerek működését. Két kulcsfontosságú technológiát fogok bemutatni: ellenállásos sebességszabályozókat és PWM ventilátor vezérlőket.

ellenállásos fordulatszám-szabályozók

az ellenállásos fordulatszám-szabályozók egy adott ventilátormotor sebességét úgy szabályozzák, hogy ellenállnak az áramforrásból a motorba áramló áramnak. Ezt egy potenciométer és tranzisztor, vagy egy másik varisztor áramkör kombinációjával lehet elvégezni. Az előbbi technológiát rendkívül könnyű felépíteni, de a tranzisztor elég nagy részét elégeti a rajta áthaladó áramból. Ezért nem hatékony. A PWM viszont másodpercenként többször be-és kikapcsolja a teljes áramot. A tranzisztor továbbra is pazarolja az áramot, de nem annyira.

PWM fordulatszám-szabályozók

az impulzusszélesség-moduláció sokkal összetettebb, jobb és egyre gyakoribb áramszabályozási módszer, amely megkönnyíti a motor fordulatszámának, a lámpa fényerejének szabályozását, többek között energiahatékony módon. A PWM motorvezérlők fő okai közé tartozik a készülékek hatékonyságának javítása, valamint a zajszint csökkentése azáltal, hogy kis sebességgel működtetik őket, amikor csak lehetséges.

a ti Launchpad RM57L MCU fejlesztőkészletet használtam ennek a ventilátorvezérlőnek a felépítéséhez (köszönet a TI-nek a küldésért), de ez a kód könnyen módosítható úgy, hogy az olcsóbb Launchpad TMS57012, vagy a Launchpad TMS57004 Launchpadokon is fusson.

a PWM ventilátorvezérlő felépítésének megtanulása segít megérteni vagy megtanulni a különböző technológiák/módszerek végrehajtását, valamint azok előnyeit és hátrányait. Így pontosan tudni fogja, hogy melyiket használja, és mikor.

ez a cikk feltételezi, hogy van némi Villamosmérnöki tapasztalata, és tudja, hogyan kell biztonságosan csatlakoztatni a tranzisztort, az érzékelőt és az összes többi említett berendezést. Próbálja ki ezt a projektet saját felelősségére.

Tartalomjegyzék

  1. Alkatrészek Listája.
  2. Fejlesztési Környezet Előkészítése.
  3. kezdjük a kódolást!

ez a diavetítés JavaScript-et igényel.

Alkatrészlista

minden Ár USD-ben van megadva.

  1. 2n6284g NPN Darlington Bjt tranzisztor. A BJT bipoláris csomópont-tranzisztort jelent (kényelmes, mert 750 egyenáramú erősítéssel rendelkezik).
  2. három 12 kOhm 1/2 wattos ellenállás.
  3. csatlakozódoboz csavaros csatlakozókkal vagy rúdcsatlakozóval.
  4. Texas Instruments Launchpad RM57L MCU (RM57L843) fejlesztőkészlet.
  5. 10 kOhm NTC termisztor, B értéke 3435. Az ‘ NTC ‘ azt jelenti, hogy ellenállása csökken, amikor a hőmérséklet emelkedik.
  6. 40 mm x 40 mm (vagy nagyobb, ha nem találja ezt a méretet) hűtőborda a tranzisztorhoz.
  7. áthidaló vezetékek/tűs csatlakozók a fejlesztőkészlet csapjainak a tranzisztorhoz, valamint a tranzisztor áramforráshoz történő csatlakoztatásához (kivéve, ha kenyérlemezt használ). Ezek általában a $3-6 tartományban vannak.
  8. 12 vagy 5 voltos áramforrás.
  9. 12 voltos CPU ventilátor vagy 5 voltos laptop ventilátor (ez a projekt három vagy négyvezetékes ventilátorokhoz készült, amelyek támogatják a PWM-et). Ezek általában a $10 – $20 tartományban vannak.
  10. CPU hűtő (hűtőbordával és ventilátorral együtt) vagy a ventilátor és a vele hűthető forró tárgy bármely más kombinációja. Ez lehetővé teszi, hogy figyelje, ahogy a ventilátorvezérlő automatikusan lehűl, és kikapcsolja a ventilátort. CPU hűtőt használtam beépített ventilátorral. Ez a végső teszt!

azt javaslom, hogy csatlakoztasson egy hűtőbordát a tranzisztorhoz, ha nagy ventilátorokat fog táplálni (nagyobb, mint az apró 80 mm-es ventilátorok, amelyeket általában asztali CPU hűtéshez használnak). Jelentős mennyiségű hőt fog generálni.

készítse elő fejlesztői környezetét

az RM57L843 fejlesztőkészlet ennek a PWM ventilátorvezérlőnek a szíve (ezeknek a mikrokontrollereknek a működése nem sokban különbözik az Arduino-tól, ezért ne ijedjen meg!). Az első lépés az épület a PWM ventilátor vezérlő, hogy hozzanak létre a fejlesztési környezet, amely fogjuk használni, hogy program / flash az MCU.

csatlakoztassa a Launchpad RM57L fejlesztőkészletet a számítógép USB-portjához a mellékelt kábel segítségével, majd hozzon létre egy Texas Instruments-fiókot, hogy letölthesse a CCS IDE-t. Ehhez a gyakorlathoz Halkogént is használunk. A HALCoGen egy HAL kódgenerátor, amely lehetővé teszi az MCU egyszerű konfigurálását GUI segítségével. Ebben az esetben az analóg-digitális átalakító (MibADC), valamint a Het időzítő modul konfigurálására használjuk.

töltse le a HALCoGen és a CCS alkalmazást (győződjön meg róla, hogy be van jelentkezve a CCS-fiókjába), majd kövesse az alábbi utasításokat a HALCoGen projekt létrehozásához.

először hozzon létre egy új projektet a HALCoGen alkalmazásban, válassza ki az’ RM57Lx ‘ fejlesztőkészletet, majd a képernyő jobb oldalán megjelenik a változatok listája. Ebben az esetben csak egy változat létezik: az RM57L843ZWT. Jelölje ki ezt, és nevezze el projektjét ‘ PWM ‘ néven az alábbiak szerint. Írja be a Projekt elérési útját a’ hely ‘ mezőbe, jegyezze fel, majd kattintson az OK gombra. A CCS projektünket ugyanabban a könyvtárban tároljuk. A PWM projektnek egy pwm nevű mappában kell lennie, a munkakönyvtár alatt, amelyet RM57L-nek nevezünk.

képernyőkép az' új projekt ' képernyőről a Halcogenben

hozzon létre egy új projektet ‘PWM’ néven a HALCoGen-ben. Itt konfigurálhatja az ADC és HET modulokat.

a PWM ventilátor vezérlő felépítéséhez olyan időzítőket kell beállítani, amelyek egy kis elektromos be-és kikapcsolást oszcillálnak, és beállítják a frekvenciájukat.

ezután engedélyezze az ADC1 és HET1 illesztőprogramokat az ‘Illesztőprogram engedélyezése’ fül kiválasztásával és az alábbi négyzetek bejelölésével. Az analóg-digitális átalakítót (ADC) használják az analóg hőmérséklet-érzékelő leolvasásának digitális értékre történő átalakítására, amelyet felhasználhatunk a hőmérséklet meghatározására, lehetővé téve a ventilátor vezérlőjének a ventilátor sebességének ennek megfelelő beállítását. A csúcskategóriás időzítőt (HET) használjuk a PWM jel előállításához, amelyet egy egyszerű BJT tranzisztor vezérlésére használnak.

azt javaslom, hogy törölje a többi illesztőprogram jelölését a rendszer erőforrásainak megőrzése érdekében (például: RAM és flash memória).

engedélyezze az-adc-és-het-illesztőprogramokat

engedélyezze a HET1 és ADC1 illesztőprogramokat a HALCoGen-ben.

itt az ideje, hogy konfigurálja a PWM ventilátor vezérlő analóg-digitális átalakító (amely be van építve a Launchpad RM57L MCU). LÉPJEN az ADC1 fülre, és állítsa a FiFo méretét 1-re, mivel ez minden, amire szükségünk lesz ehhez a projekthez. Válassza a 7. tű engedélyezése lehetőséget is, mivel ehhez csatlakoztatjuk a hőmérséklet-érzékelőt. Pin 7 van jelölve ‘AI1_7’ az alsó a Launchpad development kit.

hogyan működik az analóg-digitális átalakítás

 az ADC1 konfiguráció képernyőképe

lépjen a HET1 fülre, ahol konfigurálhatja a ventilátorvezérlő PWM időzítőjét (beépítve az RM57L fejlesztőkészletbe), valamint a Het csapot, amely vezérli a ventilátort működtető tranzisztort, és tegye a következőket a következő képernyőképen látható módon.

válassza ki a Pwm 0-7 fület, állítsa be a PWM 0 Duty mezőjét 0-ra. Ez a PWM jel működési ciklusát 0-ra állítja, ezért a vezérlő ventilátor működési ciklusát 0-ra állítja. A terhelhetőség 0 egyszerűen azt jelenti, hogy a ventilátor ki lesz kapcsolva. Egy másik módja annak, hogy: a bekapcsolási idő százalékos aránya 0.

ebben a projektben 0 munkaciklussal kezdjük, mert programozottan állítjuk be az üzemi ciklust (és ezáltal a ventilátor sebességét) oly módon, hogy az kövesse a hűtőborda hőmérsékletét, amelyhez a hőmérséklet-érzékelő csatlakozik. Ha a munkaciklus 0-ra van állítva, a ventilátorvezérlő kikapcsolja a ventilátort (0 0% – nak felel meg). Ezután jelölje be az ‘Engedélyezés’ jelölőnégyzetek párját a ‘Pin’ mező bal oldalán. Ez lehetővé teszi a PWM jelet. Írja be a 2-t a ‘Pin’ mezőbe, amely a Het port 1, Pin 2, a ‘HET1_2’ jelzéssel az Indítópult alján. Végül: írja be a 10 000-et (vessző nélkül) az időszak mezőbe.

az ezen a területen használt egység a mikroszekundum. Egy mikroszekundum a másodperc egymilliomod része. Ha ezt a mezőt 10 000-re állítja, a HET időzítő 10 000 mikroszekundumonként (0-ként) be-és kikapcsolja a bekapcsolást.01 másodperc). Ennek a gyors kapcsolásnak köszönhetően nem veszi észre, hogy az áramellátás be-és kikapcsolódik, ami a ventilátor zökkenőmentes, folyamatos működését eredményezi.

 a PWM konfigurációs képernyő.

engedélyezze a ‘PWM 0’időzítőt.

a Halcogén konfigurációjának lezárásához válassza a Pin 0-7 fület. Itt konfigurálhatja az RM57L csapot, amelyhez a tranzisztor alapja csatlakozik (természetesen a 12 kOhm ellenálláson keresztül). Jelölje be a DIR jelölőnégyzetet a ‘Bit 2′ szakaszban az alábbiak szerint, hogy a 2. bitet a kimeneti irányba állítsa. Ez lehetővé teszi a ventilátor bekapcsolását. A pin-t bitnek is nevezhetjük, tehát a’ Bit 2 ‘ ebben az esetben a Het Pin 2-t jelenti.

Mi Az Ellenállás?

a kimeneti érték (az alábbi képernyőképen DOUT jelöléssel) a tű állapota, amely lehet be (1) vagy ki (0). Győződjön meg róla, hogy 0-ra van állítva, tehát ki van kapcsolva, amikor az MCU kezdetben elindul.

a HET időzítő konfigurációs képernyő

állítsa a HET1, Pin 2-t a kimeneti irányba.

válassza a fájl > Projekt mentése lehetőséget, majd a fájl > kód létrehozása (vagy nyomja meg az F5 billentyűt). Nézze meg az alsó’ kimenet ‘ ablaktáblát, amíg azt nem mondja, hogy a kódgenerálás befejeződött. Most áttérhet a CCS konfigurációra, és ha végzett, végre összegyűjtheti az alkatrészeket és felépítheti a ventilátor vezérlőt.

kódoljuk!

indítsa el a CCS-t, és válassza ki/hozzon létre egy rm57l nevű könyvtárat munkaterületként az alábbiak szerint. Hozzon létre egy új projektet a Code Composer Studio nevű PWM-ben, amelyet a PWM könyvtár gyökerébe ment, ahol látni fogja a PWM-et.hcg fájl. PWM.a hcg a HALCoGen projekt fájlja. Mint fentebb említettem, a CCS és a HALCoGen projektek fájljainak ugyanabban a könyvtárban kell lenniük ehhez a feladathoz.

csatlakoztassa a Launchpad rm57l fejlesztőkészletét a mellékelt USB-kábellel.

jobbra válassza az ‘RM57L8x’ lehetőséget a legördülő listából, mivel ezt fogjuk használni. Ezután válassza ki az XDS110 USB hibakereső szondát az alatta lévő legördülő listából. Végül válassza az ‘üres projekt’ lehetőséget, majd kattintson a Befejezés gombra.

CCS projekt létrehozása

kattintson a jobb gombbal a PWM projektre a Project Explorer ablaktáblában (a képernyő bal oldalán található), majd adja hozzá a HALCoGen /includes mappát a PWM projektkönyvtárból a CCS projekthez az alább bekarikázott gombra kattintva. Ezek az RM57L fájlok könyvtárakból és illesztőprogramokból állnak, amelyek sokkal könnyebbé teszik a programok írását az MCU számára.

Add Include Könyvtár

keresse meg a HL_sys_main.c fájl a Project Explorer ablaktáblában balra a /PWM/source / alatt. Ebben a fájlban illessze be az alábbi rm57l kódmintát.

a forráskód (Hercules Rm57l kódminta)

a következő rm57l mintakód feltölthető az Indítópultra USB-n keresztül a Code Composer Studio segítségével. Így kell kinéznie a forrásfájlnak:

a hőmérsékleti értékek C-ben vannak megadva.

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 */}

szívesen terjesztheti ezt az RM57L kódot, feltéve, hogy tartalmaz egy linket erre az oldalra.

mindig helyezze a kódot a /* felhasználói kód BEGIN */ és /* felhasználói kód END */ megjegyzések közé, hogy a HALCoGen ne törölje azt a projekt módosítása után.

mindig emlékezzen arra, hogy a hűtőborda hőmérséklete alacsonyabb lesz, mint a CPU vagy bármelyik eszköz hőmérséklete. Ez azt jelenti, hogy ha a hűtőborda 70cc ,akkor a CPU még ennél is melegebb. Ezt a PWM ventilátorvezérlőt úgy is megtervezheti, hogy közvetlenül mérje meg a CPU hőmérsékletét, és helyezze rá a termisztort. Ez pontosabb, mivel a hűtőborda hőmérséklete lassan elmarad a CPU hőmérsékletétől.

az ADC értékek mindegyike a ventilátorvezérlő hőmérsékleti értékeinek digitális ábrázolása, és minden értéktartomány egy olyan hőmérsékleti tartományt képvisel, amely bizonyos mennyiségű légáramot igényel a hűtéshez. Ennél a termisztornál az alacsonyabb ADC érték magasabb hőmérsékletnek felel meg, és fordítva. A kódot most frissítették, hogy az analóg-digitális átalakító értékeit Celsius fokos hőmérsékleti értékekké alakítsák.

példa forgatókönyv: A 310 és 320 közötti ADC értéktartomány elég magas lehet ahhoz, hogy a ventilátort egészen 80% – ig lehessen forgatni, mivel ez azt jelzi, hogy a tesztalanyunk (a hűtőborda, és így a CPU) melegszik. Ha azonban a hűtőborda/ventilátor elég nagy, akkor erre a sebességre általában nincs szükség. Ez az egyik eset, amikor érdemes kihasználni egy nagyobb hűtőbordát.

másrészt a 340-350 közötti ADC értéktartomány azt jelezheti, hogy a hűtőborda csak kissé meleg, és csak nagyon alacsony (20%) beállítással kell működnie a ventilátornak, tehát ennél a beállításnál sokkal csendesebb lesz. Az üzemi ciklust az ADC értéktartományok alapján állítottam be, a pontos ADC értékek helyett a gyakori sebességingadozások elkerülése érdekében. Nagyon ajánlom egy UART rutin megvalósítását, amely továbbítja az analóg-digitális átalakító leolvasásait a számítógépére, így láthatja, hogy minden valós időben történik. Ez megkönnyíti a hibakeresést, és informatív is.

hasznos alkalmazások PWM közé, de nem kizárólagosan:

  1. légkondicionáló és hűtőszekrény kompresszor fordulatszám-szabályozás a jobb hatékonyság és a csökkentett zajszint.
  2. LED lámpa fényerő.
  3. HEV/elektromos jármű sebességszabályozása.
  4. Szellőzőventilátor vezérlők.
  5. hűtőventilátor vezérlők, amelyek energiát, gázt takaríthatnak meg, és csökkenthetik az autók által az utakon okozott zajszennyezést. A zajcsökkentés bizonyos esetekben még az éjszakai alvást is elősegítheti.

kérjük, vegye figyelembe, hogy a fenti alkalmazásokhoz olyan ventilátor szükséges, amely támogatja a PWM-et. Sajnos nem minden rajongó épül erre.

hardver beállítása

mint az elején mondtam, ez a cikk azzal a feltételezéssel íródott, hogy tudja, hogyan kell használni a tranzisztort, és hogyan kell biztonságosan csatlakoztatni az érzékelőt az Indítópulthoz.

csatlakoztassa a termisztort az ADC 1 pin 7 porthoz, a tranzisztort pedig az RM57L fejlesztőkészlet HET 1 pin 2 portjához, ennek megfelelően az alkatrészlistában szereplő három ellenállással. Ha CPU hűtőt használ (hűtőborda + beépített ventilátor kombináció), akkor helyezze be a hőmérséklet-érzékelőt a hűtőbordába (ügyeljen arra, hogy az érzékelő egyik kivezetése ne érintkezzen a hűtőbordával, amely elektromosan vezető lehet). Csatlakoztassa a hűtőborda ventilátort a vezérlőhöz. Az alábbi oktatóanyagok segítenek megtanulni a ventilátor, az ADC tű és a tranzisztor beállítását.

a Sparkfun elmagyarázza az analóg-digitális átalakítást, és itt egy alapvető példa az ADC érzékelő csatlakozására (ezt használtam ehhez a projekthez, azzal a különbséggel, hogy az érzékelőmnek két vezetéke van, nem pedig az a három, amelyet a potenciométerük csinál). Itt magyarázzák a tranzisztorokat is.

miután elsajátította ezt, pillanatok alatt üzembe helyezheti a ventilátorvezérlőt!

Sensor

az RM57L MCU development kit ADC a termisztor (vagy bármelyik hőmérséklet-érzékelő által használt) által okozott analóg feszültségingadozásokat a fenti értékváltozóban tárolt digitális értékekké alakítja. Annak a ténynek köszönhetően, hogy az ADC értékek az Ön által használt érzékelőtől függenek, az érzékelő dokumentációjában szereplő specifikációkat kell használnia a hőmérsékleti értékek fokokra konvertálásához.

a projekthez használt érzékelő egy uxcell 3435b 10 kOhm termisztor volt. A termisztor olyan ellenállás, amelyet úgy terveztek, hogy ellenállását a hőmérséklettel változtassa (sokkal inkább, mint egy közönséges ellenállás). Ha egy termisztor névleges értéke 10 kOhm, ez azt jelenti, hogy ellenállása 10 kOhm 25 C.

megjegyzés:egy adott termisztor ellenállása nem változik lineárisan a hőmérséklettől függően, ezért a termisztorgyártók megadják a hőmérséklet vs ellenállás diagramot, és (néha) az A, B és C értékeket a Steinhart-Hart egyenletben, amely ezt a problémát kezeli.

kód sikeresen tesztelve a CCS verziókkal:

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.