Chức năng Input capture

Một phần của tài liệu Giáo trình vi điều khiển PIC16F và ngôn ngữ lập trình HITECH C, Giáo trình dùng cho sinh viên ngành Cơ điện tử Nguyễn Trường Thịnh, Nguyễn Tấn Nó (Trang 109 - 114)

Input capture có những chức năng cơ bản sau:

 Có 3 kênh capture hoạt động độc lập với độ phân giải là 16bit/kênh.

 Mỗi kênh có thể ứng dụng đo chu kỳ, độ rộng xung, tạo trigger từ cạnh xung vào capture.

 Mỗi ngõ vào tạo sự kiện capture, có bộ chia điều chỉnh thời gian.

 Ở kênh capture 1(IC1) có thể tạo ra sự kiện trigger đặc biệt, có thể ứng dụng trong chế độ đo vận tốc.

 Mỗi chân Input Capture đều có hỗ trợ bộ lọc nhiễu tần số cao.

Hình 7.3: Sơ đồ Input capture của CAP2,CAP3

Thanh ghi điều khiển chức năng Input capture:

Trong đó:

CAPxREN: Bit cho phép reset thời gian

0: Không cho phép. 1: Cho phép

CAPxM3: CAPxM0: Bit lựa chọn chế độ Input Capture

1111: Chế độ trigger đặc biệt, xảy ra ở cạnh lên của chân CAP1 1110: Chế độ trigger đặc biệt, xảy ra ở cạnh xuống của chân CAP1 1000: Capture xảy ra khi có sự thay đổi trạng thái tín hiệu.

0111: Chế độ đo độ rộng xung, từ cạnh lên tới cạnh xuống. 0110: Chế độ đo độ rộng xung, từ cạnh xuống tới cạnh lên. 0101: Chế độ đo tần số, mỗi cạnh lên.

0100: Chế độ capture, mỗi 16 cạnh lên. 0011: Chế độ capture, mỗi 4 cạnh lên. 0010: Chế độ capture, mỗi cạnh lên.

0001: Chế độ capture, mỗi cạnh xuống. 0000: Chế độ capture không hoạt động.

Từ thanh ghi khởi tạo chế độ Input capture, ta có thể phân khối này bao gồm những tính năng cơ bản như sau:

Chế độ Input capture:

Giá trị của thanh ghi CAPxBUF(x=1,2,3) sẽ bằng giá trị của thanh ghi đếm của timer 5 là TMR5 (TMR5H*256+TMR5L), ở tại thời điểm xảy ra sự kiện (sự kiện này có thể là một cạnh lên, một cạnh xuống, 4 cạnh lên, hay 16 cạnh lên) ở chân CAPx(x=1,2,3), khi xảy ra sự kiện capture thì giá trị của thanh ghi đếm TMR5 bị reset về 0 hay tiếp tục đếm tiếp là do việc khởi tạo bit CAPxREN.

Hình 7.4: Chế độ Input capture ở mỗi cạnh lên

Chế độ đo chu kỳ xung:

Trong chế độ đo chu kỳ xung, giá trị của thanh ghi TMR5 sẽ được chốt tới thanh ghi CAPxBUF trên mỗi cạnh lên của chân CAPx, và TMR5 sẽ bị reset về 000h (đặt CAPxREN=1) ở chu kỳ tiếp theo của xung clock CPU (Tcy).

Chế độ đo độ rộng xung:

Trong chế độ đo độ rộng xung, có thể được khởi tạo bởi hai chế độ là: chế độ đo độ rộng xung từ cạnh lên tới cạnh xuống, và từ cạnh xuống tới cạnh lên. Ví dụ trong chế độ đo độ rộng xung từ cạnh xuống tới cạnh lên thì khi ở thời điểm cạnh xuống giá trị TMR5 sẽ bị reset, khi có cạnh lên thì thanh ghi CAPxBUF sẽ bằng giá trị TMR5.

Hình 7.4: Chế độ đo độ rộng xung từ cạnh lên tới cạnh xuống

Ví dụ: Viết chương trình xác định tần số của xung kết nối vào chân CAP1, và hiển thị lên terminal (baud rate 9600), biết vi điều khiển họat động thạch anh nội với tần số Fosc = 8Mhz.

Hình 7.5: Sơ đồ phần cứng kết nối với vi điều khiển.

Tính toán các thông số cần thiết:

Tính toán baud rate

Vi điều khiển hoạt động với tần số 8Mhz, cùng với khởi tạo BRG16=1, BRGH=0, do đó muốn tạo baud rate 9600, ta có công thức sau: 8.000.000 9600 16( 1) 16( 1) 51, 083333 51 0; 51; Fosc Baudrate n n n SPBRGH SPBRGL           

CAP1 TMR5=0 CAPxBUF=TMR5=T t  T

Hình 7.6: Nguyên lý hoạt động chế độ đo tần số

Do đó tần số cần đo là: 1 1 * * 4* 8.000.000 ( 1:1) * 4*1 Fosc f

T CAPxBUF t CAPxBUF prescaler

f prescaler CAPxBUF      . Code chương trình: #include<htc.h> #include<stdio.h> __CONFIG(1,FCMEN&RCIO); __CONFIG(2,BORDIS&WDTDIS); __CONFIG(3,XCLKRC3&MCLREN); __CONFIG(4,LVPEN); #define _XTAL_FREQ 8000000 void main() { IRCF2=IRCF1=IRCF0=1; //Tần số 8Mhz

ANSEL0=ANSEL1=0; //Tắt chế độ xử lý tín hiệu tương tự

TMR5CS=0; //Nguồn Clock cho timer 5 là Fosc(chế độ timer)

T5PS1=T5PS0=0; //Bộ chia prescaler 1:1 T5SYNC=1; //Không qua khối đồng bộ

PR5H=255;PR5L=255; //Giá trị so sánh timer 5 là 65535

TMR5ON=1; //Cho phép timer 5 hoạt động

//Khởi tạo giao tiếp truyền nhận UART

TXEN=1;SYNC=0;SPEN=1; BRG16=1;BRGH=0;

SPBRGH=0;SPBRG=51;

//Khởi tạo chế độ đo độ rộng xung ở chân CAP1

CAP1M3=CAP1M1=0;CAP1M2=CAP1M0=1; CAP1REN=1;

while(1) {

//Tần số f = 8.000.000/(CAPxBUF*4*1)

//CAPxBUF(16 bit) = CAP1BUFH*256+CAP1BUFL

printf("\f Tan so la: %u",

2000000/(CAP1BUFH*256+CAP1BUFL)); __delay_ms(100); } } void putch(char c) { while(!TXIF); TXREG=c; }

Biên dịch chương trình, chạy phần mềm mô phỏng Protues, lần lượt thay đổi tần số ở chân CAP1 từ 1Khz đến 60Khz, và xem kết quả mô phỏng.

Một phần của tài liệu Giáo trình vi điều khiển PIC16F và ngôn ngữ lập trình HITECH C, Giáo trình dùng cho sinh viên ngành Cơ điện tử Nguyễn Trường Thịnh, Nguyễn Tấn Nó (Trang 109 - 114)

Tải bản đầy đủ (PDF)

(165 trang)