Đây là một bài viết về mạch đo nhịp tim đơn giản sử dụng vi điều khiển 8051. Trong dự án này, vi điều khiển AT89S51 được sử dụng, và thiết bị cảm nhận nhịp tim từ ngón tay bằng cách sử dụng phương pháp phản chiếu tia hồng ngoại và hiển thị nó trên màn hình bảy đoạn ba số ở dạng nhịp tim trên mỗi phút. Mạch này có độ chính xác là 4 nhịp mỗi phút và rất dễ sử dụng. Trong lĩnh vực y học, phương pháp sử dụng tại đây để cảm nhận nhịp tim được gọi là phương pháp quang dược thế mạch.
Phương pháp quang dược thế mạch. Phương pháp quang dược thế mạch là quá trình ước tính thể tích của một cơ quan bằng cách sử dụng tia tử ngoại. Các ứng dụng phổ biến của phương pháp quang dược thế mạch bao gồm đo oxy huyết, giám sát tim mạch, theo dõi hô hấp, và đo nhịp tim. Chúng ta sẽ xem xét cách phương pháp quang dược thế mạch được áp dụng để đo nhịp tim từ ngón tay. Khi trái tim giãn nở (tâm trương), thể tích máu bên trong đầu ngón tay tăng lên, và khi trái tim co bóp (tâm thu), thể tích máu bên trong đầu ngón tay giảm. Sự dao động của thể tích máu bên trong đầu ngón tay kết quả từ nhịp tim và nếu bạn có cách nào đó đếm số lần đập trong một phút, đó là nhịp tim trong nhịp mỗi phút (bpm). Để làm điều này, cặp truyền phát tia hồng ngoại / bộ thu được đặt gần ngón tay. Khi trái tim đập, thể tích của các tế bào máu dưới bộ cảm biến tăng lên và phản chiếu thêm sóng hồng ngoại đến bộ cảm biến và khi không có nhịp, độ sáng của tia phản chiếu giảm đi. Sự phản chiếu đập nở này được chuyển đổi thành xung dòng hoặc điện áp thích hợp bằng bộ cảm biến. Đầu ra của cảm biến được xử lý bởi các mạch điện tử thích hợp để thu được một chỉ số hiển thị (màn hình kỹ thuật số hoặc đồ thị).
Mạch đo nhịp tim sử dụng 8051. Mạch đo nhịp tim sử dụng 8051 này sử dụng bộ cảm biến phản chiếu tia hồng ngoại LTH1550-01. LTH1550-01 đơn giản là cặp bóng hồng ngoại - photo transistor trong một gói duy nhất. Mặt trước của bóng hồng ngoại và photo transistor được tiếp xúc và các phần còn lại được cách ly tốt. Khi đầu ngón tay được đặt lên bộ cảm biến, sự dao động thể tích của máu bên trong đầu ngón tay do nhịp tim biến đổi độ sáng của tia phản chiếu và biến đổi này theo nhịp tim.
sơ đồ mạch
Khi có nhiều ánh sáng chiếu vào photo transistor, nó dẫn điện nhiều hơn, dòng thu thu thập của nó tăng và điện áp thu thập giảm. Khi có ít ánh sáng chiếu vào photo transistor, nó dẫn điện ít, dòng thu thu thập của nó giảm và điện áp thu thập giảm. Biến đổi điện áp thu thập này sẽ tỷ lệ thuận với nhịp tim. Dù sao, biến đổi điện áp này rất yếu và cần có các bước xử lý tín hiệu bổ sung để chuyển nó thành dạng có thể nhận dạng bởi vi điều khiển.
Phần tiếp theo của mạch bao gồm hai bộ lọc thấp qua hoạt động thấp bằng bộ khuếch đại LM324. LM324 là một bộ khuếch đại ba cấp có thể hoạt động từ một nguồn cung cấp đơn. Điện trở R23, R17 và tụ điện C5 thiết lập độ tăng và tần số cắt của bộ lọc đầu tiên. Với các giá trị thành phần đã cho, độ tăng sẽ là 11 và tần số cắt sẽ là 2,5Hz. Độ tăng và tần số cắt được xác định bằng các phương trình sau. Tụ điện C15 được sử dụng để loại bỏ nhiễu nếu có thể gây ra kích hoạt sai của bộ so sánh.
Độ tăng điện áp Av = 1 + (R17 / R23)
Tần số cắt Fc = 1 / (2π * R17 * C5)
Bộ lọc thấp qua thứ hai cũng có cùng độ tăng và tần số cắt. Hai bộ lọc thấp qua này tạo thành một phần rất quan trọng của mạch, vì bất kỳ nhiễu hoặc tín hiệu sai nào trôi vào giai đoạn vi điều khiển sẽ sản xuất kết quả thảm họa. Đầu ra của giai đoạn bộ lọc sẽ là một mức điện áp biến đổi giữa 0 và 0,35 volt và biến đổi này được chuyển thành một dãy giữa 0 và 5V bằng cách sử dụng bộ so sánh dựa trên bộ khuếch đại ba (IC1c). Điện áp tham chiếu của bộ so sánh được thiết lập thành 0,3V. Bất cứ khi nào điện áp đầu ra của giai đoạn bộ lọc vượt qua 0,3V, đầu ra của bộ so sánh trở thành không và bất cứ khi nào điện áp đầu ra của giai đoạn bộ lọc thấp hơn 0,3V, đầu ra của bộ so sánh trở thành bão hòa dương. Kết quả sẽ là một xung sạch biến đổi giữa 0 và 5V với tốc độ bằng với nhịp tim. Xung này được đưa vào vi điều khiển để đếm.
ORG 000H // origin
MOV DPTR,#LUT // moves starting address of LUT to DPTR
MOV P1,#00000000B // sets P1 as output port
MOV P0,#00000000B // sets P0 as output port
MAIN: MOV R6,#230D // loads register R6 with 230D
SETB P3.5 // sets P3.5 as input port
MOV TMOD,#01100001B // Sets Timer1 as Mode2 counter & Timer0 as Mode1 timer
MOV TL1,#00000000B // loads TL1 with initial value
MOV TH1,#00000000B // loads TH1 with initial value
SETB TR1 // starts timer(counter) 1
BACK: MOV TH0,#00000000B // loads initial value to TH0
MOV TL0,#00000000B // loads initial value to TL0
SETB TR0 // starts timer 0
HERE: JNB TF0,HERE // checks for Timer 0 roll over
CLR TR0 // stops Timer0
CLR TF0 // clears Timer Flag 0
DJNZ R6,BACK
CLR TR1 // stops Timer(counter)1
CLR TF0 // clears Timer Flag 0
CLR TF1 // clears Timer Flag 1
ACALL DLOOP // Calls subroutine DLOOP for displaying the count
SJMP MAIN // jumps back to the main loop
DLOOP: MOV R5,#252D
BACK1: MOV A,TL1 // loads the current count to the accumulator
MOV B,#4D // loads register B with 4D
MUL AB // Multiplies the TL1 count with 4
MOV B,#100D // loads register B with 100D
DIV AB // isolates first digit of the count
SETB P1.0 // display driver transistor Q1 ON
ACALL DISPLAY // converts 1st digit to 7seg pattern
MOV P0,A // puts the pattern to port 0
ACALL DELAY
ACALL DELAY
MOV A,B
MOV B,#10D
DIV AB // isolates the second digit of the count
CLR P1.0 // display driver transistor Q1 OFF
SETB P1.1 // display driver transistor Q2 ON
ACALL DISPLAY // converts the 2nd digit to 7seg pattern
MOV P0,A
ACALL DELAY
ACALL DELAY
MOV A,B // moves the last digit of the count to accumulator
CLR P1.1 // display driver transistor Q2 OFF
SETB P1.2 // display driver transistor Q3 ON
ACALL DISPLAY // converts 3rd digit to 7seg pattern
MOV P0,A // puts the pattern to port 0
ACALL DELAY // calls 1ms delay
ACALL DELAY
CLR P1.2
DJNZ R5,BACK1 // repeats the subroutine DLOOP 100 times
MOV P0,#11111111B
RET
DELAY: MOV R7,#250D // 1ms delay
DEL1: DJNZ R7,DEL1
RET
DISPLAY: MOVC A,@A+DPTR // gets 7seg digit drive pattern for current value in A
CPL A
RET
LUT: DB 3FH // LUT starts here
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END
Để thực hiện việc đếm, cả hai bộ đếm của 8051 (Timer0 và Timer1) được sử dụng. Timer1 được cấu hình như một bộ đếm tự động 8 bit để đếm số xung "zero-going" đầu vào và Timer0 được cấu hình như một bộ đếm 16 bit để tạo khoảng thời gian 1 giây cần thiết cho Timer1 để đếm. Để đếm số lần đập tim, Timer0 và Timer1 được sử dụng. Timer1 được đặt là một bộ đếm tự động 8 bit để đếm số lần xung (biểu thị nhịp tim) và Timer0 được đặt là một bộ đếm 16 bit tạo ra độ trễ 65536 µs. Khi lặp 230 lần, nó sẽ tạo ra một khoảng thời gian 15 giây (230 x 65536 µs = 15 giây) để Timer1 đếm. Số lần đếm thu được trong 15 giây được nhân với 4 để lấy được nhịp tim trong nhịp mỗi phút.
Timer 0, tạo ra khoảng thời gian 1 giây, được cấu hình ở Chế độ 1 (bộ đếm 16 bit). Vì vậy, nó có thể đếm tối đa là 2^16 và là 65536. Trong 8051, tần số tinh thể được chia cho 12 bằng một mạng chia tần số nội bộ trước khi áp dụng nó làm đồng hồ cho bộ đếm. Điều đó có nghĩa là bộ đếm sẽ tăng lên một lần cho mỗi 1/12 tần số tinh thể. Đối với một hệ thống dựa trên 8051 được đồng hồ bởi tinh thể 12 MHz, thời gian cần cho một lần bộ đếm sẽ là 1 µs (tức là 1/12 MHz). Vì vậy, thời gian trễ tối đa có thể thu được bằng cách sử dụng một phiên của bộ đếm sẽ là 65536 µs. Hãy đọc bài viết "Delay using 8051 timer" để hiểu rõ hơn về điều này.
Cài đặt mạch.
Phiên bản màn hình LCD của máy đo nhịp tim.
RS EQU P2.7
RW EQU P2.6
EN EQU P2.5
ORG 000H
ACALL INIT
ACALL TEXT1
ACALL LINE2
ACALL TEXT3
MOV DPTR,#LUT
MOV P1,#00000000B
MOV P0,#00000000B
MAIN: MOV R6,#230D
SETB P3.5
MOV TMOD,#01100001B
MOV TL1,#00000000B
MOV TH1,#00000000B
SETB TR1
BACK: MOV TH0,#00000000B
MOV TL0,#00000000B
SETB TR0
HERE: JNB TF0,HERE
CLR TR0
CLR TF0
DJNZ R6,BACK
CLR TR1
CLR TF0
CLR TF1
MOV A,TL1
MOV B,#4D
MUL AB
ACALL SPLIT
ACALL INIT
ACALL TEXT1
ACALL LINE2
ACALL TEXT2
ACALL BPM
SJMP MAIN
INIT:
ACALL CMD
MOV A,#0FH
ACALL CMD
MOV A,#01H
ACALL CMD
MOV A,#06H
ACALL CMD
MOV A,#83H
ACALL CMD
MOV A,#3CH
ACALL CMD
RET
TEXT1:
MOV A,#48H
ACALL DISPLAY
MOV A,#65H
ACALL DISPLAY
MOV A,#61H
ACALL DISPLAY
MOV A,#72H
ACALL DISPLAY
MOV A,#74H
ACALL DISPLAY
MOV A,#20H
ACALL DISPLAY
MOV A,#52H
ACALL DISPLAY
MOV A,#61H
ACALL DISPLAY
MOV A,#74H
ACALL DISPLAY
MOV A,#65H
ACALL DISPLAY
RET
LINE2:
MOV A,#0C0H
ACALL CMD
RET
TEXT2:
MOV A,#62H
ACALL DISPLAY
MOV A,#70H
ACALL DISPLAY
MOV A,#6DH
ACALL DISPLAY
MOV A,#20H
ACALL DISPLAY
RET
TEXT3:
MOV A,#63H
ACALL DISPLAY
MOV A,#6FH
ACALL DISPLAY
MOV A,#75H
ACALL DISPLAY
MOV A,#6EH
ACALL DISPLAY
MOV A,#74H
ACALL DISPLAY
MOV A,#69H
ACALL DISPLAY
MOV A,#6EH
ACALL DISPLAY
MOV A,#67H
ACALL DISPLAY
MOV A,#2EH
ACALL DISPLAY
MOV A,#2EH
ACALL DISPLAY
MOV A,#2EH
ACALL DISPLAY
RET
BPM:
MOV A,R1
ACALL ASCII
ACALL DISPLAY
MOV A,R2
ACALL ASCII
ACALL DISPLAY
MOV A,R3
ACALL ASCII
ACALL DISPLAY
RET
CMD: MOV P0,A
CLR RS
CLR RW
SETB EN
CLR EN
ACALL DELAY
RET
DISPLAY:MOV P0,A
SETB RS
CLR RW
SETB EN
CLR EN
ACALL DELAY
RET
DELAY: CLR EN
CLR RS
SETB RW
MOV P0,#0FFh
SETB EN
MOV A,P0
JB ACC.7,DELAY
CLR EN
CLR RW
RET
DELAY1:MOV R5,#255D
HERE2:DJNZ R5,HERE2
RET
SPLIT: MOV B,#10D
DIV AB
MOV R3,B
MOV B,#10D
DIV AB
MOV R2,B
MOV R1,A
RET
ASCII: MOVC A,@A+DPTR
RET
LUT: DB 48D
DB 49D
DB 50D
DB 51D
DB 52D
DB 53D
DB 54D
DB 55D
DB 56D
DB 57D
END
Hotline: 0979 466 469