Talaan ng mga Nilalaman:

Bumuo ng PWM Wave Sa PIC Microcontroller: 6 na Hakbang
Bumuo ng PWM Wave Sa PIC Microcontroller: 6 na Hakbang

Video: Bumuo ng PWM Wave Sa PIC Microcontroller: 6 na Hakbang

Video: Bumuo ng PWM Wave Sa PIC Microcontroller: 6 na Hakbang
Video: Creating a PWM in Assembly - Part 7 Microcontroller Basics (PIC10F200) 2024, Nobyembre
Anonim
Bumuo ng PWM Wave Sa PIC Microcontroller
Bumuo ng PWM Wave Sa PIC Microcontroller
Bumuo ng PWM Wave Sa PIC Microcontroller
Bumuo ng PWM Wave Sa PIC Microcontroller
Bumuo ng PWM Wave Sa PIC Microcontroller
Bumuo ng PWM Wave Sa PIC Microcontroller
Bumuo ng PWM Wave Sa PIC Microcontroller
Bumuo ng PWM Wave Sa PIC Microcontroller

ANO ANG PWM?

PWM STANDS FOR PULSE WIDTH MODULATION ay isang pamamaraan kung saan ang lapad ng pulso ay iba-iba.

Upang maunawaan ang konseptong ito malinaw na isinasaalang-alang ang isang pulso ng orasan o anumang parisukat na signal ng alon na mayroon itong 50% na cycle ng tungkulin na nangangahulugang pareho ang panahon ng Ton at Toff, Ang kabuuang tagal na kung saan ang signal ay mataas at ang tagal kung saan mababa ang signal ay tinatawag na total haba ng oras.

Para sa imaheng ipinakita sa itaas ang alon na ito ay may duty cycle na 50%

Duty cycle = (ON time / Total Time) * 100

SA oras - oras kung saan mataas ang signal

OFF time - time foe na signal ay mababa Kabuuang oras -Total na tagal ng oras ng pulso (parehong ON at OFF na oras)

Hakbang 1: Pagpili ng Microcontroller

Pagpili ng Microcontroller
Pagpili ng Microcontroller

Ang pagpili ng naaangkop na microcontroller para sa proyekto na ito ay ang mahalagang bahagi ng proyekto PWM signal ay maaaring mabuo sa mga microcontroller na may mga PWM channel (mga rehistro ng CCP). Para sa proyektong ito, pinaplano kong manatili sa pic16f877. maaari mong i-download ang link ng datasheet na ibinigay sa ibaba

PIC16F877a isang sheet ng data mag-click dito

Ang module ng CCP ay responsable para sa paggawa ng PWM signal. Ang CCP1 at CCP2 ay multiplexed sa PORTC. Ang PORTC ay isang 8-bit na malawak na bidirectional port. Ang nararapat na rehistro ng direksyon ng data ay TRISC. Ang pagtatakda ng TRISC bit (= 1) ay gagawa ng kaukulang PORTC pin bilang isang input. Ang pag-clear ng isang bit ng TRISC (= 0) ay gagawing kaukulang pin na kaukulang PORTC.

TRISC = 0; // Clearing this bit will make PORTC as output

Hakbang 2: CONFIGURE CCP MODULE

CONFIGURE CCP MODULE
CONFIGURE CCP MODULE
CONFIGURE CCP MODULE
CONFIGURE CCP MODULE

CCP - MODYUL NG KAPIT / MAGBABAGO / PWM

Ang bawat module ng Capture / Compare / PWM (CCP) ay naglalaman ng isang 16-bit na rehistro na maaaring gumana bilang isang:

• 16-bit na rehistro ng Capture

• 16-bit Ihambing ang rehistro

• Nagrehistro ang PWM Master / Slave Duty Cycle

I-configure ang CCP1CON na magrehistro sa PWM mode

Paglalarawan ng Paglalarawan

CCPxCON Ang rehistro na ito ay ginagamit upang I-configure ang module ng CCP para sa Capture / Compare / PWM opertaion.

CCPRxL Ang rehistro na ito ay nagtataglay ng 8-Msb bits ng PWM, ang mas mababang 2-bits ay magiging bahagi ng rehistro ng CCPxCON.

Ang TMR2 Libreng running counter na kung saan ihahambing sa CCPR1L at PR2 para sa pagbuo ng output ng PWM.

Ngayon ay gagamit ako ng binary upang kumatawan sa mga piraso upang mai-configure ang rehistro ng CCP1CON.

sumangguni sa imahe sa itaas.

CCP1CON = 0b00001111;

Maaari mo ring hex format

CCP1CON = 0x0F; // configuring CCP1CON magparehistro para sa PWM mode

Hakbang 3: Pag-configure ng Timer2 Module (Rehistro ng TMR2)

Pag-configure ng Timer2 Module (Rehistro ng TMR2)
Pag-configure ng Timer2 Module (Rehistro ng TMR2)

Ang Timer2 ay isang 8-bit timer na may prescaler at isang postscaler. Maaari itong magamit bilang batayan ng oras ng PWM para sa mode na PWM ng (mga) module ng CCP. Ang rehistro ng TMR2 ay nababasa at nasusulat at na-clear sa anumang Pag-reset ng aparato.

Ipinapakita ang rehistro ng T2CON

Ang prescale at postscale ay ayusin ang dalas ng output ng nabuong PWM wave.

Dalas = dalas ng orasan / (4 * prescaler * (PR2-TMR2) * Bilang ng postcaler *

Kung saan ang Tout = 1 / dalas

T2CON = 0b00000100;

Lilikha ito ng 2.5 KHz @ 1Mhz o 100KHz @ 4MHz na kristal (halos mayroong isang limitasyon para sa dalas ng PWM na ito na sumangguni sa partikular na datasheet para sa higit pang mga detalye)

hex representasyon

T2CON = 0x04; // paganahin ang T2CON nang walang Prescaler at pag-configure ng postcale

Hakbang 4: Pag-configure ng PR2 (Pagrehistro ng Panahon ng Timer2)

Ang module ng Timer2 ay mayroong isang 8-bit na rehistro ng panahon, PR2. Ang mga increment ng Timer2 mula 00h hanggang sa tumugma ito sa PR2 at pagkatapos ay i-reset sa 00h sa susunod na cycle ng pagtaas. Ang PR2 ay isang nababasa at nasusulat na rehistro. Ang rehistro ng PR2 ay pinasimulan sa FFh sa Pag-reset.

Ang pagtatakda ng isang naaangkop na saklaw para sa PR2 ay magbibigay-daan sa paggamit upang baguhin ang duty cycle ng nabuong PWM wave

PR2 = 100; // Itakda ang oras ng Siklo sa 100 para sa pag-iba ng cycle ng tungkulin mula 0-100

Para sa pagiging simple gumagamit ako ng PR2 = 100 sa pamamagitan ng paggawa ng CCPR1L = 80; Maaaring makamit ang 80% na cycle ng tungkulin.

Hakbang 5: I-configure ang CCPR1l Module

Dahil ang PR2 = 100 CCPR1l ay maaaring mai-configure kahit saan sa pagitan ng 0-100 upang makuha ang nais na cycle ng tungkulin.

Hakbang 6: Isulat ang Sketch sa Iyo MPLAB X IDE na Ibinigay sa Bellow ang Code

Isulat ang Sketch sa Iyo MPLAB X IDE ang Code Ay Ibinibigay sa Bellow
Isulat ang Sketch sa Iyo MPLAB X IDE ang Code Ay Ibinibigay sa Bellow

# isama

walang bisa ang pagkaantala (int a) // upang makabuo ng pagkaantala {

para sa (int i = 0; i <a; i ++)

{

para sa (int j = 0; j <144; j ++);

}

}

walang bisa pangunahing ()

{TRISC = 0; // Clearing this bit will make PORTC as output.

CCP1CON = 0x0F; // configuring CCP1CON magparehistro para sa PWM mode

T2CON = 0x04; // paganahin ang T2CON nang walang Prescaler at pag-configure ng postcale.

PR2 = 100; // Itakda ang oras ng Ikot sa 100 para sa pag-iba-iba ng cycle ng tungkulin mula 0-100

habang (1) {

CCPR1L = 75; // nakabuo ng 75% duty cycle delay (1);

}

}

Gumawa rin ako ng kaunting pagbabago sa code upang ang dalas ng nabuong PWM na alon

Ang code na ito ay na-simulate sa proteus at ang output PWM wave ay ipinapakita sa ibaba Upang mai-upload ito sa iyong pic development boards gamitin ang # isama na may angkop na mga bits sa pagsasaayos.

Salamat

Inirerekumendang: