You are on page 1of 7

PHẦN CỨNG PWM TRONG PIC16F887

I. Cơ chế
a) Sơ lược
- PWM là một chức năng quan trọng trong nhiều ứng dụng, và đã được hãng Microchip
tích hợp vào trong vi điều khiển PIC (cụ thể là PIC16F887).

- Trong module này, PIC16F887 dùng phương pháp timer để tạo ra xung PWM.

- Timer 2 được dùng làm bộ đếm cho module PWM để định ra chu kỳ cũng như độ rộng
xung PWM.

- Tín hiệu PWM tạo ra ở chân CPPx.

b)Cách thức hoạt động


- Chức năng PWM trong PIC16F887 được điếu khiển bởi các thanh ghi: PR2, T2CON,
CCPRxL, CCPxCON (sẽ giải thích phần sau).

- Sơ đồ hoạt động đơn giản như sau:


- Giá trị xác định chu kỳ của PWM sẽ được đưa vào thanh ghi PR2(8 bit), giá trị xác định
độ rộng xung sẽ được đưa vào thanh ghi CCPRxL(8 bit)(là 8 bit cao) và 2 bit
CCPxCON<5:4> (là 2 bit thấp) => độ phân giải của độ rộng xung là 10 bit.

- Khi bắt đầu, timer 2 sẽ bắt đầu đếm(dùng xung clock từ OSC), thanh ghi đếm TMR2
đóng vai trò 8 bit cao sẽ được kết hợp với 2 bit của của đồng hồ hệ thống để tạo thanh
ghi 10 bit (để so sánh được với 10 bit CCPRxL,CCPxCON<5,4>). Lưu ý rằng khi này bộ
đếm dùng trưc tiếp xung clock từ OSC (Focs) thay vì Focs/4 và qua bộ prescaler của timer
2.

- Ngoài ra, mỗi khi bắt đầu chu kỳ PWM mới, Giá trị của CCPRxL và CPPxCON<5,4>
được đưa vào thanh CCPRxH và 2 bit chốt. Từ đó, giá trị đếm được từ timer sẽ được
so sánh với 10 bit này, nếu bằng thì tín hiệu PWM sẽ lật từ cao xuống thấp (do được
điều khiển bằng bộ Flip Flop RS như hình). Hơn nữa, do timer 2 chỉ so sánh với giá trị
của thanh CCPRxH và 2 bit chốt, nên việc thay đỏi độ rộng xung(thay đổi
CCPRxL,CCPxCON<5,4>) chỉ xảy ra sau khi chu kỳ PWM cũ đã kết thúc.

- Tiếp theo, bộ timer vẫn tiếp tục đếm cho đếm khi 8 bit cao(thanh ghi TMR2) bằng với 8
bit của thanh PR2 thì có 3 việc sẽ xảy ra:

o Xóa giá trị bộ đếm của timer 2(TMR2).


o Lật chân CCPx từ thấp lên cao (tuy nhiên dễ thấy rằng nếu xet độ rộng xung = 0
thì chân CCPx sẽ luôn ở mức thấp)
o Độ rộng xung được đưa vào chốt vào thanh ghi CCPRxH.

- Lưu ý: khi so sánh với PR2, chỉ có 8 bit cao là thanh TMR2 được so sánh, việc bỏ đi 2
bit cuối tương ứng việc giảm tẩn số Focs đi 4 lần (xem như timer hoạt động bình thường
với xung clock Focs/4).

- Lưu ý: Timer 2 là 1 bộ đếm 8 bit của PIC16F887, có bộ prescaler(1:1,1:4,1:16) và


postscaler(không được sử dụng ở chế độ PWM). CCP1 và CCP2 ở chế độ PWM đều
dùng chung Timer 2.

- Lưu ý: chân CCPx ở chế độ này hoạt động như đầu phát nên bit TRIS tương ứng phải
được clear trước khi hoạt động.
- Tóm lại, tín hiệu PWM thu được như sau:

c)Kích hoạt chức năng PWM


- Để khởi động chức năng PWM cho PIC16F887, ta cần thiết lập các bước sau:
o Tắt chức năng PWM bằng cách set bit TRIS tương ứng với chân CCP cần xuất
PWM.
o Nạp chu kỳ của PWM vào thanh PR2, chu kỳ được tính theo công thức:
o Thiết lập chế độ PWM vào thanh ghi CCPxCON (vai trò các bit giới thiệu sau)

o Nạp độ rộng xung vào thanh ghi CCPRxL và CCPxCON<5,4>


o Thiết lập và cho khởi động TIMER 2:
 Xóa cờ ngắt TMR2IF của thah ghi PIR1
 Thiết lập bộ prescaler thông qua các bit T2CKPS của thanh ghi T2CON
 Kích hoạt Timer2 bằng cách set bit TMR2ON của thanh T2CON
o Để đảm bảo hoạt động của PWM, ta chỉ cho phép xuất PWM (clear bit TRIS của
chân CPP tương ứng) sau khi timer2 tràn (bit ngắt TMR2IF được set), chu kỳ
mới vừa mới bắt đầu.

- Lưu ý: nếu độ rộng xung lớn hơn chu kỳ thì tín PWM sẽ giữ nguyên không đổi (luôn ở
mức cao).

II. Chức năng Enhanced PWM


- Có 4 chế độ:
o PWM đơn(như trình bày phía trên)
o Half-Bridge
o Full-Bridge thuận
o Full-Brodge nghịch

- Được điều khiển bởi các bit P1M<1:0> và CCP1M<3:0> của thanh ghi CCP1CON.
- Các chân không dùng chức năng Enhanced
PWM thì có thể dung chức năng khác.
a) Half-Bridge

- Có 2 chân được điều xung dùng để kéo tải kiểu push-pull (chân P1A và chân
phụ P1B).
- Trong chế độ này, dead-band delay dung để chống dòng shoot-through trong
thiết bị khi có 2 công tắt cùng on(Vd: 2 MOSFET). Delay có thể điều khiển được bởi giá
trị PDC<6:0> của thanh PWM1CON. Nếu giá trị này lớn hơn độ rộng xung thì tín hiệu ra
sẽ ở mức thụ động trong toàn bộ chu kỳ.
Delay=4*Tocs*PDC<6:0>

- Lưu ý: phải clear bit TRIS tương úng cho cả 2 chân P1A và P1B.

- Ứng dụng half-bridge kéo tải


b) Full-Bridge
-

III. Một số thanh ghi liên quan


- Thanh CPP1CON:

-
IV.

o P1M<1:0>: PWM Output Configuration bits


 Khi dùng chức năng PWM, ta chì quan tâm tới 2 bit này khi
CCP1M<3:2>=11:
 00: 1 đầu ra; P1A được điều xung, P1B ,P1C, P1D là port(P1A,
P1B, P1C, P1D là pin RC2, RD<5:7>)
 01: Full-Bridge thuận, P1D điều xung, P1A tích cực, P1B, P1C thụ
động
 10: Half-Bridge, P1A, P1B điều xung với vùng dead-band điều
khiển được, P1C, P1D là chân port.
 11: Full-Brodge nghịch, P1Bđiều xung, P1C tích cực, P1A, P1D
thụ động
o DC1B<1:0>: PWM Duty Cycle Least Significant bits (2 bit thấp của độ rộng xung)
o CCP1M<3:0>: ECCP Mode Select bits (chỉ nêu các giá trị liên quan chế độ
PWM)
 1100: P1A, P1C tích cực mức cao, P1B, P1D tích cực mức cao
 1101: P1A, P1C tích cực mức cao, P1B, P1D tích cực mức thấp
 1110: P1A, P1C tích cực mức thấp, P1B, P1D tích cực mức cao
 1111: P1A, P1C tích cực mức thấp, P1B, P1D tích cực mức thấp

- Thanh CPP2CON: tương tự nhưng không có chức năng enhanced PWM


- Thanh T2CON:
o TOUTPS<3:0>: bộ postscaler không dùng trong tính năng PWM
o TMR2ON: kích hoạt timer 2
 1/0: on/off
o T2CKPS<1:0>: Timer 2 Clock Prescale Select bits (chọn bộ prescaler)
 00: prescale 1:1
 01: prescale 1:4
 1x: prescale 1:16

IV. Một số vấn đề liên quan


- Độ phân giải: PIC16F887 có độ phân giải của độ rộng xung là 10-bit, tuy nhiên trên thực
tế nếu chu kỳ của tín hiệu nhỏ(giá trị PR2 nhỏ) thì độ phân giải tương ứng giảm theo.
Độ phân giải lớn nhất 10-bit xảy ra khi giá tri PR2 là 255. Sau đây là bảng cho thấy độ
phân giải theo giá trị PR2:

-
Ở chế độ Sleep, timer 2 sẽ không đếm nữa, giá trị chân CCPx giữ nguyên. Khi được đánh
thức, timer2 tiếp tục đếm từ giá trị cũ.

- Khi reset: các port trở về trang thái Input (tắt PWM) và các thanh ghi CCP trở về trang
thái Reset.

You might also like