脉搏心率测试仪测试与制作报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五邑大学
电子系统课程设计
题目:脉搏心率测试仪测试与制作
院系信息工程学院
专业电子信息工程
学号
学生XX
指导教师陈鹏讲师
报告日期2013年1月
脉搏心率测试仪测试与制作
引言
脉搏波所呈现出来的形态、强度、速率和节律等方面的综合信息,能反映出人体心血管系统中许多生理疾病的血流特征。
本系统是采用STC89C52单片机为核心而制作的一种实用型脉搏测量仪。
采用红外发射管和接收管对人体的脉搏心率进行数据采集,得到的信号滤波放大整形后送入STC89C52单片机进行采集和处理。
单片机将采集到的脉搏心率在液晶LCD1602上实时显示出来。
本文将首先描述本设计的整体思路,然后介绍各个部分设计中的细节,最后列出完善的计算和处理方式与结果。
1.设计解析与设计方案介绍
平均心率值是指一分钟内心脏实际跳动的次数,本心率测量仪是测试平均心率值,测量方法主要有两种: 一种是心电测量. 即根据心电图上相邻二次波形之间的间隔时间来计算心率值; 另一种是脉搏测量。
通常心脏的跳动与脉搏的跳动是同步的, 因此只需测出脉搏跳动次数就可以知道心率值测量脉搏是通过记录
处理脉搏传感器发出的指脉电信号来实现的。
本方案选择的比较简单直接的脉搏测量方式。
目前脉搏波检测系统有以下几种检测方法:光电容积脉搏波法、液体耦合腔脉搏传感器、压阻式脉搏传感器以及应变式脉搏传感器。
近年来, 光电检测技术在临床医学应用中发展很快, 这主要是由于光能避开强烈的电磁干扰, 具有很高的绝缘性, 且可非侵入地检测病人各种症状信息。
本系统设计了指套式的透射型光电传感器, 实现了光电隔离,减少了对后级模拟电路的干扰。
采用指套式的透射型光电传感器模块对人体实行心率数据采集,采集所得信号通过放大电路模块实行电信号放大,然后信号通过滤波电路模块进行滤波(特别滤除50Hz市电干扰),再通过整形稳压电路进行整形后,得到幅值在0~5v的正弦信号,再最后将信号通过斯密特比较器NE555形成矩形波并送入单片机控制显示电路模块实现平均心
率结果显示。
其具体总体结构框架如图1.1:
图1.1 脉搏测量仪系统框图
图1.2脉搏信号提取及处理电路结构图
2. 脉搏信号提取部分
光敏二极管的特性是将光信号强弱变化转换为电流变化,通过电路转换再转变成变化的电压信号。
此次设计采用的是BPW83 型红外接收二极管和IR333 型红外发射二极管,二极管工作波长都是940 nm 。
在指夹中,红外接收二极管和红外发射二极管相对摆放以获得最佳的指向特性。
红外发射二极管中的电流越大,发射角度越小,产生的发射强度就越大。
当红外发射二极管发射的红外光直接照射到红外接收二极管上时,IC1B 的反相输入端电位大于同相输入端电位,Vi 为“O ”。
当手指处于测量位置时,会出现二种情况:一是无脉期。
虽然手指遮挡了红外发射二极管发射的红外光,但是,由于红外接收二极管中存在暗电流,仍有l μA 的暗电流会造成Vi 电位略低于2.5 V 。
二是有脉期。
当有跳动的脉搏时,血脉使手指透光
传感器
两级放大
时间与心率显示
波形处理模块 信号提取模块 滤波
波形整形
电压跟随
接收显示模块
单片机
性变差,红外接收二极管中的暗电流减小,Vi 电位上升。
由此看来,所谓脉搏信号的拾取实际上是通过红外接收二极管,在有脉和无脉时暗电流的微弱变化,最终输出20mv左右电压信号。
二极管夹指方式如图2.1所示。
因此,在接收电路中应采用电流电压转换电路,将变化的电流信号转换为电压信号。
转换电路如图2.2所示。
图2.1指甲式脉搏传感器图2.2红外传感连接电路
3.脉搏信号处理部分
LM324运放1用于电压跟随器,如图3.1所示;
其主要作用有:
(1)增大输入阻抗。
电压跟随器具有输入阻抗高,输出阻抗低的特点,这也使得传感器部分输入的微弱电压信号得以有效输入,为下面的滤波放大提供保障
(2)起到做缓冲级,隔离电路干扰作用。
电压跟随器作缓冲级,能有效防止后级对于前级的干扰,从而隔离了后级的可能存在的干扰。
因为脉搏信号本身稳定性很差,极易受到外界或是来自电路本身的干扰,电压跟随器的存在能有效避免来自电路的干扰
LM324运放2用于二阶低通滤波放大电路,如图3.2所示。
通带电压增益为:
23
2
1A up =+
=R R 总增益为:
)
/()/(1A 2u
H H up
f f jQ f f A +-=
截止频率为:
Hz 823.4000001
.03.31000021
RC 21=⨯⨯⨯==Hz f H
ππ
由滤波电路可知,滤波部分为二阶低通滤波电路;由所求截止频率可知,该部分电路在输入信号频率为4.8HZ 及以下时,信号正常放大Au 倍后输出;在输入信号频率大于4.8HZ 时,信号将快速衰减,最终无法导通。
因而,滤波部分电路最多能检测脉搏信号近300次每分钟,使得使用者有较大的测量空间,且能有效地拦截市电的50HZ 干扰信号。
图3.1电压跟随器电路 图3.2二阶低通滤波电路
LM324运放3、4用于同相放大电路,如图3.3所示;NE555芯片用于电压比较和信号波形整形,如图3.4所示。
信号提取模块电路总的原理图见附录图一。
放大倍数为:
2310220110R111A u =+=+
=k
k
R 双同相放大器的放大倍数为:
23 * 23 = 529
电路总的放大倍数为:
2 * 529 = 1058
因而,在输入信号低至5mV 时,放大后输出波形峰峰值近5mV*1058=5290mV ≈5V 。
而NE555整形芯片在+5V 电源供应下,其比较阀值为向上2/3Vcc 向下1/3Vcc ,所以输入信号完全符合整形要求,且其输出高电平为4.7V 左右,完全能被STC89C52采集识别。
因而,总体设计符合要求
图3.3同相比例放大电路图3.4 NE555整形电路
4.单片机显示控制部分
此次设计中的控制显示部分主要由STC89C52单片机和LCD1602液晶显示器共同构成。
(1)STC89C52单片机介绍
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口。
单片机运作的基本电路需复位电路和振荡电路(所用晶振为12MHz)。
(2)LCD1602液晶模块介绍
LCD1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,内置含128个字符ASCII字符集字库。
将1602的8位数据口与单片机的P0口相连接。
当R/W脚(1602第5脚)为低电平时为写操作状态,这里可以一直让其为低电平。
而当RS(第4脚)为低电平时为写指令,当RS(第4脚)
为高电平时为写数据。
1602的程序是根据PDF资料的写操作时序图进行编写的,通过对1602写入指令和写入数据来进行显示。
引脚3所接的可变电阻是作为1602的背光调节。
其液晶显示电路的具体电路,如图4.1所示。
图4.1LCD1602显示控制电路
5.单片机软件设计部分
该脉搏测量仪的单片机程序,主要是LCD1602液晶的操作和显示程序,采用C语言进行编程。
主要用到的单片机定时器。
当矩形波信号由P3.2口输入时,由单片机记录每一个低电平并通过定时显示程序输出显示。
除此外,需要借助定时器进行计时,这里以60秒为周期计算接受整形后波形的低电平个数,即得出我们需要脉搏数。
以下便是ATC89C52单片机信号采集和LCD1602显示控制的具体程序:
/*头文件部分*/
//头文件maibo.h
#ifndef _MAIBO_H_
#define _MAIBO_H_
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key2=P1^1;
sbit LCD_RS = P2^5;
sbit LCD_RW = P2^6;
sbit LCD_EN = P2^7;
sbit maibo = P3^2;
#define LCD_data P0
#endif
/*主程序部分*/
//主程序maibo.c
#include<maibo.h>
#include<intrins.h>
uchar code dis1[] = {"Wele To!!!"}; uchar code dis2[] = {"Pulse Counter"}; uchar code dis3[] = {"Start Testing?"}; uchar code dis4[] = {"(1)Yes (2)No"}; uchar code dis5[] = {"Test Results: "}; uchar code dis6[] = {"Please Wait!!"}; uchar test_res[] = {"00---000"};
int test_data;
uint timer;
//延时函数
void delay(float xms)
{
uchar i;
while(xms--)
{
for(i=0;i<110;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
bit LCD_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
_nop_();
_nop_();
result=(bit)(LCD_data&0x80);
LCD_EN = 0;
return result;
}
//写指令函数
void LCD_wcmd(uchar cmd)
{
while(LCD_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
LCD_data=cmd;
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
LCD_EN = 0;
delay(100);
}
//写数据函数
void LCD_wdat(uchar dat)
{
while(LCD_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
LCD_data=dat;
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
LCD_EN = 0;
}
//液晶初始化函数
void LCD_init()
{
LCD_wcmd(0x38); //16*2显示,5*7点阵,8位数据LCD_wcmd(0x0c); //显示开,关光标
LCD_wcmd(0x06); //移动光标
LCD_wcmd(0x01); //清除LCD的显示内容
}
//液晶行定位函数
void LCD_pos(uint row,uint col)
{
uchar pos;
pos=0x80|(uchar)(0x40*(row-1)+(col-1));
LCD_wcmd(pos);
}
//数组显示函数
void LCD_dis(uchar dis[])
{
uchar i,arra;
for(i=0;i<16;i+=1)
{
arra=dis[i];
if(arra=='\0')//字符串结尾标志
{
break;
}
else
{
LCD_wdat(arra);
}
}
}
//人机界面初始化
void dis_init()
{
maibo=1;
EA = 1 ;//单片机开中断设置
TMOD=0X01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
ET0 = 1;
TR0 = 0; PT0 = 1;//定时器0设置
/*
IT0 = 1;
EX0 = 0; PX0 = 0;//外部中断0设置
*/
LCD_init();
timer=0;
test_data=0;
LCD_pos(1,2);
LCD_dis(dis1);
delay(3000);
LCD_wcmd(0x01);
LCD_pos(1,2) ;
LCD_dis(dis2);
}
void dis_data()
{
test_res[0]='0'+(uint)(timer/10);
test_res[1]='0'+(uint)(timer%10);
test_res[5]='0'+(uint)(test_data/100);
test_res[6]='0'+(uint)((test_data%100)/10);
test_res[7]='0'+(uint)(test_data%10);
LCD_pos(2,5);
LCD_dis(test_res);
}
uint key_coding()
{
uint cod;
cod=0;
if(key1==0)
{
delay(8);
while(~key1);
cod=1;
}
if(key2==0)
{
delay(8);
while(~key2);
cod=2;
}
return cod;
}
void main() //主函数{
uint counter=0;
dis_init();
while(1)
{
if(key_coding()==1)
{
LCD_wcmd(0x01);
LCD_pos(1,2) ;
LCD_dis(dis3) ;
LCD_pos(2,1) ;
LCD_dis(dis4);
timer=0;
test_data=0;
TR0=0;
while(1)
{
if(key_coding()==1)
{
LCD_wcmd(0x01);
LCD_pos(1,2) ;
LCD_dis(dis6) ;
dis_data() ;
break;
}
if(key_coding()==2)
{
LCD_wcmd(0x01);
LCD_pos(1,2) ;
LCD_dis(dis2) ;
break;
}
}
}
if(TF0==1)
{
TF0=0;
counter+=1;
if(counter==16)
{
counter=0 ;
timer+=1 ;
dis_data();
}
if(timer==60)
{
EX0=0;
TR0=0;
LCD_wcmd(0x01);
LCD_pos(1,1) ;
LCD_dis(dis5) ;
dis_data() ;
delay(3000);
}
}
if(maibo==0)
{
delay(6);
while(~maibo);
if(TR0==0)
{
TR0=1;
}
test_data+=1;
}
}
}
6.实践过程中问题及处理方案
(1)信号采集电路部分,红外对的灵敏性不够。
解决方法:直接使用信号发生器来模拟红外对管生成44mV输入电压。
(2)信号放大电路部分,实际放大增益与理论计算值有较大的差别。
解决方法:通过更换电阻改变增益系数,以达到最佳输出电压增益以
及波形输出。
(3)控制显示电路部分,这一部分主要出现在软件编程中,外部中断0与定时器0中断同时应用时发现单片机出现工作异常,最终通过采
集低电平个数的方式省掉外部中断0的使用。
(4)调试过程中,示波器不能正确显示方波。
解决方法:将单片机部分与整形放大部分电路板共地端,并调整示波器的耦合方式为直流。
7.个人心得总结
此脉搏技术其中关键技术是单片机编程与传感器输出的信号波形采集。
本文中设计的系统整体结构简单,控制显示部分由STC89C52芯片实现脉搏信号采集与处理,脉搏计数、显示等功能,因此体积小,功耗低,系统稳定性高;放大部分采用基础同相放大电路,效率高,计算方便;滤波部分采用二阶同相低通滤波,有效地屏蔽了市电干扰,且通过电阻电容值的选择获取较大的测量空间。
通过本次课程设计,使得之前模电学习的运算放大器部分理解的更加深刻,以及对于该部分的理论计算更加熟练;同时,在动手做多块电路板的实践下,使得自身对altium designer6.0 PCB制作软件的使用更加熟练。
参考文献
[1] 廖惜春主编.模拟电子技术基础.华中科技大学.2008
[2] 徐秀平主编.数字电路与逻辑设计.2010
[3] 廖惜春主编.高频电子线路(第3版).2010
[4] X焕成. 工程背景下的单片机原理及系统设计2008
[5] 周静.《基于单片机设计的脉搏测量仪》毕业设计论文2009
[6] X云丽,徐可欣,王玉祥,蒋诚志.微功耗光电式脉搏测量仪.中国科学院XX冶金研究所, 材料
物理与化学(专业) 博士论文.2000
附录图一:信号提取及处理模块电路总原理图
附录图二:控制显示模块总的原理图:
附录图三:信号提取及处理模块电路PCB
附录图四:控制显示模块电路PCB。