You are on page 1of 11

Bm xung (PWM) l g

Trong phn timer ta hc to ra


cc xung c thi gian mc 1 = thi
gian mc 0

Xung pWm
Xung pwm c chu k khng i.
Nhng thi gian mc 1 c th khc
hoc bng thi gian mc 0
Duty cycle

Period

Xung PWM lm g?
Nu chng ta cp vo 2 bng n
xung c cng tn s, v mi bng
n c duty cycle khc nhau
=> th bng n c rng
xung(duty cycle) rng hn th sng
nhiu hn
Nu thay bng n bng ng c. Th
ng c no c cp xung c
rng xung(duty cycle) ln hn th
quay nhanh hn

Cho nn:
Dng pwm iu khin tc ng
c
Hay iu khin sng bng n
V nhiu chc nng khc
Nguyn l n gin l bt tt lin
tc. Bng n no c thi gian bt
ln hn th sng hn v ngc li

B PWM ca PIC18f4520
C 2 b to xung
PWM1
PWM2
Pwm1 cp xung ra trn chn CCP1/ RC2
Pwm2 cp xung ra trn chn CCp2/RC1
hoc RB3
Mun s dng cc chn ccp ny cn t
tris mc 0( u ra)

Cch b to xung hot ng


CCPxCON<5:4>
CCPRxL
R

CCPRxH

OUT
PUT
S

Comparat
or

TRIS BIT

TMR2

Comarato
r

PR2

Thit lp chu k v rng


xung
Chu k = (PR2+1)*4*TOSC*(TMR2
prescaler value)
rng= (A*TOSC*(TMR2 prescaler
value)
A l: gi tr gp li t thanh ghi 8 bit
CCPRxL v 2 bt CCPxCON<5:4>
X l 1 hoc 2. i din cho b CCP1 v
CCP2
PR2 l thanh ghi 8 bit nn gi tr khng

V d to xung 1Khz.
Duty cycle = 70%
S dng thch anh 4 MHz=> TOSC =
1/4 us
Xung 1khz = > chu k xung l 1000
(us)
Duty cycle = 70% = 70.1000/100 =
700 (us)
Chn h s TMR2 prescaler = 4
=> PR2+1= 1000/4/0.25/4=
250=>PR2=249

Th vin PWM.H

C 3 hm s dng
ClosePWMx: cm hot ng knh x
OpenPWMx: khi to knh x
SetDCPWMx: ci t rng xung
cho knh x

X: l knh 1 hoc 2

V d to xung 1khz. Duty cycle =


70%

tnh c PR2 = 249


A = 700
#include<p18f4520.h>
#include<pwm.h>
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config MCLRE= OFF

void main()

{
TRISC=0; // su dugn CCP1/ RC2
T2CONbits.T2CKPS1=0;
T2CONbits.T2CKPS0=1;// TMR2 prescaler
=4
ADCON1= 0x0f;
OpenPWM1(249);// khoi tao Pwm1
SetDCPWM1(700);// do rong xung l 700
while(1);

You might also like