- Mga Pangunahing Kaalaman ng PWM Signal
- Pag-setup at Kinakailangan sa Hardware
- Circuit Diagram para sa Nuvoton N76E003 Microcontroller LED Dimming
- PWM Pins sa N76E003 Nuvoton Microcontroller
- Mga Rehistro at Pag-andar ng PWM sa N76E003 Nuvoton Microcontroller
- Mga Mode ng Pagpapatakbo ng PWM sa Nuvoton N6E003 Microcontroller
- Programming Nuvoton N76E003 para sa PWM
- Flashing ang Code At Pagsubok ng Output
Ang Pulse Width Modulation (PWM) ay isang karaniwang ginagamit na diskarte sa mga microcontroller upang makabuo ng isang tuluy-tuloy na signal ng pulso na may tinukoy na dalas at duty cycle. Sa madaling sabi, ang PWM ay tungkol sa pagbabago ng lapad ng isang pulso habang ang dalas ay pare-pareho.
Ang isang signal ng PWM ay kadalasang ginagamit sa pagkontrol ng isang servo motor o ningning ng isang LED. Gayundin, dahil ang mga microcontrollers ay maaari lamang magbigay ng Logic 1 (Mataas) o Logic 0 (Mababa) sa mga output pin nito, hindi ito maaaring magbigay ng magkakaibang boltahe ng analog maliban kung gagamitin ang isang DAC o Digital to Analog converter. Sa ganitong kaso, maaaring mai-program ang microcontroller upang mag-output ng isang PWM na may iba't ibang cycle ng tungkulin na maaaring mai-convert sa magkakaibang boltahe ng analog. Ginamit namin dati ang PWM peripheral sa maraming iba pang mga microcontroller din.
- ARM7-LPC2148 PWM Tutorial: Pagkontrol ng Liwanag ng LED
- Pulse width Modulation (PWM) gamit ang MSP430G2: Pagkontrol sa Liwanag ng LED
- Bumubuo ng PWM gamit ang PIC Microcontroller na may MPLAB at XC8
- Pulse width Modulation (PWM) sa STM32F103C8: Pagkontrol ng Bilis ng DC Fan
- Bumubuo ng mga signal ng PWM sa mga GPIO na pin ng PIC Microcontroller
- Tutorial sa Raspberry Pi PWM
- PWM Tutorial na may ESP32
Sa tutorial na ito, makikipag-ugnay kami sa isang LED na makokontrol gamit ang signal na PWM mula sa unit ng N76E003 microcontroller. Susuriin namin kung anong uri ng pag-setup ng hardware ang kailangan namin at kung paano namin program ang aming microcontroller. Bago ito, maunawaan natin ang ilang mga pangunahing kaalaman ng isang PWM Signal.
Mga Pangunahing Kaalaman ng PWM Signal
Sa imaheng nasa ibaba ay ipinapakita ang isang palaging signal ng PWM.
Ang imahe sa itaas ay walang anuman kundi isang pare-pareho ang square square na may parehong ON oras at parehong oras ng OFF. Ipagpalagay, ang kabuuang panahon ng signal ay 1 Segundo. Kaya ang oras at oras ng pag-off ay 500ms. Kung ang isang LED ay konektado sa signal na ito, ang LED ay magbubukas nang 500ms at papatayin nang 500ms. Samakatuwid, sa pananaw ng pananaw, ang LED ay may ilaw na may kalahati ng aktwal na ningning kung ito ay naka-on sa isang direktang 5V signal nang walang anumang off time.
Ngayon tulad ng ipinakita sa imahe sa itaas, kung ang cycle ng tungkulin ay binago, ang LED ay may ilaw na may 25% ng aktwal na ningning gamit ang parehong prinsipyo tulad ng tinalakay dati. Kung nais mong malaman ang higit pa at alamin ang tungkol sa Pulse Width Modulation (PWM), maaari mong suriin ang naka-link na artikulo.
Pag-setup at Kinakailangan sa Hardware
Tulad ng kinakailangan ng proyektong ito ay upang makontrol ang LED gamit ang PWM. Ang isang LED ay kinakailangan upang ma-interfaced sa N76E003. Dahil ang isang LED ay magagamit sa N76E003 development board, gagamitin ito sa proyektong ito. Walang ibang mga sangkap ang kinakailangan.
Hindi banggitin, kailangan namin ang N76E003 microcontroller based development board pati na rin ang Nu-Link Programmer. Ang isang karagdagang 5V power supply unit ay maaaring kailanganin kung ang programmer ay hindi ginagamit bilang isang mapagkukunan ng kuryente.
Circuit Diagram para sa Nuvoton N76E003 Microcontroller LED Dimming
Tulad ng nakikita natin sa iskemang nasa ibaba, ang Test LED ay magagamit sa loob ng development board at ito ay konektado sa port 1.4. Sa matinding kaliwa, ipinapakita ang koneksyon sa interface ng programa.
PWM Pins sa N76E003 Nuvoton Microcontroller
Ang N76E003 ay may 20 mga pin mula sa kung saan ang 10 mga pin ay maaaring magamit bilang PWM. Ang mga larawan sa ibaba ay ipinapakita ang mga PWM na pin na naka-highlight sa pulang kahon na parisukat.
Tulad ng nakikita natin, ang mga naka-highlight na PWM na pin ay maaari ding gamitin para sa iba pang mga layunin. Gayunpaman, ang iba pang layunin ng mga pin ay hindi magagamit kapag ang mga pin ay naka-configure para sa output ng PWM. I-pin ang 1.4 na ginagamit bilang isang PWM output pin, mawawala ang iba pang pag-andar. Ngunit, iyon ay hindi isang problema dahil ang isa pang pagpapaandar ay hindi kinakailangan para sa proyektong ito.
Ang dahilan sa likod ng pagpili ng pin 1.4 bilang isang output pin ay dahil ang nakapaloob na Test LED ay konektado sa pin na iyon sa board ng pag-unlad, sa gayon hindi namin nangangailangan ng mga panlabas na LED. Gayunpaman, sa microcontroller na ito sa labas ng 20 mga pin, 10 mga pin ay maaaring magamit bilang isang PWM output pin at anumang iba pang mga PWM na pin ay maaaring magamit para sa mga hangarin na nauugnay sa output.
Mga Rehistro at Pag-andar ng PWM sa N76E003 Nuvoton Microcontroller
Gumagamit ang N76E003 ng system clock o Timer 1 overflow na hinati ng isang PWM na orasan na may napipiling Prescaler mula 1/1 ~ 1/128. Ang PWM na panahon ay maaaring itakda gamit ang 16-bit na panahon na magrehistro ng PWMPH at PWMPL register.
Ang microcontroller ay mayroong anim na indibidwal na rehistro ng PWM na bumubuo ng anim na signal ng PWM na tinatawag na PG0, PG1, PG2, PG3, PG4, at PG5. Gayunpaman, ang panahon ay pareho para sa bawat mga PWM channel dahil nagbabahagi sila ng parehong 16-bit period counter ngunit ang cycle ng tungkulin ng bawat PWM ay maaaring naiiba mula sa iba dahil ang bawat PWM ay gumagamit ng iba't ibang 16-bit duty cycle register na pinangalanan bilang {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L}, at {PWM5H, PWM5L}. Kaya, sa N76E003, anim na output ng PWM ang maaaring malikha nang nakapag-iisa na may iba't ibang mga cycle ng tungkulin.
Hindi tulad ng ibang mga microcontroller, ang pagpapagana ng PWM ay hindi itinatakda ang mga I / O na pin sa kanilang PWM output na awtomatiko. Sa gayon, kailangang i-configure ng gumagamit ang I / O output mode.
Kaya, anuman ang kinakailangan para sa aplikasyon, ang unang hakbang ay upang matukoy o pumili kung aling isa o dalawa o kahit na higit sa dalawang mga I / O na pin bilang output ng PWM. Matapos pumili ng isa, ang mga I / O pin ay kailangang itakda bilang Push-Pull mode o Quasi-bidirectional para sa pagbuo ng PWM signal. Maaari itong mapili gamit ang rehistro ng PxM1 at PxM2. Itinakda ng dalawang rehistro ang mga mode na I / O kung saan ang x ay nangangahulugang numero ng Port (Halimbawa, Port P1.0 ang rehistro ay P1M1 at P1M2, para sa P3.0 ito ay P3M1 at P3M2, atbp.)
Ang pagsasaayos ay maaaring makita sa larawan sa ibaba-
Pagkatapos, ang susunod na hakbang ay upang paganahin ang PWM sa partikular na I / O (na) pin na iyon. Upang magawa ito, kailangang itakda ng gumagamit ang mga rehistro ng PIOCON0 o PIOCON1. Ang rehistro ay nakasalalay sa pagmamapa ng pin bilang PIOCON0 at PIOCON1 na kontrolin ang iba't ibang mga pin na nakasalalay sa mga signal ng PWM. Ang pagsasaayos ng dalawang rehistro na ito ay maaaring makita sa larawan sa ibaba-
Tulad ng nakikita natin, kinokontrol ng rehistro sa itaas ang 6 na mga pagsasaayos. Para sa natitirang bahagi, gamitin ang rehistro ng PIOCON1.
Sa gayon, kinokontrol ng rehistro sa itaas ang natitirang 4 na mga pagsasaayos.
Mga Mode ng Pagpapatakbo ng PWM sa Nuvoton N6E003 Microcontroller
Ang susunod na hakbang ay upang piliin ang mga mode ng pagpapatakbo ng PWM. Sinusuportahan ng bawat PWM ang tatlong mga mode ng pagpapatakbo - Independent, Synchronous, at mode na paganahin ang Dead-Time.
Ang independiyenteng mode ay nagbibigay ng solusyon kung saan ang anim na signal ng PWM ay maaaring malayang nabuo. Kinakailangan ito ng maximum na beses kung kailan kailangang i-on at kontrolin ang mga pagpapatakbo o buzzer na nauugnay sa LED.
Ang Synchronous mode hanay ng PG1 / 3/5 sa parehong in-phase PWM output, katulad ng PG0 / 2/4, kung saan ang mga PG0 / 2/4 ay nagbibigay ng independiyenteng PWM output signal. Pangunahing kinakailangan ito para sa pagkontrol ng mga motor na may tatlong yugto.
Ang mode ng pagpasok ng Dead-Time ay medyo kumplikado at inilapat sa totoong mga aplikasyon ng motor, lalo na sa mga pang-industriya na application. Sa mga naturang aplikasyon, ang isang pantulong na output ng PWM ay kailangang maging "patay na oras" na pagpasok na pumipigil sa pagkasira ng mga aparato ng paglipat ng kuryente tulad ng GPIBs. Ang mga pagsasaayos ay nakatakda sa mode na ito sa isang paraan na ang PG0 / 2/4 ay nagbibigay ng mga signal ng output ng PWM sa parehong paraan tulad ng independiyenteng mode ngunit ang PG1 / 3/5 ay nagbibigay ng "labas na yugto na mga signal ng PWM" na output ng PG0 / 2/4 na naaayon at huwag pansinin ang pagrehistro sa tungkulin sa PG1 / 3/5.
Sa itaas ng tatlong mga mode ay maaaring mapili gamit ang ibaba sa pagsasaayos ng rehistro-
Ang susunod na pagsasaayos ay ang pagpili ng mga uri ng PWM gamit ang rehistro ng PWMCON1.
Kaya, tulad ng nakikita natin, magagamit ang dalawang uri ng PWM na maaaring mapili gamit ang rehistro sa itaas. Sa linya na nakahanay, ang 16-bit counter ay gumagamit ng operasyon ng solong slope sa pamamagitan ng pagbibilang ng 0000H hanggang sa itinakdang halaga ng {PWMPH, PWMPL}, at pagkatapos ay magsisimula sa 0000H. Ang output waveform ay nakaayos sa kaliwang gilid.
Ngunit, sa gitnang nakahanay na mode, ang 16-bit counter ay gumagamit ng dalwang dalisdis na operasyon sa pamamagitan ng pagbibilang ng hanggang 0000H hanggang sa {PWMPH, PWMPL} at pagkatapos ay muling pupunta mula sa {PWMPH, PWMPL} hanggang 0000H sa pamamagitan ng pagbibilang ng pababa. Ang output ay nakahanay sa gitna at ito ay kapaki-pakinabang para sa pagbuo ng mga hindi nag-o-overlap na mga form ng alon. Ngayon sa wakas ang mga pagpapatakbo ng kontrol sa PWM na maaaring masuri sa mga sa ilalim ng rehistro-
Upang maitakda ang pinagmulan ng orasan, gamitin ang pagrehistro ng kontrol sa orasan ng CKCON.
Ang signal ng output ng PWM ay maaari ding ma-mask gamit ang rehistro ng PMEN. Gamit ang rehistro na ito, maaaring maskara ng gumagamit ang output signal ng 0 o 1.
Susunod ay ang Rehistro ng PWM Control-
Ang rehistro sa itaas ay kapaki-pakinabang upang patakbuhin ang PWM, mag-load ng bagong panahon at pag-load ng tungkulin, kontrolin ang PWM Flag at i-clear ang PWM Counter.
Ang nauugnay na mga pagsasaayos ng bit ay ipinapakita sa ibaba-
Upang maitakda ang divider ng orasan, gamitin ang rehistro ng PWMCON1 para sa divider ng PWM na orasan. Ang ika-5 bit ay ginagamit para sa mode ng Pangkat na pinagana ang naka-pangkat na PWM at nagbibigay ng parehong siklo ng tungkulin para sa unang tatlong mga pares ng PWM.
Programming Nuvoton N76E003 para sa PWM
Ang pag-coding ay simple at ang kumpletong code na ginamit sa para sa tutorial na ito ay matatagpuan sa ilalim ng pahinang ito. Ang LED ay konektado sa P1.4 pin. Sa gayon ang P1.4 na pin ay kinakailangan upang magamit para sa output ng PWM.
Sa pangunahing programa, ang mga setting ay ginagawa sa kani-kanilang pagkakasunud-sunod. Ang mga linya sa ibaba ng mga code ay nagtatakda ng PWM at ise-configure ang P1.4 na pin bilang output ng PWM.
P14_PushPull_Mode;
Ginagamit ito upang maitakda ang pin na P1.4 sa push-pull mode. Ito ay tinukoy sa Function_define.h library bilang-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Ang mga susunod na linya na ginamit upang paganahin ang PWM sa pin P1.4. Tinukoy din ito sa Function_define.h library bilang-
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EA = BIT_TMP //P1.4 bilang Paganahin ang output ng PWM1 na paganahin ang PWM_IMDEPENDENT_MODE;
Ang code sa ibaba ay ginagamit upang itakda ang PWM sa independiyenteng mode. Sa library ng Function_define.h , ito ay tinukoy bilang-
# tukuyin ang PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Pagkatapos ay kailangan naming itakda ang uri ng EDGE na output ng PWM. Sa library ng Function_define.h , ito ay tinukoy bilang-
# tukuyin ang PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Susunod, kailangan nating i-clear ang halaga ng counter ng PWM na magagamit sa SFR_Macro.h library-
#define set_CLRPWM CLRPWM = 1
Pagkatapos nito, ang PWM na orasan ay napili bilang Fsys na orasan at ang ginamit na factor ng dibisyon ay ang 64 na dibisyon.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Parehong tinukoy bilang-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Ang linya ng code sa ibaba ay ginagamit upang i-mask ang output PWM signal ng 0 na tinukoy bilang-
# tukuyin ang PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Pagkatapos ay kailangan nating itakda ang tagal ng panahon ng signal ng PWM. Itinatakda ng pagpapaandar na ito ang panahon sa pagrehistro ng PWMPL at PWMPH. Dahil ito ay isang 16-bit na rehistro, ang pagpapaandar ay gumagamit ng kaunting paglilipat na pamamaraan upang maitakda ang PWM Period.
void set_PWM_period (unsigned int halaga) { PWMPL = (halaga & 0x00FF); PWMPH = (((halaga at 0xFF00) >> 8); }
Gayunpaman, maliban sa 1023 at 8-bit na panahon, ang mga gumagamit ay maaari ring gumamit ng iba pang mga halaga. Ang pagdaragdag ng panahon ay nagreresulta sa makinis na pagdilim o pagkupas.
set_PWMRUN;
Sisimulan nito ang PWM na tinukoy sa SFR_Macro.h library bilang-
# tukuyin ang set_PWMRUN PWMRUN = 1
Susunod, habang habang loop , ang LED ay nakabukas at tuloy-tuloy na pagkupas.
habang (1) { para sa (halaga = 0; halaga <1024; halaga + = 10) { set_PWM1 (halaga); Timer1_Delay10ms (3); } para sa (halaga = 1023; halaga> 0; halaga - = 10) { set_PWM1 (halaga); Timer1_Delay10ms (2); } } }
Ang cycle ng tungkulin ay itinakda ng set_PWM1 ();, isang pagpapaandar na nagtatakda ng cycle ng tungkulin sa rehistro ng PWM1L at PWM1H.
void set_PWM1 (unsigned int halaga) { PWM1L = (halaga & 0x00FF); PWM1H = (((halaga at 0xFF00) >> 8); itakda_LOAD; }
Flashing ang Code At Pagsubok ng Output
Kapag handa na ang code, i-compile lamang ito at i-upload ito sa controller. Kung bago ka sa kapaligiran, suriin ang pagsisimula sa Nuvoton N76E003 tutorial upang malaman ang mga pangunahing kaalaman. Tulad ng nakikita mo mula sa resulta sa ibaba, ibinalik ng code ang 0 babala at 0 Mga Error at na-flash gamit ang default na flashing na pamamaraan ng Keil. Nagsisimula nang gumana ang application.
Muling itayo makapagsimula: Proyekto: PWM Rebuild target 'Target 1' assembling STARTUP.A51… kino-compile ang main.c… kino-compile Delay.c… pag-uugnay… Programa Size: data = 35.1 xdata = 0 code = 709 Nililikha hex file mula sa ". \ Mga Bagay \ pwm"… ". \ Mga Bagay \ pwm" - 0 Mga Error, 0 (Mga) Babala. Lumipas ang Oras ng Build: 00:00:05
Ang hardware ay konektado sa pinagmulan ng kuryente at gumagana ito ayon sa inaasahan. Iyon ang liwanag ng onboard LED na nabawasan at pagkatapos ay nadagdagan upang ipahiwatig ang pagbabago ng PWM duty cycle.
Ang kumpletong pagtatrabaho ng tutorial na ito ay maaari ding matagpuan sa video na naka-link sa ibaba. Inaasahan kong nasiyahan ka sa tutorial at natutunan ang isang bagay na kapaki-pakinabang kung mayroon kang anumang mga katanungan, iwanan ang mga ito sa seksyon ng komento o maaari mong gamitin ang aming mga forum para sa iba pang mga teknikal na katanungan.