- Mi az a PWM jel?
- PWM a PIC16F877A használatával:
- PIC programozása PWM jelek előállítására:
- Sémák és tesztelés:
- Munka a hardveren:
Ez a 10. oktatóanyagunk a PIC mikrovezérlők megtanulásáról MPLAB és XC8 használatával. Mostanáig számos alapvető oktatóanyagot ismertettünk, például a PIC-vel villogó LED-et, a PIC-ben lévő időzítőket, az LCD-t összekötő interfészt, a 7-szegmenses interfészt, az ADC-t PIC-vel stb. Ha Ön teljesen kezdő, akkor kérjük, látogassa meg a PIC-oktatóanyagok teljes listáját itt, és kezdje el a tanulást.
Ebben az oktatóanyagban megtanuljuk, hogyan lehet PWM jeleket előállítani a PIC PIC16F877A segítségével. PIC MCU-nknak van egy speciális modulja, az úgynevezett Compare Capture modul (CCP), amely PWM jelek előállítására használható. Itt 5 kHz-es PWM-et fogunk létrehozni, változó munkaciklussal, 0% és 100% között. A munkaciklus megváltoztatásához egy potenciométert használunk, ezért ajánlott megtanulni az ADC oktatóanyagot, mielőtt a PWM-mel kezdenénk. A PWM modul időzítőket is használ a frekvencia beállításához, így itt előzetesen megtanulhatja az időzítők használatát. Továbbá ebben az oktatóanyagban egy RC áramkört és egy LED-et fogunk használni, hogy a PWM értékeket analóg feszültséggé alakítsuk, és a LED fényének tompítására használjuk.
Mi az a PWM jel?
Az impulzusszélesség-moduláció (PWM) egy digitális jel, amelyet leggyakrabban a vezérlő áramkörökben használnak. Ezt a jelet magasra (5v) és alacsonyra (0v) állítják be egy előre meghatározott idő és sebesség mellett. Azt az időtartamot, amely alatt a jel magas marad, „bekapcsolási időnek” nevezzük, és azt az időt, amely alatt a jel alacsony marad, „kikapcsolási időnek”. A PWM-nek két fontos paramétere van, az alábbiak szerint:
A PWM munkaciklusa:
Az az idő százalékos aránya, amelyben a PWM jel HIGH marad (időben), ciklusnak számít. Ha a jel mindig BE van kapcsolva, akkor 100% -os működési ciklusban van, és ha mindig ki van kapcsolva, akkor 0% -os működési ciklus.
Üzemeltetési ciklus = bekapcsolási idő / (bekapcsolási idő + kikapcsolási idő)
PWM gyakorisága:
A PWM jel frekvenciája határozza meg, hogy egy PWM milyen gyorsan fejezi be az egyik periódust. Egy periódus befejezte a PWM jel be- és kikapcsolását a fenti ábrán látható módon. Oktatóanyagunkban 5KHz frekvenciát állítunk be.
PWM a PIC16F877A használatával:
A PWM jeleket PIC mikrokontrollerünkben a CCP (Compare Capture PWM) modul segítségével lehet előállítani. A PWM jelünk felbontása 10 bites, vagyis 0 érték esetén 0% -os munkaciklus lesz, 1024 (2 ^ 10) érték esetén 100% -os munkaciklus. Két CCP modul található a PIC MCU-ban (CCP1 és CCP2), ez azt jelenti, hogy két PWM jelet generálhatunk két különböző csapon (17. és 16. érintkező) egyszerre, oktatóanyagunkban a CCP1-et használjuk PWM jelek előállításához a 17. tűn.
A következő regisztereket használjuk PWM jelek előállításához a PIC MCU használatával:
- CCP1CON (CCP1 vezérlő regiszter)
- T2CON (2. időzítő vezérlő regiszter)
- PR2 (Timer 2 modulok Period Register)
- CCPR1L (1. CCP regiszter alacsony)
PIC programozása PWM jelek előállítására:
Programunkban leolvassuk a potenciométer 0-5v-os analóg feszültségét, és az ADC modulunk segítségével 0-1024-re térképezzük fel. Ezután 5000 Hz frekvenciájú PWM jelet generálunk, és annak bemeneti analóg feszültsége alapján megváltoztatjuk annak működési ciklusát. Ez 0-1024 lesz átalakítva 0% -100% üzemidőre. Ez az oktatóanyag feltételezi, hogy már megtanulta használni az ADC-t a PIC-ben, ha nem, olvassa el innen, mert ebben az oktatóanyagban kihagyjuk a részleteket.
Tehát, ha a konfigurációs bitek be vannak állítva, és a program meg van írva egy analóg érték olvasására, folytathatjuk a PWM-et.
A következő lépéseket kell megtenni a CCP modul konfigurálásakor a PWM működéséhez:
- Állítsa be a PWM periódust a PR2 regiszterbe írással.
- Állítsa be a PWM munkaciklust a CCPR1L regiszter és a CCP1CON <5: 4> bitek írásával.
- A TRISC <2> bit törlésével tegye a kimenetet a CCP1-re.
- Állítsa be a TMR2 előskála értékét, és engedélyezze a Timer2 funkciót a T2CON írásával.
- Konfigurálja a CCP1 modult a PWM működéséhez.
Két fontos funkció van ebben a programban a PWM jelek előállításához. Az egyik a PWM_Initialize () függvény, amely inicializálja a PWM modul beállításához szükséges regisztereket, majd beállítja a PWM működésének frekvenciáját, a másik funkció a PWM_Duty () függvény, amely beállítja a PWM jel munkaciklusát a szükséges regisztereket.
PWM_Initialize () {PR2 = (_XTAL_FREQ / (PWM_freq * 4 * TMR2PRESCALE)) - 1; // A PR2 képletek beállítása adatlap használatával // A PWM működését 5KHZ CCP1M3 = 1 értékben adja; CCP1M2 = 1; // A CCP1 modul konfigurálása T2CKPS0 = 1; T2CKPS1 = 0; TMR2ON = 1; // Konfigurálja az időzítő modult TRISC2 = 0; // kimenetként hozza létre a C port portot}
A fenti függvény a PWM inicializáló függvény, ebben a funkcióban A CCP1 modul úgy van beállítva, hogy a PWM-et használja a CCP1M3 és CCP1M2 bitek magasra emelésével.
Az időzítő modul előmérőjét úgy állítják be, hogy a T2CKPS0 bitet olyan magasra, a T2CKPS1 bitet pedig alacsonyan állítja be, a TMR2ON bitet az időzítő elindításához.
Be kell állítanunk a PWM jel frekvenciáját. A frekvencia értékét be kell írni a PR2 regiszterbe. A kívánt frekvenciát az alábbi képletek segítségével lehet beállítani
PWM periódus = * 4 * TOSC * (TMR2 előskála értéke)
A képletek átrendezése a PR2 megszerzéséhez megadja
PR2 = (Időszak / (4 * Tosc * TMR2 előskála)) - 1
Tudjuk, hogy Period = (1 / PWM_freq) és Tosc = (1 / _XTAL_FREQ). Ezért…..
PR2 = (_XTAL_FREQ / (PWM_freq * 4 * TMR2PRESCALE)) - 1;
Miután beállította a frekvenciát, ezt a funkciót nem kell újra meghívni, hacsak és amíg újra nem kell változtatnunk a frekvenciát. A bemutatónkban PWM_freq = 5000 értéket rendeltem ; hogy 5 KHz üzemi frekvenciát kaphassunk a PWM jelünkhöz.
Most állítsuk be a PWM üzemmódját az alábbi függvény használatával
PWM_Duty (aláíratlan int vám) {if (vám <1023) {vám = ((úszó) vám / 1023) * (_ XTAL_FREQ / (PWM_freq * TMR2PRESCALE)); // csökkentésről // vám = (((úszó) vám / 1023) * (1 / PWM_freq)) / ((1 / _XTAL_FREQ) * TMR2PRESCALE); CCP1X = vám & 1; // Tárolja az első bitet CCP1Y = duty & 2; // Tárolja a 0. bit CCPR1L = duty >> 2; // Tárolja a 8 bitet}}
A PWM jelünk 10 bites felbontású, ezért ez az érték nem tárolható egyetlen regiszterben, mivel a PIC-nek csak 8 bites adatsorai vannak. Tehát a CCP1CON másik két bitjét <5: 4> (CCP1X és CCP1Y) használjuk az utolsó két LSB tárolására, majd a fennmaradó 8 bit tárolására a CCPR1L regiszterben.
A PWM munkaciklus idejét az alábbi képletek segítségével lehet kiszámítani:
PWM munkaciklus = (CCPRIL: CCP1CON <5: 4>) * Tosc * (TMR2 előskála értéke)
A képletek átrendezése a CCPR1L és a CCP1CON értékének megszerzéséhez a következőket adja:
CCPRIL: CCP1Con <5: 4> = PWM Duty Cycle / (Tosc * TMR2 Prescale Value)
Az ADC értéke 0-1024 lesz, szükségünk van arra, hogy 0% -100% legyen, tehát a PWM Duty Cycle = duty / 1023. Ahhoz, hogy ezt a munkaciklust időtartamra konvertáljuk, meg kell szorozni az időszakkal (1 / PWM_freq)
Azt is tudjuk, hogy Tosc = (1 / PWM_freq), ezért..
Vám = (((úszó) vám / 1023) * (1 / PWM_freq)) / ((1 / _XTAL_FREQ) * TMR2PRESCALE);
A fenti egyenlet megoldása:
Vám = ((úszó) vám / 1023) * (_XTAL_FREQ / (PWM_freq * TMR2PRESCALE));
A teljes programot az alábbi Kód szakaszban, a részletes videó mellett ellenőrizheti.
Sémák és tesztelés:
Szokás szerint ellenőrizzük a kimenetet Proteus szimulációval. Az áramkör diagram az alábbiakban látható.
Csatlakoztasson egy potenciométert 7 th pin takarmány egy feszültség 0-5. A CCP1 modul a 17. érintkezővel van ellátva (RC2), itt generálódik a PWM, amelyet a digitális oszcilloszkóp segítségével lehet ellenőrizni. A változó feszültséggé való átalakításhoz RC-szűrőt és LED-et használtunk a kimenet hatókör nélküli igazolására.
Mi az RC-szűrő?
Az RC szűrő vagy az aluláteresztő szűrő egy egyszerű áramkör, két passzív elemmel, nevezetesen az ellenállással és a kondenzátorral. Ezt a két komponenst használják a PWM jelünk frekvenciájának szűrésére és változó egyenfeszültségűvé tételére.
Ha megvizsgáljuk az áramkört, amikor változó feszültséget adunk az R bemenetére, akkor a C kondenzátor tölteni kezd. Most a kondenzátor értéke alapján a kondenzátornak egy kis időbe telik, amíg teljesen feltöltődik, miután feltöltötte, blokkolja az egyenáramot (ne feledje, hogy a kondenzátorok blokkolják az egyenáramot, de lehetővé teszi az AC-t), így a bemeneti egyenfeszültség megjelenik a kimeneten. A nagyfrekvenciás PWM (AC jel) a kondenzátoron keresztül lesz földelve. Így tiszta egyenáramot kapunk a kondenzátoron keresztül. Az 1000Ohm és 1uf értéket megfelelőnek találták ehhez a projekthez. Az R és C értékeinek kiszámítása magában foglalja az áramköri elemzést az átviteli függvény segítségével, amely nem tartozik az oktatóanyag körébe.
A program kimenete a digitális oszcilloszkóp segítségével ellenőrizhető, az alábbiak szerint, változtassa meg a potenciométert és a PWM működési ciklusának megváltoznia kell. Az RC áramkör kimeneti feszültségét a Voltmérővel is észrevehetjük. Ha minden a várt módon működik, folytathatjuk a hardverünket. Ellenőrizze a videó végén a teljes folyamatot.
Munka a hardveren:
A projekt hardveres beállítása nagyon egyszerű, csak az alábbiakban bemutatott PIC Perf táblánkat fogjuk újrafelhasználni.
Szükségünk lesz egy potenciométerre az analóg feszültség betáplálásához, néhány csatlakozóhuzalt csatlakoztattam az edényemhez (az alább látható), hogy közvetlenül csatlakoztathassuk őket a PIC Perf táblához.
Végül a kimenet ellenőrzéséhez szükségünk van egy RC áramkörre és egy LED-re, hogy lássuk, hogyan működik a PWM jel. Egyszerűen használtam egy kis perf táblát, és ráforrasztottam rá az RC áramkört és a LED-et (a fényerő szabályozására) az alábbiak szerint
Használhatunk egyszerű női és női összekötő vezetékeket, és a fent bemutatott sémák szerint csatlakoztathatjuk őket. Miután a kapcsolat létrejött, töltse fel a programot a PIC-re a pickit3 segítségével, és képesnek kell lennie arra, hogy változó feszültséget kapjon a potenciométer bemenete alapján. A változó kimenetet a LED fényerejének szabályozására használják itt.
A multiméteremmel mértem a változó kimeneteket, észrevehetjük a LED fényerejét is, a különböző feszültségszinteknél.
Ez az, amit beprogramoztunk, hogy leolvassuk az analóg feszültséget a POT-ról, és átalakítsuk PWM jelekké, amelyeket viszont változó feszültséggé alakítottunk át RC szűrővel, és az eredményt hardverünkkel ellenőrizzük. Ha kétségei vannak vagy elakad valahol, kérjük, használja az alábbi megjegyzések részt, szívesen segítünk. A teljes munka a videóban működik.
Ellenőrizze a többi mikrokontroller többi PWM oktatóanyagát is:
- Raspberry Pi PWM bemutató
- PWM az Arduino Due-vel
- Arduino alapú LED dimmer PWM használatával
- A LED-es dimmer bekapcsolása az ATmega32 mikrokontroller használatával