Bài giảng Bộ vi xử lí - Chương 6: Capture compare PWM module
MOVLW 0x2C ;Cheá ñoä hoaït ñoäng PWM, 2 bit
thấp cuûa Duty cycle CCP1X:CCP1Y = 10
MOVWF CCP1CON
BSF T2CON, TMR2ON ; Timer2 baét ñaàu taêng
; Ngaét CCP1 khoâng ñöôïc cho pheùp
; Chaïy voøng laäp ñeå ñôïi côø traøn. ; Chaïy voøng laäp ñeå ñôïi côø traøn.
PWM_Period_Match
BTFSS PIR1, TMR2IF
GOTO PWM_Period_Match
; Caäp nhaät chu kyø vaø duty cycle cuûa PWM
BCF PIR1, TMR2I
31 trang |
Chia sẻ: tuanhd28 | Lượt xem: 2473 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng Bộ vi xử lí - Chương 6: Capture compare PWM module, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 6
CAPTURE
COMPARE
PWM module
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
1. Giới thiệu
Module CCP hỗ trợ việc đo lường và điều khiển
thời gian hoạt động của các xung tín hiệu.
Đo chu kỳ hoạt động của tín hiệu (Capture)
Đo độ rộng xung, tạo ra một tín hiệu so sánh
(Compare)
Tạo xung với tần số khác nhau để điều khiển tốc
độ động cơ (Pulse Width Modulation – PWM)
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
- Mỗi Module CCP bao gồm thanh ghi 16bit có vai
trò là thanh ghi Capture 16bit hoặc thanh ghi
Compare 16bit hoặc thanh ghi Chu kỳ của PWM.
- PIC16F877A có 2 Module CCP: CCP1 và CCP2
(Phần trình bày sau cụ thể cho CCP1)
- TIMER1 và TIMER2 được dùng cho Module CCP.
Bảng 1: Các thanh ghi của Module CCP
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
- Mỗi Module CCP bao gồm thanh ghi 16bit có vai
trò là thanh ghi Capture 16bit hoặc thanh ghi
Compare 16bit hoặc thanh ghi Chu kỳ của PWM.
- PIC16F877A có 2 Module CCP: CCP1 và CCP2
- TIMER1 và TIMER2 được dùng cho Module CCP.
Bảng 2: Loại TIMER được sử dụng trong CCP
CCP MODE Timer Resource
Capture Timer 1
Compare Timer 1
PWM Timer 2
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
2. Thanh ghi CCP1CON
- Bit 7, 6: không dùng
- Bit 5, 4_CCP1X - CCP1Y: dùng cho Module PWM
CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
Trong chế độ PWM có 10bit để định thời gian cho
trạng thái mức cao của xung điều biến ngõ ra.
Ngoài 2 bit trên, 8 bit còn lại nằm trong thanh ghi
CCPR1L (2 thanh ghi 8bit CCPR1L và CCPR1H).
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
- Bit 3 - 0: được cấu hình như bảng sau:
CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
CCPxM3 CCPxM2 CCPxM1 CCPxM0 CCP Mode Selected
0 0 0 0 Resets CCP module
0 0 0 1
0 0 1 0 Compare, đảo ngõ ra khi Đ.K cân bằng
0 0 1 1
0 1 0 0 Capture, chế độ mỗi xung cạnh xuống
0 1 0 1 Capture, chế độ mỗi xung cạnh lên
0 1 1 0 Capture, chế độ 4 xung cạnh lên
0 1 1 1 Capture, chế độ mỗi 16 xung cạnh lên
1 0 0 0 Compare, CCP=cao khi ĐKiện cân bằng
1 0 0 1 Compare, CCP=thấp khi ĐKiện cân bằng
1 0 1 0 Compare, tạo ra Ngắt khi ĐK cân bằng
1 0 1 1 Compare, trigger special event
1 1 x x PWM mode
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
3. Các chế độ hoạt động
3.1Chế độ CAPTURE
- Hai thanh ghi CCPR1H : CCPR1L sẽ lưu lại giá trị
16bit của bộ đếm TIMER1 khi có 1 sự kiện xuất hiện
tại chân CCP1 (RC2) ở một trong 4 trường hợp sau:
+ Bất kỳ 1 xung cạnh xuống
+ Bất kỳ 1 xung cạnh lên
+ Cứ mỗi 4 xung cạnh lên
+ Cứ mỗi 16 xung cạnh lên
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
- Và khi 1 sự kiện được xác định tại chân CCP1 thì
cờ CCP1IF=1.
Lu ý:
+ Trong chế độ Capture, TIMER1 phải hoạt động ở
chế độ đếm đồng bộ. (Sync. Counter)
+ Khi 1 sự kiện xảy ra, TIMER1 không bị Reset.
+ Khi thay đổi chế độ hoạt động của module
Capture sẽ gây ra một Ngắt.
+ Chân CCP1 phải được mặc định phải là Input.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
I
Edge Detect
CCP1
TMR1H TMR1L
Prescaler
1, 4, 16
CCP1IF in PIR1
Single Buffered
Hình 1: Hoạt động chế độ Capture
CCPRxH CCPRxL
System Clock (Fosc)
P1M1 P1M0 CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
CCP1CON
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
a. Bộ Prescaler trong chế độ Capture
-Giá trị tỉ lệ được lựa chọn bởi 2 bit CCP1M1:CCP1M0
CCPxM3 CCPxM2 CCPxM1 CCPxM0 CCP Mode Selected
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0 Capture, chế độ mỗi xung cạnh xuống
0 1 0 1 Capture, chế độ mỗi xung cạnh lên
0 1 1 0 Capture, chế độ 4 xung cạnh lên
0 1 1 1 Capture, chế độ mỗi 16 xung cạnh lên
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 x x
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
- Khi Module CCP ngưng hoạt động, bộ Prescaler
sẽ bị Reset.
- Khi ta thay đổi giá trị tỉ lệ của Prescaler, sẽ xảy
ra một Ngắt. Do đó, nếu muốn thay đổi giá trị tỉ lệ hay
chế độ hoạt động thì ta phải cấm tất cả các Ngắt.
CLRF CCP1CON ; tắt Module CCP
MOVLW NEW_VALUE ; chuẩn bị giá trị nạp
MOVWF CCP1CON ;vào CCP1CON
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
b. Hoạt động Capture trong chế độ SLEEP
-Trong chế độ Ngủ, TIMER1 không tăng, nhưng bộ
định tỉ lệ vẫn tiếp tục đếm khi có sự kiện. Do đó, cờ
CCP1IF vẫn bằng 1 khi Prescaler bị tràn, tuy nhiên giá
trị của CCPR1H: CCPR1L sẽ không được cập nhập.
-Ngắt CCP làm PIC thoát khỏi chế độ Ngủ nhưng
giá trị của TIMER1 vẫn không được cập nhập. Điều
này cho phép sử dụng CCP như là Ngắt ngoài thứ 2.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
c. Chương trình khởi tạo Capture
CLRF CCP1CON ; Tắt Module CCP
CLRF TMR1H ; Xoaù byte cao Timer1
CLRF TMR1L ; Xoaù byte thaáp Timer1
CLRF INTCON ; Khoâng cho pheùp caùc ngaét vaø xoùa côø T0IF
BSF STATUS, RP0 ; Choïn Bank1
BSF TRISC, CCP1 ; Chaân CCP laø ngoõ vaøo
CLRF PIE1 ; Caám caùc ngaét ngoaïi vi
BCF STATUS, RP0 ; Choïn Bank0
CLRF PIR1 ; Xoùa caùc côø ngaét ngoaïi vi
MOVLW 0x06 ; Choïn cheá ñoä Capture, moãi 4 xung ngoõ vaøo
MOVWF CCP1CON
BSF T1CON, TMR1ON ; Timer1 baét ñaàu hoaït ñoäng
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
BTFSS PIR1, CCP1IF
GOTO Capture_Event
nội dung chương trình Capture được thực thi
BCF PIR1, CCP1IF ; xóa cờ CCP1IF
..
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
3.2 Chế độ COMPARE
-Trong chế độ So sánh, giá trị 16bit đặt trước
trong CCPR1 sẽ được so sánh với giá trị tức thời ở 2
thanh ghi TMR1L : TMR1H. Khi 2 giá trị bằng nhau,
1 trong 4 hoạt động sau được thực thi:
+ Chân CCP1 lên mức cao
+ Chân CCP1 xuống mức thấp
+ Tạo ra Ngắt CCP
+ Tạo ra một sự kiện đặc biệt
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
YES CCPx
CCPxIF in PIRx
OUTPUT
LOGIC
TMR1H TMR1L
COMPARATOR
TMR1H:TMR1L =
CCPRxH:CCPRxL?
NO
Hình 2: Hoạt động chế độ Capture
Special Event Trigger
CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
CCPRxH CCPRxL
CCP1CON
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
a. Hoạt động của chân CCP1
- Phải mặc định chân CCP1 trong chế độ Compare
là ngõ ra, bằng cách xóa bit trong thanh ghi TRIS.
- Việc xóa thanh ghi CCP1CON sẽ đưa chân CCP
xuống mức thấp.
- Trạng thái tại chân CCP1 phụ thuộc vào việc
chọn các bit CCP1M3 : CCP1M0.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
-Trạng thái ngõ ra CCP1:
CCPxM3 CCPxM2 CCPxM1 CCPxM0 CCP Mode Selected
0 0 0 0
0 0 0 1
0 0 1 0 Compare, đảo ngõ ra khi Đ.K cân bằng
1 0 0 0 Compare, CCP=cao khi ĐKiện cân bằng
1 0 0 1 Compare, CCP=thấp khi ĐKiện cân bằng
1 0 1 0 Compare, tạo ra Ngắt khi ĐK cân bằng
1 0 1 1 Compare, Trigger special event
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
b. Tín hiệu tạo ra sự kiện đặc biệt
- Tín hiệu xung này được tạo ra khi có sự cân bằng
giá trị nằm ở 2 thanh ghi TMR1 và CCPRx.
- Xung này sẽ reset cặp thanh ghi TMR1H:TMR1L.
Điều này cho phép thanh ghi 16bit CCPRx hoạt
động giống như thanh ghi chu kỳ cho TIMER1.
- Xung này không Set cờ tràn TMR1IF lên 1.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
Lu ý: Trong chế độ Compare, TIMER1 phải được
thiết lập ở chế độ định thời hay đếm đồng bộ.
- Ở chế độ Sự kiện đặc biệt, các hoạt động diễn ra:
Xóa b đm TIMER1 và bt đu chuyn đi ADC
nu module A/D đ c cho phép.
Module CCP s
không điu khin chân CCPx.
Xung kích s
đ c to ra ngay khi có điu
ki
n cân bng ti ngõ ra b Special Event Trigger.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
c. Hoạt động Compare trong chế độ SLEEP
- Trong chế độ ngủ, TIMER1 không tăng và trạng
thái của Module Compare cũng không thay đổi.
- Nếu trước khi vào chế độ ngủ, TIMER1 được ghi
một giá trị nào đó thì sau khi thoát chế độ này nó
sẽ tiếp tục đếm từ giá trị đó trở đi.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
c. Chương trình khởi tạo chế độ Compare
CLRF CCP1CON ; Taét Module CCP
CLRF TMR1H ; Xoùa byte cao Timer1
CLRF TMR1L ; Xoùa byte thaáp Timer1
CLRF INTCON ; Caám caùc ngaét vaø xoùa
cô T0IF.
BSF STATUS, RP0 ; Choïn Bank1
BCF TRISC, CCP1 ; Chaân CCP ñuôïc maëc
ñònh ôû ngoõ ra.
CLRF PIE1 ;Caám taát caû caùc ngaét ngoaïi vi
BCF STATUS, RP0 ;Choïn Bank0
CLRF PIR1 ;Xoùa caùc côø ngaét ngoaïi vi.
MOVLW 0x08 ; Neáu ñieàu kieän caân baèng xaûy
MOVWF CCP1CON ; ra, ngoõ ra set leân cao.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
BSF T1CON, TMR1ON ;Timer1 baét ñaàu hoaït ñoäng
COMPARE_Event
nội dung module Compare ..
BTFSS PIR1, CCP1IF
GOTO COMPARE_Event
BCF PIR1, CCP1IF ; Xóa cờ CCP
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
3.3 Chế độ PWM (Pules Width Modulation)
- Trong chế độ điều biến xung (PWM), chân CCP1
tạo ra tín hiệu điều biến có độ phân giải 10 bit.
- Tín hiệu điều biến có Chu kỳ, độ rộng xung và hệ
số D (Duty Cycle – chu kỳ trách nhiệm) thay đổi
được.
Lu ý: Chân CCP1 phải mặc định là ngõ ra. Việc xóa
thanh ghi CCP1CON sẽ đưa chân này xuống mức
thấp.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
CCPR1H LATCH
R10
10
10
DUTY CYCLE VALUE
TMR2 = CCPR1H CCP1 Output Pin
Period 1
Start
Period 2
CCP1
pin
PR2
Latch
S
8
8
TMR2 reset to 0’s 0
TMR2 = PR2
Hình 3: Hoạt động chế độ PWM
CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
CCPxCON
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
CCP
1 pin
CCPR1H LATCH
Latch
R
S
TMR2 reset to 0
DUTY CYCLE VALUE
TMR2 = CCPR1H
0
TMR2 = PR2
Hoạt động điều biến xung
- Khi TMR2 = PR2 thì:
+ TMR2 bị xóa
+ Chân CCP1 = 1 (Start)
+ Giá trị Duty Cycle trong thanh
PR2
CCP1 Output Pin
TMR2=PR2+1
Start
TMR2=Duty Cycle
ghi CCPR1L được chốt vào
thanh ghi CCPR1H.
- 8bit CCPR1H + 2bit trong bộ Chốt
tạo ra giá trị 10bit.
- 8bit CCPR1L + 2bit CCP1X-CCP1Y
(nằm trong CCP1CON) tạo ra giá trị
10bit.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
- Khi giá trị thanh ghi TMR2 = 10bit Duty Cycle
(chứa trong CCPR1H), chân CCP1 = 0.
+ 8bit TMR2 + 2bit bởi nguồn xung dao động bên
trong tạo thành giá trị 10bit (nếu tỉ lệ Prescaler 1:1)
+ 8bit TMR2 + 2bit từ bộ Prescaler tạo thành giá trị
10bit (nếu tỉ lệ Prescaler khác 1:1)
CCP1 Output Pin
TMR2=PR2+1
Start
TMR2=Duty Cycle
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
a. Chu kỳ
- Chu kỳ tín hiệu PWM được qui định bởi thanh ghi
PR2, theo công thức sau:
TPWM = [ PR2 + 1] x 4 xTOSC x (Prescaler Timer2)
fPWM = 1/TPWM
b. Chu kỳ trách nhiệm D (Duty Cycle)
D = [ DCxB9:DCxB0 ] x TOSC x (Prescaler Timer2)
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
c. Khởi tạo chế độ PWM
- Thiết lập Chu kỳ PWM bởi thanh ghi PR2.
- Thiết lập Duty Cycle bởi các 10bit DCxB9:DCxB0.
- Định chân CCPx là ngõ ra bởi thanh ghi TRISC.
- Đinh giá trị tỉ lệ bộ PreScaler và cho Timer2 hoạt
động bằng thanh ghi T2CON.
- Cấu hình Module CCP hoạt động ở chế độ PWM.
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
CLRF CCP1CON ; Taét Module CCP
CLRF TMR2 ; Xoùa Timer2
MOVLW 0x7F ;Ñònh chu kyø hoaït ñoäng (127)
MOVWF PR2 ;
MOVLW 0x1F ;
MOVWF CCPR1L ; Duty Cycle(31)= 25% cuûa chu kỳ
PWM
CLRF INTCON ; Caám taât caû caùc ngaét
BSF STATUS, RP0 ; Choïn Bank1
BCF TRISC, PWM1 ; Cho chaân CCPx laø Output
CLRF PIE1 ; Caám taát caû caùc ngaét ngoaïi vi
BCF STATUS, RP0 ; Choïn Bank0
CLRF PIR1 ; Xoùa taát caû caùc côø ngaét ngoaïi vi
CHƯƠNG 6: CAPTURE/COMPARE/PWM MODULE
MOVLW 0x2C ;Cheá ñoä hoaït ñoäng PWM, 2 bit
thấp cuûa Duty cycle CCP1X:CCP1Y = 10
MOVWF CCP1CON
BSF T2CON, TMR2ON ; Timer2 baét ñaàu taêng
; Ngaét CCP1 khoâng ñöôïc cho pheùp
; Chaïy voøng laäp ñeå ñôïi côø traøn.
PWM_Period_Match
BTFSS PIR1, TMR2IF
GOTO PWM_Period_Match
; Caäp nhaät chu kyø vaø duty cycle cuûa PWM
BCF PIR1, TMR2IF
Các file đính kèm theo tài liệu này:
- chuong_6_pic_ccp_2361.pdf