- PWM (impulzusszélesség-moduláció)
- PWM csapok az ARM7-LPC2148 fájlban
- A PWM nyilvántartások az ARM7-LPC2148 fájlban
- Szükséges alkatrészek
- Áramkör és kapcsolatok
- Az ARM7-LPC2148 programozása PWM-hez
- Az LPC2148 programozása a PWM és ADC számára
Mint tudjuk, a mikrovezérlők analóg szenzorokból veszik az analóg bemenetet, és az ADC (analóg-digitális átalakító) segítségével feldolgozzák ezeket a jeleket. De mi van akkor, ha egy mikrovezérlő analóg jelet akar létrehozni az analóg működtetésű eszközök, például szervomotor, egyenáramú motor stb. Vezérléséhez? A mikrovezérlők nem termelnek olyan kimeneti feszültséget, mint 1 V, 5 V, ehelyett PWM nevű technikát alkalmaznak az analóg eszközök működtetésére. A PWM példája a laptop hűtőventillátora (egyenáramú motor), amelyet a hőmérsékletnek megfelelően kell szabályozni, és ugyanezt az alaplapok Pulse Width Modulation (PWM) technikájával valósítják meg.
Ebben az oktatóanyagban a LED fényerejét az ARM7-LPC2148 mikrovezérlőben lévő PWM segítségével szabályozhatjuk.
PWM (impulzusszélesség-moduláció)
A PWM jó módszer arra, hogy digitális értékek segítségével vezérelje az analóg eszközöket, például a motor sebességének, a led fényerejének stb. Szabályozását. Bár a PWM nem nyújt tiszta analóg kimenetet, de megfelelő analóg impulzusokat generál az analóg eszközök vezérléséhez. A PWM valójában modulálja a téglalap alakú impulzushullám szélességét annak érdekében, hogy eltérést kapjon a keletkező hullám átlagos értékében.
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 csapok az ARM7-LPC2148 fájlban
Az alábbi kép az ARM7-LPC2148 PWM kimeneti csapjait jelzi. Az PWM számára összesen hat érintkezõ van.
PWM Channel |
LPC2148 Port csapok |
PWM1 |
P0.0 |
PWM2 |
P0.7 |
PWM3 |
P0.1 |
PWM4 |
P0.8 |
PWM5 |
P0.21 |
PWM6 |
P0.9 |
A PWM nyilvántartások az ARM7-LPC2148 fájlban
Mielőtt belekezdenénk a projektbe, tudnunk kell az LPC2148 PWM regisztereiről.
Itt található az LPC2148 PWM-hez használt regiszterek listája
1. PWMPR: PWM Prescale Register
Használat: Ez egy 32 bites regiszter. Azt tartalmazza, hogy hányszor (mínusz 1) kell a PCLK-nak ciklust végeznie, mielőtt növelné a PWM időzítő számlálót (valójában az előskálaszámláló maximális értékét tartalmazza).
2. PWMPC: PWM Prescaler Counter
Használat: Ez egy 32 bites regisztráció . Ez tartalmazza a növekvő számláló értéket. Ha ez az érték megegyezik a PR érték plusz 1-vel, a PWM időzítő számláló (TC) növekszik.
3. PWMTCR: PWM időzítő vezérlő regiszter
Használat: Tartalmazza a Counter Enable, Counter Reset és a PWM Enable vezérlőbiteket. Ez egy 8 bites regiszter.
7: 4 |
3 |
2 |
1 |
0 |
FENNTARTOTT |
PWM ENABLE |
FENNTARTOTT |
Számláló visszaállítása |
A számláló engedélyezése |
- PWM engedélyezés: (Bit-3)
0- PWM letiltva
1- PWM engedélyezve
- Számláló engedélyezése: (Bit-0)
0-
A számlálók letiltása 1- A számláló engedélyezése
- Számláló visszaállítása: (Bit-1)
0- Semmit.
1- Visszaállítja a PWMTC és a PWMPC értékeket a PCLK pozitív szélén.
4. PWMTC: PWM időzítő számláló
Használat: Ez egy 32 bites regiszter. Ez tartalmazza a növekvő PWM időzítő aktuális értékét. Amikor az előmérlegelő számláló (PC) eléri a Prescaler Register (PR) értéket, plusz 1, ez a számláló növekszik.
5. PWMIR: PWM megszakítási regisztráció
Használat: Ez egy 16 bites regisztráció. Tartalmazza a PWM mérkőzés csatornák 0-6 közötti megszakítási jelzőit. Megszakítási jelzőt akkor állítunk be, amikor megszakad az adott csatorna (MRx megszakítás), ahol X a csatorna száma (0 és 6 között).
6. PWMMR0-PWMMR6: PWM meccsregiszter
Használat: Ez egy 32 bites regiszter . Valójában a Match Channel csoport lehetővé teszi 6 egyélű vezérelt vagy 3 kettős élű vezérelt PWM kimenet beállítását. Módosíthatja a hét egyeztetési csatornát, hogy ezeket a PWM kimeneteket a PWMPCR követelményeinek megfelelően konfigurálja.
7. PWMMCR: PWM egyezmény- nyilvántartás
Használat: Ez egy 32 bites regiszter. Ez tartalmazza a megszakítás, a visszaállítás és a leállítás biteket, amelyek vezérlik a kiválasztott mérkőzés csatornát. Egyezés történik a PWM egyeztetési nyilvántartások és a PWM időzítő számlálók között.
31:21 |
20 |
19. |
18. |
.. |
5. |
4 |
3 |
2 |
1 |
0 |
FENNTARTOTT |
PWMMR6S |
PWMMR6R |
PWMMR6I |
.. |
PWMMR1S |
PWMMR1R |
PWMMR11 |
PWMMR0S |
PWMMR0R |
PWMMR01 |
Itt x értéke 0 és 6 között van
- PWMMRxI (Bit-0)
ENGEDÉLYEZÉS vagy KIKAPCSOLÁS A PWM megszakítja
0- A PWM Match megszakításainak letiltása.
1- Engedélyezze a PWM mérkőzés megszakítását.
- PWMMRxR: (Bit-1)
RESET PWMTC - Időzítő számláló értéke, amikor az megegyezik a PWMRx értékkel
0- Ne csinálj semmit.
1- Alaphelyzetbe állítja a PWMTC-t.
- PWMMRxS: (2. bit)
STOP PWMTC & PWMPC, amikor a PWMTC eléri a Match register értéket
0- Tiltsa le a PWM stop funkciót.
1- Engedélyezze a PWM Stop funkciót.
8. PWMPCR: PWM vezérlő regiszter
Használat: Ez egy 16 bites regiszter. Ez tartalmazza azokat a biteket, amelyek lehetővé teszik a PWM 0-6 kimenetet, és mindegyik kimenethez egy vagy két élű vezérlést választanak.
31:15 |
14: 9 |
8: 7 |
6: 2 |
1: 0 |
FELHASZNÁLATLAN |
PWMENA6-PWMENA1 |
FELHASZNÁLATLAN |
PWMSEL6-PWMSEL2 |
FELHASZNÁLATLAN |
- PWMSELx (x: 2–6)
- Single Edge mód a PWMx számára
- 1- Double Edge mód a PWMx számára.
- PWMENAx (x: 1–6)
- PWMx Letiltás.
- 1- PWMx engedélyezve.
9. PWMLER: PWM Latch Enable Register
Használat: Ez egy 8 bites regisztráció. Ez tartalmazza a Match x Latch biteket az egyes Match csatornákhoz.
31: 7 |
6. |
5. |
4 |
3 |
2 |
1 |
0 |
FELHASZNÁLATLAN |
LEN6 |
LEN5 |
LEN4 |
LEN3 |
LEN2 |
LEN1 |
LEN0 |
LENx (x: 0–6):
0- Tiltsa le az új egyezési értékek
betöltését
Most megkezdhetjük a hardver beállításának felépítését, hogy bemutassuk az impulzusszélesség modulációt az ARM mikrovezérlőben.
Szükséges alkatrészek
Hardver
- ARM7-LPC2148 mikrovezérlő
- 3,3 V feszültségszabályozó IC
- 10k potenciométer
- LED (bármilyen színű)
- LCD (16x2) kijelző modul
- Kenyérlemez
- Vezetékek csatlakoztatása
Szoftver
- Keil uVision5
- Flash Magic eszköz
Áramkör és kapcsolatok
Kapcsolatok az LCD és az ARM7-LPC2148 között
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Regisztráció kiválasztása) |
P0.6 |
E (engedélyezés) |
P0.12 |
D4 (4. adatcsap) |
P0.13 |
D5 (5. adat tű) |
P0.14 |
D6 (6. adat tű) |
P0.15 |
D7 (7. adat tű) |
GND |
VSS, R / W, K |
+ 5V |
VDD, A |
Kapcsolat a LED és az ARM7-LPC2148 között
A LED-ek ANODE-je az LPC2148 PWM kimenetéhez (P0.0), míg a LED-es CATHODE-csatlakozó az LPC2148 GND-csatlakozójához van csatlakoztatva.
Csatlakozás az ARM7-LPC2148 és a 3,3 V-os feszültségszabályozóval ellátott potenciométer között
3,3 V feszültségszabályozó IC |
Pin funkció |
ARM-7 LPC2148 tű |
1. Bal tű |
- Ve a GND-ből |
GND csap |
2. Központi tű |
Szabályozott + 3,3 V kimenet |
Potenciométer bemenetére és potenciométer kimenetére az LPC2148 P0.28-ig |
3. Jobb csap |
+ Ve 5V-ból BEMENET |
+ 5V |
Megjegyzendő pontok
1. Itt 3,3 V feszültségszabályozóval analóg bemeneti értéket adunk az LPC2148 ADC tűjéhez (P0.28), és mivel 5 V-os energiát használunk, a feszültséget 3,3 V-os feszültségszabályzóval kell szabályozni.
2. Potenciométert használnak a feszültség változtatására (0 V és 3,3 V) között, hogy analóg bemenetet (ADC) biztosítson az LPC2148 P0.28 tűhöz
Az ARM7-LPC2148 programozása PWM-hez
Az ARM7-LPC2148 programozásához szükségünk van keil uVision és Flash Magic eszközre. USB-kábellel programozzuk az ARM7 Stick-et mikro USB-porton keresztül. Kódot írunk a Keil segítségével, és létrehozunk egy hex fájlt, majd a HEX fájlt a Flash Magic segítségével az ARM7 pálcára villantjuk. Ha többet szeretne megtudni a keil uVision és a Flash Magic telepítéséről és használatáról, kövesse az Első lépések az ARM7 LPC2148 mikrovezérlővel linket és programozza be a Keil uVision használatával.
Ebben az oktatóanyagban ADC és PWM technikát fogunk használni a LED fényerejének szabályozásához. Itt az LPC2148 analóg bemenetet (0-3,3 V) kap a P0.28 ADC bemeneti tűn keresztül, majd ezt az analóg bemenetet digitális értékre (0-1023) alakítja át. Ezután ezt az értéket újra digitális értékre (0 - 255) konvertáljuk, mivel az LPC2148 PWM kimenetének csak 8 bites felbontása van (2 8). A LED a PWM P0.0 tűhöz csatlakozik, és a LED fényereje a potenciométerrel szabályozható. Ha többet szeretne tudni az ADC-ről az ARM7-LPC2148-ban, kövesse a linket.
Az LPC2148 programozása a PWM és ADC számára
1. lépés: - A legelső dolog az, hogy konfiguráljuk a PLL-t az óra generálásához, mivel ez az LPC2148 rendszeróráját és perifériás óráját állítja be, amire a programozóknak szüksége van. Az LPC2148 maximális órajel-frekvenciája 60Mhz. A következő sorokat használjuk a PLL óra generálásának konfigurálásához.
void initilizePLL (void) // Funkció a PLL használatához az óra létrehozásához { PLL0CON = 0x01; PLL0CFG = 0x24; PLL0FEED = 0xAA; PLL0FEED = 0x55; míg (! (PLL0STAT & 0x00000400)); PLL0CON = 0x03; PLL0FEED = 0xAA; PLL0FEED = 0x55; VPBDIV = 0x01; }
2. lépés: - A következő dolog az, hogy a PINSEL regiszter segítségével válassza ki az LPC2148 PWM csapjait és PWM funkcióját. PINSEL0-t használunk, mivel a P0.0-at használjuk az LPC2148 PWM kimenetéhez.
PINSEL0 = 0x00000002; // A P0.0 tű beállítása a PWM kimenethez
3. lépés: - Ezután vissza kell állítanunk az időzítőket a PWMTCR (Timer Control Register) segítségével.
PWMTCR = (1 << 1); // A PWM Timer Control Register beállítása számláló nullázásként
Ezután állítsa be az előskála értékét, amely meghatározza a PWM felbontását. Nulla értékre állítom
PWMPR = 0X00; // PWM előskála értékének beállítása
4. lépés: - Ezután be kell állítanunk a PWMMCR-t (PWM match control register), mivel ez olyan műveletet állít be, mint a reset, a PWMMR0 megszakításai.
PWMMCR = (1 << 0) - (1 << 1); // A PWM Match Control Register beállítása
5. lépés: - A PWM csatorna maximális periódusát a PWMMR segítségével állítjuk be.
PWMMR0 = PWMérték; // PWM-érték megadása Maximális érték
Esetünkben a maximális érték 255 (a maximális fényerő érdekében)
6. lépés: - Ezután be kell állítanunk a Latch Enable-t a megfelelő egyeztetési regiszterekre a PWMLER segítségével
PWMLER = (1 << 0); // Enalbe PWM retesz
(PWMMR0-t használunk) Tehát engedélyezzük a megfelelő bitet azáltal, hogy a PWMLER-ben 1-et beállítunk
7. lépés: - A PWM kimenet engedélyezéséhez a csaphoz a PWMTCR-t kell használnunk a PWM Timer számlálók és PWM módok engedélyezéséhez.
PWMTCR = (1 << 0) - (1 << 3); // A PWM és a PWM számláló engedélyezése
8. lépés: - Most meg kell kapnunk a PWM munkaciklusának beállításához szükséges potenciométer értékeket az ADC P0.28 tűről. Tehát az LPC2148 ADC modulját használjuk a potenciométerek analóg bemenetének (0–3,3 V) átalakítására az ADC értékekre (0–1023).
Itt az értékeket 0-1023-ról 0-255-re konvertáljuk úgy, hogy elosztjuk 4-gyel, mivel az LPC2148 PWM-jének 8 bites felbontása van (2 8).
9. lépés: - Az ADC P0.28 tű kiválasztásához az LPC2148-ban használjuk
PINSEL1 = 0x01000000; // A P0.28 beállítása ADC bemenetként AD0CR = (((14) << 8) - (1 << 21)); // Óra és PDN beállítása az A / D konverzióhoz
A következő sorok rögzítik az analóg bemenetet (0–3,3 V), és átalakítják digitális értékre (0–1023). Ezután ezeket a digitális értékeket elosztjuk 4 -gyel, hogy átalakítsuk őket (0-tól 255-ig), és végül PWM kimenetként tápláljuk az LPC2148 P0.0 tűjébe, amelyre a LED csatlakozik.
AD0CR - = (1 << 1); // Válassza ki az AD0.1 csatornát az ADC regiszter késleltetési idejéből (10); AD0CR - = (1 << 24); // Indítsa el az A / D konverziót, míg (((AD0DR1 & (1 << 31)) == 0); // Ellenőrizze a DONE bitet az ADC Data register adcvalue = (AD0DR1 >> 6) & 0x3ff; // Az EREDMÉNY beszerzése az ADC adatregiszterből dutycycle = adcvalue / 4; // képlet a dutycycle értékek (0-tól 255-ig) megszerzésére PWMMR1 = dutycycle; // állítsa a dutycycle értékét PWM egyezési regiszterbe PWMLER - = (1 << 1); // PWM kimenet engedélyezése dutycycle értékkel
10. lépés: - Ezután ezeket az értékeket megjelenítjük az LCD (16X2) kijelző modulban. Tehát a következő sorokat adjuk az LCD kijelző modul inicializálásához
Törölje az LCD_INITILIZE (void) // Funkciót az LCD előkészítéséhez { IO0DIR = 0x0000FFF0; // a P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 csapokat OUTPUT késleltetési időként állítja be (20); LCD_SEND (0x02); // Lcd inicializálása 4 bites üzemmódban LCD_SEND (0x28); // 2 sor (16X2) LCD_SEND (0x0C); // Megjelenítés a kurzoron ki LCD_SEND (0x06); // Automatikus növekedési kurzor LCD_SEND (0x01); // Kijelző tiszta LCD_SEND (0x80); // Az első sor első pozíciója }
Mivel 4-bites módban csatlakoztattuk az LCD-t az LPC2148-hoz, el kell küldenünk azokat az értékeket, amelyek rágcsálással jelennek meg (Felső Nibble és Lower Nibble). Tehát a következő sorokat használjuk.
void LCD_DISPLAY (char * msg) // Funkció az egyesével elküldött karakterek kinyomtatására { uint8_t i = 0; míg (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Felső rágcsálást küld IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH az adatok kinyomtatásához IO0CLR = 0x00000020; // RW LOW Írási mód késleltetési ideje (2); IO0CLR = 0x00000040; // EN = 0, RS és RW változatlan (azaz RS = 1, RW = 0) késleltetési idő (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Alsó rágcsálást küld IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; késleltetési idő (2); IO0CLR = 0x00000040; késleltetési idő (5); i ++; } }
Az ADC & PWM értékek megjelenítéséhez a következő sorokat használjuk az int main () függvényben.
LCD_SEND (0x80); sprintf (displayadc, "adcvalue =% f", adcvalue); LCD_DISPLAY (displayadc); // ADC-érték megjelenítése (0-1023) LCD_SEND (0xC0); sprintf (ledoutput, "PWM OP =%. 2f", fényerő); LCD_DISPLAY (ledoutput); // A dutycycle értékeinek megjelenítése (0 és 255) között
Az oktatóanyag teljes kódja és videó leírása az alábbiakban található.