脉搏测试仪 工作原理
本设计采用单片机AT89C51为控制核心,实现脉搏测量仪的基本测量功能。脉搏测量仪硬件框图如下图2.1 所示:
光电传感器 低通放大器 比较器和振荡器 外部中断信号
数码显示电路 单片机 AT89C51 外部晶振
图 2.1 脉搏测量仪的工作原理
当手指放在红外线发射二极管和接收三极管中间,随着心脏的跳动,血管中血液的流量将发生变换。由于手指放在光的传递路径中,血管中血液饱和程度的变化将引起光的强度发生变化,因此和心跳的节拍相对应,红外接收三极管的电流也跟着改变,这就导致红外接收三极管输出脉冲信号。该信号经放大、滤波、整形后输出,输出的脉冲信号作为单片机的外部中断信号。单片机电路对输入的脉冲信号进行计算处理后把结果送到液晶显示。
光电传感器的原理
根据朗伯一比尔(Lamber—Beer)定律,物质在一定波长处的吸光度和他的浓度成正比。当恒定波长的光照射到人体组织上时,通过人体组织吸收、反射衰减
后,测量到的光强将在一定程度上反映了被照射部位组织的结构特征[7]。
脉搏主要由人体动脉舒张和收缩产生的,在人体指尖组织中的动脉成分含量高,而且指尖厚度相对其他人体组织而言比较薄,透过手指后检测到的光强相对较大,因此光电式脉搏传感器的测量部位通常在人体指尖。
手指组织可以分成皮肤、肌肉、骨骼等非血液组织和血液组织,其中非血液组织的光吸收量是恒定的,而在血液中,静脉血的搏动相对于动脉血是十分微弱的,可以忽略。因此可以认为光透过手指后的变化仅由动脉血的充盈而引起的,那么在恒定波长的光源照射下,通过检测透过手指的光强将可以间接测量到人体的脉搏信号[7]。
光电传感器的结构
传感器由红外发光二级管和红外接收三极管组成。采用GaAs红外发光二极管作为光源时,可基本抑制由呼吸运动造成的脉搏波曲线的漂移。红外接收三极管在红外光的照射下能产生电能,它的特性是将光信号转换为电信号。在本设计中,红外接收三极管和红外发射二极管相对摆放以获得最佳的指向特性。
从光源发出的光除被手指组织吸收以外,一部分由血液漫反射返回,其余部分透射出来。光电式脉搏传感器按照光的接收方式可分为透射式和反射式2种[8]。其中透射式的发射光源与光敏接收器件的距离相等并且对称布置,接收的是透射光,这种方法可较好地反映出心律的时间关系。因此本系统采用了指套式的透射型光电传感器, 实现了光电隔离,减少了对后级模拟电路的干扰。结构如图3.2所示。
图3.2 透射式光电传感器
光电传感器检测原理
检测原理是: 随着心脏的搏动,人体组织半透明度随之改变:当血液送到人体组织时,组织的半透明度减小,当血液流回心脏,组织半透明度则增大;这种现象在人体组织较薄的手指尖、耳垂等部位最为明显[5]。因此本设计将红外发光
二极管产生的红外线照射到人体的手指部位,经过手指组织的反射和衰减由装在该部位旁边的光敏三管来接收其透射光并把它转换成电信号。由于手指动脉血在血液循环过程中呈周期性的脉动变化,所以它对光的反射和衰减也是周期性脉动的, 于是红外接收三极管输出信号的变化也就反映了动脉血的脉动变化。故只要把此电信号转换成脉冲并进行整形、计数和显示[9],即可实时的测出脉搏的次数。
放大电路
按人体脉搏在运动后跳动次数达200次/分钟的计算来设计低通放大器,如图3.6所示。R23、C6组成低通滤波器以进一步滤除残留的干扰,截止频率由R23、C6决定,运放U2B将信号放大,放大倍数由R23和R27的比值决定。
图3.6 低通放大电路
根据一阶有源滤波电路的传递函数,可得:
A(s)?V0(s)A0? V(s)i1?swcR231M?1??214 R274.7K放大倍数为:A0?1?截止频率为:f0?1?3.39Hz
2?R23C6按人体的脉搏跳动为200次/分钟时的频率是3.3 Hz考虑,低频特性是令人满意的。
波形整形电路
波形整形电路如图3.8所示,U2C是一个电压比较器,C11、R29构成一个微分器,U2A和C7、R32组成单稳态多谐振荡器,其脉宽由C7、R32决定。
该比较器的阀值电压可用R31调节在正弦波的幅值范围内,但是对R31的调节要求并不严格,因为U2C的输出信号(波形如图3.9)经C11、R29的微分后总是将正、负相间的尖脉冲(波形如图3.10)加到单稳态多谐振荡器U2A的反向输入端,不会造成很大的触发误差。
当有输入信号时,U2A在比较器输入信号的每个后沿到来时输出高电平,使C7通过R32充电。大约持续20ms之后,因C7充电电流减小而使U2A同相输入端的电位降低到低于反相输入端的电位(尖脉冲已过去很久),于是U2A改变状态并再次输出低电平。这长的脉冲是与脉搏同步的,并由红色发光二极管DS3的闪亮指示出来。即发光二极管作脉搏测量状态显示,脉搏每跳动一次发光二极管就亮一次。同时,该脉冲电平通过R24送到单片机/INTO脚,进行对心率的计算和显示。
程序
#include
#define TIMER0_HIGHT 0xDC //设置定时器0工作方式1自动装载初值,定时10ms,Fosc=11.059200MHZ #define TIMER0_LOW 0x00 sbit keyin = P3^1;
//按键输入
bit starttest; //启动测脉搏标志 uint16 cnt10ms; //10ms计数器 uint8 cnt1s; //1秒计数器
uint8 Pulsecnt; //脉搏次数,计数器
uint8 Pulsenum; //上次测试脉搏的次数
uint8 codeDispCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳数码管段码表 void Init_Extint(void); void TimerInitProc(); void initvar();
void Init_System(void);
void Display(uint8 chose_dat, uint8 dat);
void ShowDisp(uint8 tPulsenum, uint8 tPulsecnt, uint8 tcnt1s); void DelayMs(uint8 Ms); void main() { }
/*******************************************************************************
* 函 数 名: Exti0_interrupt
* 函数功能: /INT0引脚下降沿进入中断 * 入口参数: 无 * 返 回: 无
*******************************************************************************/
void Ext0_interrupt(void) interrupt 0 {
if(starttest == 1) {
//处在测试状态
Init_System(); //初始化 while(1) { }
ShowDisp(Pulsenum, Pulsecnt, cnt1s); //显示