Giáo trình vi điều khiển pic16f và ngôn ngữ lập trình hi tech c phần 2

84 3 0
Giáo trình vi điều khiển pic16f và ngôn ngữ lập trình hi tech c phần 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương V KHÓI CCP (CAPTURE-COMPARE-PWM) Sau học xong chương này, sinh viên đạt khả sau: a Giải thích nguyên tắc hoạt động khởi tạo chế độ Capture b Giải thích nguyên tắc hoạt động khởi tạo chế độ Compare le c Giải thích nguyên tắc hoạt động khởi tạo chế độ PWM Phân biệt khác giống hai khối CCP1 CCP2 e Thiết lập tần số PWM điều chỉnh độ rộng xung PWM theo yêu câu f Lập trình khối PWM H bán câu H hoạt động chế độ điều khiển toàn cầu 5.1 DỤNG CỤ THÍ NGHIỆM — Kít thí nghiệm + cáp USB — Động Dev — Oscillocope — May tinh — Nguồn 12V/1A 5.2 CO SO LY THUYET Các chân sử dụng cho khối CCP: Vpp Vss RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/P1A/CCP1 RC3/SCK/SCL RD0 RD1 ~———~ ———~ =——~+ ———~ ~———~ ———~ ———~ RD7/P1D RD6/P1C RD5/P1B RD4 RC7/RXIDT RC6/TX/CK RC5/SDO RC4/SDI/SDA RD3 RD2 Hình 5.1: Các chân sử dụng khối CCP 79 Để sử dụng khối CCP cần phải biết khởi tạo sử dụng thành thạo timer 0,1,2 khơi CCP khơng thê hoạt động ứng dụng mà phải sử dụng kết hợp với timer CCP Mode Timer Resource Capture Timer1 Compare Timer1 PWM Timer2 5.2.1 Thanh ghi khởi tạo khối CCP1 Khối CCP1 cịn tích hợp thêm chân mang kí hiệu: P1A, PIB, PIC, P1D hỗ trợ cho việc điều khiển cầu H Ve FET Oriver PIA nh ng i Driver in PIB FET FET Dnver PIC Driver el P10 [ Hinh 5.2: Cac chan CCP1 tro diéu khién céu H REGISTER 11-1: RAN-0 bit PM | CCP1CON: RW-0 PÍMO | ENHANCED CCP1 RAN-0 DCIBI | RAV-0 DCIBO CONTROL REGISTER RW-0 | CCPIM3 | RW-0" CCP1M2 | RIW-0 CCPIMI | RAN-0 CCPIMO bit PIM: Bit khởi tạo ngõ PWM Nếu khối CCPI khởi tạo chế độ capture compare chân có kí hiệu PIA chân hoạt động chê độ capture Compare, cịn chân có kí hiệu PIB, PIC, PID chân khơng liên quan đên khơi CCPI, có thê gán cho chúng chức I/O thông thường Nếu khối CCP1 khởi tạo chế độ PWM bit PIM có trạng thái điêu khiên câu H sau: — 00: Ngo chức nang I/O 80 don, PIA tao xung, PIB, PIC, PID hoạt động với : — 01: Chế độ Full — Bridge thuận, PID PIB, PIC không tác động — 10: Chế độ hafl - Bridge, động với chức IL/O PIA,P1B tạo xung, PIA tạo xung, PIC, tác động, PID hoạt — 11: Chế độ Full — Bridge nghịch, PIB tạo xung, PIC tác động, PIA, PID không tác động DCIB: Hai bit mang trọng số nhỏ chế độ hoạt động PWMIằbit Ở chế độ Capture Compare khơng cần quan tâm đến hai bit CCP1M: Bit lựa chọn chế độ họat động khối CCP] ~ 0000: Capture/Compare/PWM off(reset khối CCP1) ~ 0001: Không sử dụng — 0010: Chế độ Compare, đảo ngõ có kiện Compare CCPIIF = 1) (bit — 0011: Không sử dụng — 0100: Chế độ Capture, kiện Capture có Ï xung cạnh xng xảy chân CCPI — 0101: Chế độ Capture, kiện Capture có ] xung cạnh lên xảy chân CCPI — 0110: Chế độ Capture, kiện Capture xảy chân CCPI — 0111: Chế độ Capture, kiện Capture có 16 xung cạnh lên xảy chân CCPI có xung cạnh lên — 1000: Chế độ Compare, ngõ có kiện Compare (bít CCPIIF= 1) — 1001: Chế độ Compare, (bít CCPIIF = 1) ngõ có kiện Compare — 1010: Chế độ Compare, tạo kiện ngắt nội (bit CCPIIF = I, chân CCPI không sử dụng) — 1011: Chế CCPI resets TMRI độ Compare, or TMR2) tạo kiện trigger (CCPIIF =l; ~ 1100: Chế độ PWM, PIA, PIC tác động — mức cao, PIB, PID tác động — mức cao 81 — 1101: Chế độ PWM, P1A, PIC tác động - mức cao, P1B, P1D tác động — mức thâp — 1110: Chế độ PWM, P1A, PIC tác động — mức thấp, PIB, P1D tác động — mức cao ~ 1111: Chế độ PWM, P1A, PIC tác động — mức thấp, P1B, PID tac động — mức thâp 5.2.2 Thanh ghi khởi tạo khối CCP2 _ Khác với khối CCP1, khối CCP2 khơng có chức hỗ trợ điều khiến câu H, chê độ PWM, khôi CCP2 xung PWM 10 bit chân CCP2 REGISTER U-0 — 11-2: [_ CCP2CON: U-0 — | có chức tạo CCP2 CONTROL REGISTER RW-0 D€2mi |] RW-0 DC280 RWV-O | CCP2M3 | R/W-0 CCP2M2 RAW-0 | CCF2MI (bit Z RAV-0 | CCP2MU bịt DC2B: Hai bit mang số nhỏ chế độ hoạt động PWM-10bit, chê độ Capture Compare khơng cần quan tâm đến hai bit CCP2M: Bit luc chon ché độ họa động khối CCP1 — 0000: Capture/Compare/PWM off(reset khối CCP]) — 0001: Không sử dụng — 0010: Không sử dụng — 0011: Không sử dụng — 0100: Chế độ Capture, kiện Capture xảy chân CCPI1 — 0101: Chế độ Capture, kiện Capture xay chan CCP1 ~ 0110: Chế độ Capture, kiện Capture xảy chân CCPI — 0111: Chế độ Capture, kiện Capture xảy chân CCP1 có ] xung cạnh xng cé xung canh có xung cạnh lên có 16 xung cạnh lên — 1000: Chế độ Compare, ngõ có kiện Compare (bit CCPIIF = 1) ~ 1001: Chế độ Compare, (bit CCPIIF = 1) j ngõ có kiện Compare — 1010: Chế độ Compare, tạo kiện ngắt nội (bit CCPIIF = 1, chân CCPI không sử dụng) 82 Chế ~ 1011: CCP1 resets TMR1 Compare, độ or TMR2) (CCPIIF tao su kién trigger =1; — 11XX:Ché độ PWM 5.2.3 Capture Set Flag bit CCPxIF Prescaler + 1,4, 16 Độ (PIRx register) CCPRxH | CCPRxL [ ccrRmi | ccpmx | CCPx and Capture Edge Detect Enable : TMR1H TMR1L CCPxCON System Clock (Fosc) Hình 5.3: Sơ đô khối chế độ capture 5.2.3.1 Nguyên tắc hoạt động chế độ capture Khi có kiện (cạnh lên, cạnh xuống, cạnh lên 16 cạnh lên) chân CCPx (có thể CCP1 hay CCP2 tùy vào ta sử dụng khối CCP1 hay CCP2) giá trị ghi đếm timer 14 TMR1H va TMRIL sé cập nhật qua hai ghi CCPRxH CCPRxL khối CCPx đồng thời xảy ngắt nội việc cho phép cờ ngắt CCPRxIF = 1.(x=0,1) 5.2.3.2 Các bước khởi tạo chế độ capture — Khởi tạo chân CCPx ngõ vào: TRISCx=1;RCx=1; — Khởi tạo timer hoạt động — Khởi tạo khối CCPx CCPxCON = ; CCPRxH=CCPRxL=0; hoạt động với chế độ capture: //Chọn chế độ capture //reset hai ghi khối CCPx — Khởi tạo ngắt (nếu có sử dụng): CCPxIE=1; CCPxIF=0; //Cho phép ngắt CCP //Reset cờ ngắt PEIEFI: //Cho phép ngắt ngoại vi GIE=1; //Cho phép ngắt toàn cục 83 5.2.4 Compare CCPxCON Mode Select cn Pin Set CCPxIF x Q sH RL (PIRX) Interrupt Fiag CCPRxH | CCPRxL V ual Logic [ TwRiH| TRIS TMR1L | TL] Output Enable Special Event Trigger Hình 5.4: Sơ khối chế độ compare 5.2.4.1 Nguyên tắt hoạt động chế độ compare Khi hai ghi đếm TMRIH TMRIL timer đếm đến giá trị hai ghi CCPRxH kiện sau: CCPRxL xảy — Đảo trạng thái ngõ chân CCPx — Tạo tín hiệu chân CCPx lên — Xóa tín hiệu chân CCPx xuống ~ Tạo ngắt.(CCPxIF =1, chân CCPx không sử dụng) — Tạo kiện trigger.(CCPIIF=1,CCPI reset timer timer 2, CCP2IF=1,CCP2 reset timer va ADC bat dau chuyên đôi.nêu khôi ADC cho phép chuyên đôi, chân CCP2 không sử dụng) 5.2.4.2 Các bước khởi tạo chế độ compare: — Khởi tạo chân CCPx ngõ ra: TRISCxE=0; — Khởi tạo timer hoạt động — Khởi tạo khối CCPx — CCPxCON = ; hoạt động với chế độ compare: //Chọn chế độ compare — CCPRxH= ;CCPRxL= ; //Chọn giá trị đặt — Khởi tạo ngắt (nếu có sử dụng): 84 — CCPxIE=1; //Cho phép ngắt CCP — CCPxIF=0; //Reset cờ ngắt — PEIE=l; //Cho phép ngắt ngoại vi — GIE=1; 5.2.5 PWM //Cho phép ngắt tồn cục (Pulse-Width Modulated) Nói đến PWM ta phải nói đến hai đặc tính là: tần số (do timer tạo ra) độ rộng xung (do ghi CCPRxL:C CPxCON tạo ra) Sơ tạo xung PWM kết hợp khối CCPx với timer 2: Period ¬ : Pulse Width is) : =—TMR2 Sợ = PR2 'st—TMR2 = CCPRxL:CCPxCON Ằ—TMR2 = Hình 5.5: Sơ đồ điều chế PIWM 5.2.5.1 Nguyên tắt hoạt động chế độ PWM Thanh ghi đếm timer TMR2 CCPRxL:CCPxCON khối CCPx đếm đến giá trị ghi trạng thái logic chân CCPx bị đảo, giá trị ghi TMR2 đến giá trị PR2 hồn tắt chu kỳ tạo xung PWM Chú ý: Từ sơ đồ ta thấy để tạo xung PWM giá trị CCPRxL::CCPxCON phải nhỏ giá trị ghi PR2, muốn thay đổi độ rộng xung ta cần thay đổi giá trị ghi CCPRxL::CCPxCON lập trình Cơng thức tính chu kỳ PWM: Chu y: Tosc = 1/Fosc 5.2.5.2 Cac buée khởi tạo chức PWM — Bước 1: Cho phép chân PWM ngõ vào: TRISCx=1; /x=1,2 — Bước 2: Khởi tạo tần số PWM PR2 timer 2: việc định giá trị ghi PR2= ;//Tính tốn từ cơng thức chu kỳ PWM 85 ~ Bước 3: Đặt khối CCP hoạt động chế độ PWM /!x=0;1 CCPxCON=0bxxxx1 1xx; — Bước 4: Đặt độ rộng xung khối PWM việc đặt giá trị ƠN cho ghi CCPRxL bit DCxB ghi CCPxC Có thể điều chỉnh giá trị vi CCPRxL= i | điểu khiển hoạt động để thay đôi độ rộng xung cân thiết DCxBI= ; DCxB0= ; //Néu sir dung PWM bit thi bỏ qua //Nếu sử dụng PWM bit bỏ qua i ~ Bước 5: Khởi tạo cho phép timer hoạt động: TMR2IF=0; //Xóa cờ ngất TMR2IE ghi PIRI //Chọn tỉ lệ chia timer 2: //Chọn tỉ lệ chia Prescaler T2CKPSI= ; #2GKPS0E //Chon tỉ lệ chia Postscaler TOUTPS3= ; TOUTPS2= ; TOUTPS1= ; TOUTPS0= ; //Cho phép timer hoạt động TMR20N=1; _ =Bước 6: Cho phép ngõ PWM sau chu kỳ PWM /⁄ Chờ cho đên timer tran (bít while(TMR2IF); bắt đâu: TMR2IE ghi PIR1 bật lên 1) x= 1, TRISCx = 0; 5.3 BÀI TẬP THỰC HANH Bài 1: Viết chương trình tạo xung PWM có tần số 20KHz hai chân: CCPI(RC2) CCP2(RCI) CCP? 14 80% xung +» Sơ đồ phần cứng: "Z““7 g T1OSC2 CCP2 SRE a J2 86 với độ rộng xung CCP1 TRIG 44 JS CCP1 SCRECE ROO 18 19 ä aáTCKI ä1OSO/T RC0T RC1/T1OSICCP2 RC2/P1A/CCP1 RC3/SCK/SCL RDO LCp_RS&—L| R01 1a 50% xung, * Bước 1: Tạo project với tên 04 _01_ MSSV * Bước 2: Nhập chương trình sau vào máy tính hoàn thành vào dấu #include CONFIG(INTIO& WDTDIS &MCLREN &BORDIS &LVPDIS); void main() { //Khéi tạo tần số 20Khz PWM (timer 2) PR2= : //Chon tan sé 20KHz T2CKPS1=T2CKPS0= ; //B6 chia Prescales 1:1 //B6 chia Postcales1:1 TOUTPS3=TOUTPS2=TOUTPS1=TOUTPS0= //Khéi tao khéi CCP1 TRISC2= : //Disable ngõ chân CCP1 CCPICON=0b00001100; /(———1l-—-—— ) €CGPRIHE=-: : ⁄⁄Tạo PWM 50% xung ỡ chân CCP1( -2 ) TMRIIF= : // Khởi tạo khối CCP2 /óa cờ ngắt khối CCP1 TRIS CIS sa : // Disable ngé cua chan CCP] CCP2CON=0b00001100;/ Khởi tạo module CCP2 chế độ PWM CCER2I= 1⁄/Tạo xung PWM 80% & chan CCP2( -3 ) TMR2IF= : Xóa cờ ngắt khối CCP2 /Cho phép timer hoạt động bắt đầu tao xung PWM TMR2ON =e ; “Cho phép timer hoại động TRISC2 = ; //Cho phép chan CCP1 la ngé TRISC1 canoer /Cho phép chân CCP2 ngỗ while(1); } * Bước 3: Nạp chương trình vào kit thí nghiệm, dùng oscillocope đo tín hiệu hai xung chân CCPI CCP2 87 * Bước 4: Thay đổi dòng ( - ) thành đoạn code sau: CCP1CON=0b00001111; Biên dịch chương trình nạp vào kít, dùng oscillocope đo ngõ PWM chân CCPI, quan sát xung tạo ra, nhận xét khác xung trước sau thay đổi code, giải thích khác * Bước 5: Tính toán giá trị ghi CCPRIL cho CCPI tạo PWM 90% Tính tốn giá trị ghi CCPR2L cho CCP2 tao PWM 10% Thay vào ( - -=-=== ) ( - )„ biên dịch chương trình, nạp xng kít thí nghiệm, sử dụng oscillocope đo ngõ xung hoàn thành vào bảng sau: PWM 90% PWM 10% CCPRIL CCPR2L Bai 2: Viét chương chuyên dụng L298 04 _02_ MSSV) trình điều khién tốc độ động sử dụng Ic theo yêu cầu sau: (Tạo project với tên — Nhắn RB0 tốc độ động tăng dần (mỗi lần nhấn tăng rộng xung) 10% độ — Nhắn RBI tốc độ động giảm dần (mỗi lần nhắn giảm 10% độ rộng xung) ~ Nhắn RB2 động đảo chiều quay 88 switch() { ` case hang 1: cau lénh I: break; case 2: câu lệnh 5; break; default: câu lệnh n; } — Nếu biểu thức thực = cấu lệnh ï — Nếu biểu thức thực = câu lệnh — Nếu biểu thức \= 1, câu lệnh n thực Vòng lặp: while: - x lénh 1; lénh 2; lệnh n, } 148 while() “ — Nếu biểu thức điều kiện thì: lệnh 1, lệnh lệnh n thực hiện, sau quay lại kiêm tra biêu thức điêu kiện — Nếu biểu thức điều kiện sai lệnh 1, lệnh n khơng thực hiện, ngồi thực dịng lệnh lệnh while Vi du: char a=3; while(a

Ngày đăng: 27/07/2023, 16:07