Tải bản đầy đủ (.docx) (31 trang)

Đồ Án Mạch Đo Nhịp Tim ( PIC16F877A)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.66 MB, 31 trang )

TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT

BỘ MÔN KỸ THUẬT ĐIỆN - ĐIỆN TỬ
====o0o====

BÁO CÁO BÀI TẬP
DỤNG CỤ VÀ THIẾT BỊ ĐO LƯỜNG ĐIỆN TỬ
ĐỀ TÀI:

THIẾT KẾ MẠCH ĐO NHỊP TIM
GVHD: ThS. Tống Ngọc Quang
Người thực hiện: Hoàng Văn Nhật (Trưởng nhóm)
Lê Thị Hương
Đặng Văn Trung

Hà Nội, 10/2016


MẠCH ĐO NHỊP TIM October 17, 2016

Phần 1: Lý Thuyết
Chương 1: Tìm hiểu về nhịp tim và Phương pháp đo nhịp tim
1.1 Giới thiệu chương:
Chương này sẽ tìm hiểu về nhịp tim và đo nhịp
1.2 Tìm hiểu về nhịp tim:
- Khái niệm: Nhịp tim là số nhịp đập của tim trên một đơn vị thời gian, thường
được tính và nhịp/phút. Nhịp tim có thể thay đổi theo nhu cầu hấp thụ Oxi và bài
tiết CO2 của cơ thể, ví dụ như lúc tập thể dục và lúc ngủ.
- Bảng thông số đánh giá nhịp tim ở trạng thái nghỉ ngơi:

Bảng 1.1 [1]: Thông số đánh giá nhịp tim người ở trạng thái nghỉ ngơi


1.3 Đo nhịp tim bằng phương pháp hấp thụ quang học:
1.3.1 Cơ sở lý thuyết:
- Khi tim đập, máu sẽ được dồn đi khắp cơ thể qua động mạch, tạo ra sự thay đổi về
áp suất trên thành động mạch và lượng máu chảy qua động mạch. Vì vậy, ta có thể
đo nhịp tim bằng cách đo những sự thay đổi đó.

ĐĐTAK58-NHOM 1

Page 2


MẠCH ĐO NHỊP TIM October 17, 2016

Hình 1.1: Dạng tín hiệu nhịp tim
- Khi lượng máu trong thành động mạch thay đổi sẽ làm thay đổi mức độ hấp thụ
ánh sáng của động mạch, do đó khi một tia sáng được truyền qua động mạch thì
cường độ ánh sáng sau khi truyền qua sẽ biến thiên đồng bộ với nhịp tim.
- Khi tim giãn ra, lượng máu qua động mạch nhỏ nên hấp thụ ít ánh sáng, ánh sáng
sau khi truyền qua động mạch có cường độ lớn, ngược lại khi tim co vào, lượng
máu qua động mạch lớn hơn, ánh sáng sau khi truyền qua động mạch sẽ có cường
độ nhỏ hơn.

Hình 1.2: Sự hấp thụ ánh sáng của động mạch khi truyền qua ngón tay.
- Ánh sáng sau khi truyền qua ngón tay gồm 2 thành phần AC và DC:

ĐĐTAK58-NHOM 1

Page 3



MẠCH ĐO NHỊP TIM October 17, 2016

+ Thành phần DC đặc trưng cho cường độ ánh sáng cố định truyền qua mô, xương
và tĩnh mạch.
+ Thành phần AC đặc trưng cho cường độ ánh sáng thay đổi khi lượng máu thay
đổi truyền qua động mạch, tần số của tín hiệu này đồng bộ với tần số nhịp tim.
=>Nếu ta lọc bỏ thành phần DC sẽ thu được tín hiệu AC đồng bộ với tín hiệu nhịp
tim.
1.3.2 Vị trí đặt cảm biến:
* Yêu cầu:
- Phải đặt nguồn phát và nguồn thu để thu được kết quả tốt nhất.
- Vị trí dễ dàng đặt cảm biến, khoảng cách thu phát không quá gần cũng không quá
xa.
=> Chọn ngón tay là nơi đặt cảm biến.

Hình 1.3: Vị trí đặt cảm biến
1.4 Kết luận chương:
- Từ việc tìm hiểu về nhịp tim và phương pháp đo nhịp tim bằng hấp thụ quang
học, ta có thể thiết kế cảm biến ánh sáng để phục vụ cho việc đo nhịp tim.

ĐĐTAK58-NHOM 1

Page 4


MẠCH ĐO NHỊP TIM October 17, 2016

Chương 2:Sơ Đồ Khối
2.1 Giới thiệu chương
Ở chương trước chúng ta đã được tìm hiểu về nhịp tim con người và phương pháp

đo nhịp tim bằng phương pháp quang học. Chương này chúng ta sẽ đi xây dựng sơ
đồ khối và chức năng tổng quan của từng khối.
2.2 Sơ đồ khối và chức năng các khối
2.2.1 Sơ đồ khối tổng quan:

Tín hiệu vào

Cảm biến

Lọc và khuếch đại
Nguồn 5V, 500mA
Vi điểu khiển

Hiển thị LCD

2.2.2 Chức năng các khối:
ĐĐTAK58-NHOM 1

Page 5


MẠCH ĐO NHỊP TIM October 17, 2016

- Khối cảm biến nhịp tim: cảm biến nhịp đập của tim.
- Khối lọc và khuếch đại: Lọc tín hiệu DC và khuếch đại tín hiệu để đưa vào vi điều
khiển xử lý
- Khối xử lý trung tâm: dùng để xử lý các tín hiệu vào và xuất tín hiệu ra,điều khiển
mọi hoạt động của hệ thống và chuyển đôi ADC.
- Khối hiển thị: hiển thị kết quả.
- Khối nguồn : cung cấp nguồn cho các khối khác.

2.3 Chọn linh kiện sử dụng cho các khối:
2.3.1 Chọn cảm biến:
Dùng cảm biến nhịp tim:

Mặt trước cảm biến

Mặt sau cảm biến

Nhìn tổng thể cảm biến

Cảm biến hoạt động dựa trên một sensor quang đo nhịp tim cùng với bộ
khuếch đại tín hiệu và lọc nhiễu.

Thông số kỹ thuật:
- Nguồn: 3 – 5V
- Dòng tiêu thụ: < 4mA
- Ngõ ra: Analog
- Độ dài dây: 61 cm (24 inch)
- Đường kính cảm biến: 1.6 cm (0.625 inch)
ĐĐTAK58-NHOM 1

Page 6


MẠCH ĐO NHỊP TIM October 17, 2016

2.3.2 Chọn vi điều khiển cho khối xử lý trung tâm:
*Chọn vi xử lý PIC16F877A:
- Là loại vi xử lý khá phổ biến
- Đã được học về lý thuyết và thực hành ở trường

- Giá thành phù hợp.

Hình 2.1: Pic 16F877A
*Giới thiệu tổng quan về vi xử lý PIC16F877A:
PIC 16F877A là một dòng PIC phổ biến(đủ mạnh về tính năng, 40 chân, bộ nhớ đủ
cho hầu hết các ứng dụng thông thường). Cấu trúc tổng quát của PIC 16F877A như
sau:
- 8 K Flash ROM.
- 368x8 bytes RAM.
- 256x8 bytes EEPROM.
- 5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập.
- 2 bộ định thời 8 bits (Timer 0 và Timer 2).
- Một bộ định thời 16 bits (Timer 1) có thể hoạt động trong chế độ tiết kiệm năng
lượng (SLEEP MODE) với nguồn xung Clock ngoài.
- 2 bô CCP( Capture / Compare/ PWM).
- 1 bộ biến đổi AD 10 bits, 8 ngõ vào.
ĐĐTAK58-NHOM 1

Page 7


MẠCH ĐO NHỊP TIM October 17, 2016

- 2 bộ so sánh tương tự (Compartor).
- 1 bộ định thời giám sát (WatchDog Timer).
- Một cổng song song 8 bits với các tín hiệu điều khiển.
- Một cổng nối tiếp.
- 15 nguồn ngắt.
- Có chế độ tiết kiệm năng lượng.
- Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial Programming)

- Được chế tạo bằng công nghệ CMOS
- 35 tập lệnh có độ dài 14 bits.
- Tần số hoạt động tối đa 20MHz.
2.3.3 Chọn LCD hiển thị kế quả:
*Chọn LCD loại 16x2
Đặc điểm:
- Là loại LCD phổ biến
- Dễ sử dụng.
- Giá thành phù hợp.
*Giới thiệu tổng quan về LCD 16x2:
- Chân cấp nguồn Vcc-GND

2.7V đến 5.5V

- Điện áp vào mức cao VIH

2.2V đến Vcc

- Điện áp vào mức thấp VIL

-0.3V đến 0.6V

- Điện áp ra mức cao (DB0-DB7)

Min 2.4V

- Điện áp ra mức thấp (DB0-DB7)

Max 0.4V (khi IOL = 1.2mA)


- Dòng điện ngõ vào ILI

-1uA đến 1uA

- Dòng điện cấp nguồn ICC

350uA(typ.) đến 600uA

- Tần số dao động nội fOSC

ĐĐTAK58-NHOM 1

(khi IOH = -0.205mA)

(khi VIN = 0 đến Vcc)

190kHz đến 350kHz (điển hình là
270kHz)

Page 8


MẠCH ĐO NHỊP TIM October 17, 2016

Hình 2.2: LCD 16x2
Chức năng các chân:
Chân

Ký hiệu


1

Vss

2

VDD

3

VEE

Mô tả
Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với
GND của mạch điều khiển
Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với
VCC=5V của mạch điều khiển
Điều chỉnh độ tương phản của LCD.
Chân chọn thanh ghi (Register select). Nối chân RS với logic “0”
(GND) hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của

4

RS

LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của
LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên
trong LCD.

Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic

5
6

R/W

“0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để

E

LCD ở chế độ đọc.
Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép
của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp
nhận) thanh ghi bên trong nó khi phát hiện một xung (high-tolow transition) của tín hiệu chân E.

ĐĐTAK58-NHOM 1

Page 9


MẠCH ĐO NHỊP TIM October 17, 2016

+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát
hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ
ở bus đến khi nào chân E xuống mức thấp.
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU.
Có 2 chế độ sử dụng 8 đường bus này :

7 - 14

DB0 -

+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit

DB7

MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới

15

-

16

-

DB7, bit MSB là DB7
Nguồn dương cho đèn nền
GND cho đèn nền

2.3.3 Chọn linh kiện khối lọc và khuếch đại:
- Chọn IC LM324 có 4 bộ Opamp.

Hình 2.3: IC LM324
2.3.4 Khối nguồn:
Ta sử dụng ngồn pin 5V 500mA, có thể cấp qua cổng USB cắm vào máy tính hoặc
xạc dự phòng.

2.4 Kết luận chương:

ĐĐTAK58-NHOM 1

Page 10


MẠCH ĐO NHỊP TIM October 17, 2016

Quá trình xây dựng sơ đồ khối là việc làm đầu tiên và có lẽ là quan trọng nhất của
bất kì đồ án nào.
Nó cho ta thấy rõ được tính khả thi cũng như cái nhìn trực quan nhất về những việc
mình cần làm tiếp theo.

ĐĐTAK58-NHOM 1

Page 11


MẠCH ĐO NHỊP TIM October 17, 2016

Phần 2: Thiết kế, tính toán và thi công mạch
Chương 3: Thiết Kế Và Tính Toán Sơ Đồ Mạch
3.1 Giới thiệu chương:
- Quá trình xây dựng bước đầu và nền tảng lý thuyết đã cho ta thấy được tính khả
thi của đồ án.
- Việc thiết kế và tính toán mạch tốt sẽ tạo thuận lợi cho việc thi công mạch sau
này.
3.2. Thiết kế, tính toán tầng lọc và khuếch đại:
3.2.1 Sơ đồ mạch:


Hình 3.2: Sơ đồ mạch khối lọc và khuếch đại.
3.2.2 Tính chọn linh kiện:
- Để khuếch đại lên nhiều lần ta sử dụng các bộ khuếch đại. ta mắc các opamp nối
tiếp nhau.
- Sử dụng 2 bộ lọc RC để khuếch đại và lọc tín hiệu và 1 bộ đệm để ỏn định tín
hiệu và nâng dòng.

ĐĐTAK58-NHOM 1

Page 12


MẠCH ĐO NHỊP TIM October 17, 2016

+ Nhịp tim con người ở trạng thái bình thường từ 60 – 160 nhịp . tuy nhiên với các
vận động viên thì nhịp tim từ 40- 60 nhịp, đối với những người có bệnh về tim
mạch thì nhịp tim dao động từ 40- 160 nhịp.
Do vậy ta thiết kế bộ lọc có thể đo được tần số
40/60 < f tim < 160/60
 0,7 < ftim < 2,67 hz
+ (R4, C1) tạo thành bộ lọc thong thấp với tần số cắt f1=0,7 hz
F1 = = 0,7
 R4*C1 =0,23
Chọn C1= 4,7 uF suy ra R4 = 48 K
Chọn R4= 47K
+ (R6, C2) tạo thành bộ lọc thông cao với tần số cắt f2= 2,67 hz
F2= = 2,6 hz
R6*C2 =


= 0,061

Chọn C2= 100nF suy ra R6= 680K
+ chọn hệ số khuêch đại của tầng khuêch đại opamp là 101 lần
K1 = +1 = 101 lần
Suy ra R6= 100 R5
Chọn R5 = 6,8 k suy ra R6= 680k
- Sử dụng tầng khuếch đại OPAMP2 tương tự.
Vậy hệ số khuếch đại của 2 tàng khuêch đại sẽ là tích của mỗi tầng.
K=K1 * K2 = 101 * 101 = 10100 lần.
Tín hiệu vào sẽ khoảng vài mV được khuếch đại lên cỡ vài volt để đưa vào vi điều
khiển để xử lý.
ĐĐTAK58-NHOM 1

Page 13


MẠCH ĐO NHỊP TIM October 17, 2016

- Chọn R10 = 1k Ω để phân cực cho Led D1
3.3 Thiết kế, tính toán khối xử lý trung tâm và khổi hiển thị
3.3.1 Sơ đồ mạch:

Hình 3.3: Sơ đồ mạch khối xử lý trung tâm và hiển thị
3.3.2 Tính toán:
- Chọn thạch anh 4MHz với 2 tụ C1, C2 có giá trị 33p để tạo mạch dao động cho
PIC16F877A.
- Chọn biến trở 10k để cấp áp cho chân Vee của LCD để chỉnh độ nét của LCD

3.4 Kết luận chương

Ở chương này chúng ta đã xây dựng được mạch nguyên lý cho đồ án.Tính toán
được chi tiết các linh kiện cần sử dụng.
ĐĐTAK58-NHOM 1

Page 14


MẠCH ĐO NHỊP TIM October 17, 2016

Chương 4: Lưu Đồ Thuật Toán Và Lập Trình
4.1 Giới thiệu chương:

ĐĐTAK58-NHOM 1

Page 15


MẠCH ĐO NHỊP TIM October 17, 2016

- Chương này sẽ xây dựng lưu đồ thuật toán đo tần số nhịp tim sử dụng vi điều
khiển từ đó lập trình cho vi điều khiển bằng ngôn ngữ lập trình C.
4.2 Lưu đồ thuật toán chương trình chính:

Hình 4.1: Lưu đồ thuật toán chương trình chính

4.3 Lưu đồ thuật toán đo nhịp tim:

ĐĐTAK58-NHOM 1

Page 16



MẠCH ĐO NHỊP TIM October 17, 2016

Hình 4.2: Lưu đồ thuật toán đo nhịp tim

4.4 Lưu đồ thuật toán giao tiếp LCD

ĐĐTAK58-NHOM 1

Page 17


MẠCH ĐO NHỊP TIM October 17, 2016

Hình 4.3: Lưu đồ thuật toán giao tiếp LCD

4.5. Code lập trình:

ĐĐTAK58-NHOM 1

Page 18


MẠCH ĐO NHỊP TIM October 17, 2016

- Sử dụng ngôn ngữ lập trình Hi-Tech C, phần mềm biên dịch MPLABXIDE.
4.5.1 Chương trình chính
#include <htc.h>
//#include "LCD.h"

#define _XTAL_FREQ

4000000

#define MAX_SAMPLE

10

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & BOREN_OFF &
LVP_OFF & CPD_OFF & WRT_OFF & CP_OFF);
/* Define LCD I/O port */
#define LCD_RS
#define LCD_RW
#define LCD_EN

RB3
RB2
RB1

#define LCD_DATA PORTD

#define LCD_DIR_RS TRISB3
#define LCD_DIR_RW
#define LCD_DIR_EN

TRISB2
TRISB1

#define LCD_DIR_DATA TRISD


#define LCD_STROBE() ((LCD_EN = 1), NOP(), (LCD_EN=0))

/* write a byte to the LCD in 4 bit mode */
ĐĐTAK58-NHOM 1

Page 19


MẠCH ĐO NHỊP TIM October 17, 2016

void lcd_write(unsigned char c)
{
__delay_us(70);
LCD_DATA = c;
LCD_STROBE();
}
/*
* Clear and home the LCD
*/
void lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
__delay_ms(5);
}
/* write a string of chars to the LCD */
void lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s)

lcd_write(*s++);
}
ĐĐTAK58-NHOM 1

Page 20


MẠCH ĐO NHỊP TIM October 17, 2016

/* write one character to the LCD */
void lcd_putch(char c)
{
LCD_RS = 1; // write characters
lcd_write( c );
}
/*
* Go to the specified position
*/
void lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}
/* initialise the LCD - put into 4 bit mode */
void lcd_init()
{
// Set pins output
LCD_DIR_RS = 0;
LCD_DIR_RW = 0;
LCD_DIR_EN = 0;

LCD_DIR_DATA = 0x00;
ĐĐTAK58-NHOM 1

Page 21


MẠCH ĐO NHỊP TIM October 17, 2016

// Clear output
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
LCD_DATA = 0x00;

// wait 15mSec after power applied,
__delay_ms(400);

lcd_write(0x3C); // Function set;
__delay_ms(10);
lcd_write(0x0F); // Turn on display
__delay_ms(10);
lcd_write(0x01); // Clear display
__delay_ms(10);
lcd_write(0x02); // Go to home
__delay_ms(10);
lcd_write(0x06); // Entry mode set
__delay_ms(10);
}
unsigned long time[MAX_SAMPLE];
ĐĐTAK58-NHOM 1


Page 22


MẠCH ĐO NHỊP TIM October 17, 2016

unsigned long time_tmp = 0x00;
unsigned char index = 0x00;
void timer0_config();
void interrupt ISR()
{
/* Ngat ngoai INT0 */
if((INTF == 1) && (INTE == 1))
{
time[index] = time_tmp + TMR0;
// Tang bien dem
index++;
if(index == MAX_SAMPLE)
index = 0x00;
// Xoa du lieu
TMR0 = 0x00;
time_tmp = 0x00;
// Xoa co ngat
INTF = 0;
}
/* Ngat Timer0 */
if((TMR0IE == 1) && (TMR0IF == 1))
{
ĐĐTAK58-NHOM 1


Page 23


MẠCH ĐO NHỊP TIM October 17, 2016

time_tmp += 0xFF;
TMR0 = 0x00;
TMR0IF = 0;
}
}
// Chuong trinh chinh
void main(void)
{
unsigned char i;
unsigned int tmp;
float sum;
lcd_init();

// Khoi tao LCD

timer0_config();

// Thiet lap Timer0

lcd_goto(0);

// Ve dau dong

lcd_puts("Mach do nhip tim");
lcd_goto(0x40);


// Xuong dong thu 2

lcd_puts("Nhip tim: ");
INTE = 1;
GIE = 1;

// Cho phep ngat ngoai
// Cho phep ngat toan cuc

for(i = 0; i < MAX_SAMPLE; i++)

// Xoa du lieu

{
time[i] = 0x00;
ĐĐTAK58-NHOM 1

Page 24


MẠCH ĐO NHỊP TIM October 17, 2016

}
while(1)
{
// Hien thi nhip tim
sum = 0x00;
for(i = 0; i < MAX_SAMPLE; i++)
{

sum += time[i];
}
sum = sum/MAX_SAMPLE;
sum = 15625.0/(4*sum);
sum = 60*sum;

// Gia tri thoi gian trung binh
// f = fTimer / average_timer_value

// Nhip tim = sum * 60 nhip/phut

tmp = (int)sum;

// Lay phan nguyen

lcd_goto(0x4A);
//lcd_putch(tmp);
lcd_putch((tmp/100) + 48);

// Hien thi hang tram

tmp = tmp%100;
lcd_putch((tmp/10) + 48);

// Hien thi hang chuc

lcd_putch((tmp%10) + 48);

// Hien thi hang don vi


__delay_ms(600);
}
}
ĐĐTAK58-NHOM 1

Page 25


×