第 1 章 概述 1
第 2 章 心率监测系统结构 3
第 3 章 硬件系统设计 5
3.1.1 AT89C51 简介
- 心率信号取样 7
- 光电传感器的原理 7
- 光电传感器的结构 8
- 光电传感器检测原理 8
- 信号取样电路 9
3.3.1 LM324 放大器 10 3.3.2 低通放大电路 10
- 单片机控制电路 14
- LED 显示电路 14
- LED 的结构及工作原理 15
- LED 数码管的显示方式 16
- 报警电路 16
- 硬件系统原理 17
第 4 章 软件系统设计 18
- 主程序流程 18
- 中断程序流程 18
- 显示程序流程 19
第 5 章 系统干扰分析及处理措施 20
- 环境光干扰及处理措施 20
- 电磁干扰及处理措施 20
- 测量过程中运动噪声干扰及处理措施 21
第 6 章 系统测试结果 22
第 7 章 总结与展望 25 参考文献 26 附 录 28 致 谢 34
第1章 概述 心率(Heart Rate)是用来描述心跳周期的专业术语,是指心脏每分钟跳动的次数, 它不仅是反映心脏功能强弱的重要标志,也是反映人体运动强度的生理指标。 心率携带有丰富的人体健康状况信息。自我国最早的脉学专著《脉经》问世以来,脉学理论得到不断发展和提高。在中医四诊(望、闻、问、切)中,脉诊具有非常重要的位置。它是我国传统医学中最具特色的一项诊断方法,历史悠久,内容丰富,是中医“整体观念”、“辨证论证”基本精神的体现与应用。脉诊作为“绿色无创”诊断的手法,得到了中外人士的关注。但由于中医是靠手指获取心率信息,虽然脉诊具有简便、无创、无痛的特点易为患者接受,然而在长期的医疗实践中也暴露出一些缺陷[1]。 进入 21 世纪以来,科技不断的发展,电子产品越来越多,系统的价格越来越便宜;产品的科技含量比例也越来越大,性能越来越可靠。人们日常的生产、生活都在慢慢走向高度自动化和智能化。 医院的护士每天都要给住院的病人把脉记录病人每分钟心跳数,方法是用听诊器放在胸口处,根据心脏的跳动进行计数。为了节省时间,一般不会作 1 分钟 的测量,通常是测量 10 秒内的心跳数,再把结果乘以6 得到每分钟的心跳数,这样做还是比较费时,而且精度也不高。为了提高心率测量的精确性与速度,多种心率监测仪被运用到医学上来,从而开辟了一条全新的医学诊断方法。 随着国民经济的不断发展,人们生活水平不断提高,健康已成了人们关注的 焦点和追求的目标。参加锻炼无疑是保持健康的最佳方法,但很多人急于求成, 往往适得其反,达不到锻炼的效果,甚至可能对身体造成一定程度的伤害。目前 市场上单纯的跑步计步器不能同时监测人体生理参数并实时显示,反馈给锻炼者。心率监测仪是一种可对跑步者跑步等各种身体运动心率参数进行实时监测的仪 器,并能将实时监测的心率参数显示出来。目前心率监测仪[2]在多个领域被广泛应用,除了应用于医学领域,如无创心血管功能检测、妊高症检测、中医脉象、
脉率检测等等,商业应用也不断拓展,如运动、健身器材中的心率测试都用到了技术先进的心率监控仪。 随着科学技术的发展,心率监测技术也越来越先进,对心率的测量精度也越来越高,国内外先后研制了不同类型的心率监测系统,其关键在于对心率传感器的研究。起初用于体育测量的心率测试仪主要集中在对接触式传感器的研究,利用此类传感器所研制的指脉、耳脉等测量仪各有其优缺点。指脉测量比较方便、简单,但因为手指上汗腺较多,指夹常年使用,污渍会使测量灵敏度下降;耳脉测量比较干净,传感器使用环境污染少,易维护,但耳脉较弱,尤其是当季节变化时,所测信号易受环境温度影响,造成测量结果不准确[3]。过去在医院临床监护和中老年保健中出现的日常监护仪器,如便携式电子血压计,可以完成心率的测量,但是这种便携式电子血压计利用微型气泵加压橡胶气囊,每次测量都需要一个加压和减压的过程,存在体积庞大、加减压过程造成不适、心率检测的精确度低等缺点。 近年来国内外致力于开发无创非接触式传感器,这类传感器的重要特征是测量探测部分不侵入机体,不会造成机体创伤,能够自动消除系统误差,测量精度高,通常在体表间接测量人体的生理和生化参数。 人体心室周期性的收缩和舒张引起主动脉的收缩和舒张,是血压以波的形式 从主动脉根部开始沿着整个动脉系统传播,这种波成为心率波[4]。从心率波中提取人体的病理信息作为临床诊断和治疗的依据,历来都受到了中外医学界的重视。心率波所呈现出的形态(波形)、强度(波幅)、速率(波速)和节律(周期)等方面的综合信息,在很大程度上反映出人体心血管系统中许多病理的血流特征,因此对心率波采集和处理具有很高的医学价值和应用前景[5]。但人体的生物信号多属于强噪声背景下的低频弱信号,心率波信号更是低频微弱的非电生理信号,因此必需经 过放大和滤波以满足采集的要求。
第2章 心率监测系统结构 心率监测系统的设计,必须是通过采集人体心率变化引起的一些生物信号, 然后把生物信号转化为物理信号,使得这些变化的物理信号能够表达人体的心率变化,最后要得出每分钟的心跳次数,就需要通过相应的硬件电路及芯片来处理物理变化并存储心跳次数。 光电式心率监测系统是利用光电传感器作为变换原件,把采集到的用于检测心脏跳动的红外光转换成电信号,用电子仪表进行测量和显示的装置。本系统的组成包括光电传感器、信号处理电路、单片机电路、数码显示、电源等部分。光电传感器是将非电量(红外光)转换成电量的转换元件,由红外发射二极管和接收三极管组成,可以将接收到的红外光按一定的函数关系(通常是线性关系)转换成便于测量的物理量(如电压、电流或频率等)输出。信号处理电路主要处理光电传感器采集到的低频信号的模拟电路(包括放大、滤波、整形等)。单片机电路利用单片机自身的定时中断计数功能对输入的脉冲电平进行运算得出心率(包括AT89C51、外部晶振、外部中断等)。电源电路向光电传感器、信号处理、单片机提供的电源,可以是5V-9V的交流或直流的稳压电源。 本设计采用单片机AT89C51为控制核心,实现心率监测系统的基本测量功能。该系统的硬件框图如下图2.1 所示:
图2.1 心率监测系统的工作原理 当手指放在红外发射二极管和接收三极管中间,随着心脏的跳动,血管中血液的流量将发生变换。由于手指放在光的传递路径中,血管中血液饱和度的变化会引起光的强度发生变化,因此和心跳的节拍相对应,红外接收三极管的电流也跟着改变,这就使红外接收三极管输出脉冲信号。该信号经放大、滤波、整形后输出,输出的脉冲信号作为单片机外部中断信号。单片机电路对输入的脉冲信号进行计算处理之后把结果送到数码管显示。
第3章 硬件系统设计 本系统基于51系列单片机来实现功能,因为系统没有其它高标准的要求,我们最终选择了比较普遍的AT89C51单片机来实现系统设计。 AT89C5l 是美国 ATMEL公司生产的低电压、高性能CMOS 8 位单片机,片内含 4k bytes 可反复擦写的只读程序存储器(PEROM)和128 bytes 随机存取数据存储器(RAM),器件采用 ATMEL公司高密度、非易失性存储技术生产,兼容 MCS-51 指令系统,片内置通用 8 位中央处理器(CPU)和 Flash 存储单元,功能强大。 ·与 MCS-51 产品指令系统完全兼容 ·1000 次擦写周期 ·全静态操作:OHz--24MHz ·三级加密程序存储器 ·128*8 字节的内部RAM ·32 个可编程 I/O 口线 ·2 个 16 位定时/计数器 ·6 个中断源 ·可编程串行 UART 通道 此次设计所使用的AT89C51 的封装形式是DIP40。如图3.1 所示。
图3.1 AT89C51的封装形式 引脚功能: ·Vcc:电源电压 ·GND:接地 ·P0 口:P0 口是一组 8 位漏极开路型双向 I/0 口,也是地址/数据总线复用口。作为输出口用时,每位能吸收电流方式驱动 8 个TTL 逻辑门电路,对端口写“1” 可作为高阻抗转入端用。 ·Pl 口:P1 是—个带内部上拉电阻的 8 位双向 I/O 口,P1 的输出缓冲级可驱动 4 个 TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。 ·P2 口:P2 是一个带有内部上拉电阻的 8 位双向 I/O 口,P2 的输出缓冲级可驱动 - 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平, 此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
·P3口:①可以作为输入/输出口,外接输入/输出设备;②作为第二功能使用。
·RST:复位输入。当振荡器工作时,RST 引脚会出现两个机器周期以上高电平将使单片机复位。 ·ALE/PROG:当访问外部程序存储器或数据存储器时, ALE(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节。即使不访问外部存储器,ALE 仍能以时钟振器频率的 1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。 ·PSEN:程序存储允许(PSEN)输出是外部程序存储器的读选通信号,当 AT89C51 由外部程序存储器取指令(或数据)时.每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的 PSEN 信号不出现。 ·EA/VPP:EA =0,单片机只访问外部程序存储器。EA =1,单片机访问内部程序存储器。 .XTAL1:振荡器反相放大器及内部时钟发生器的输入端。 .XTAL2:振荡器反相放大器的输出端。 目前心率监测系统有以下几种检测方法:光电容积脉搏波法、液体耦合腔心率传感器、压阻式心率传感器以及应变式心率传感器。近年来,光电检测技术在临床医学应用中发展很快 ,主要由于光能避开强烈的电磁干扰 , 具有很高的绝缘性,可非侵入地检测病人各种症状信息,具有结构简单、无损伤、精度高、可重复等优点[6]。用光电法提取指尖脉搏光信息受到了从事生物医学仪器工作专家和学者的重视。 根据朗伯一比尔(Lamber—Beer)定律,物质在一定波长处的吸光度和其浓度成正比。当恒定波长的光照射到人体组织上时,通过人体组织的吸收、反射衰减后, 测量到的光强将在一定程度上反映了被照射部位组织的结构特征。 心率主要由人体动脉舒张和收缩产生的,在人体指尖组织中的动脉成分含量高,而且指尖厚度相对其他人体组织而言比较薄,透过手指后检测到的光强相对较大,因此光电式脉搏传感器的测量部位通常在人体指尖。 手指组织可以分成皮肤、肌肉、骨骼等非血液组织和血液组织,其中非血液
组织光的吸收量是恒定的。在血液中,静脉血的搏动相对于动脉血来说十分微弱, 可以忽略。因此可以认为光透过手指后的变化仅由动脉血的搏动引起,那么在恒 定波长的光照下,通过检测透过手指的光强将可以间接测量到人体的心率信号[7]。 传感器由红外发光二级管和接收三极管组成。采用 GaAs 红外发光二极管作为光源时,可基本抑制由呼吸运动造成的心率波曲线的漂移。红外接收三极管在红外光照射下能产生电能,它的特性是将光信号转换为电信号。在本设计中,红外接收三极管和红外发射二极管相对摆放以获得最佳的指向特性。
从光源发出的光除了被手指组织吸收以外,一部分由血液漫反射返回,其余部分透射出来。光电式心率传感器[8]按照光的接收方式可分为透射式和反射式两种。其中透射式的发射光源与光敏接收器件的距离相等并且对称布置,这种方法可较好地反映出心律的时间关系。因此本系统采用了指套式的透射型光电传感器 , 实现了光电隔离,减少了对后级模拟电路的干扰。结构如图 3.2 所示。
图 3.2 透射式光电传感器 随着心脏的跳动,人体组织半透明度随之改变:当血液送到人体组织时,组织的半透明度减小,当血液流回心脏,组织半透明度则增大;这种现象在人体组织较薄的手指尖、耳垂等部位最明显[9]。因此本设计将红外发光二极管产生的红外线照射到人体手指部位,经过手指组织的反射和衰减由装在该部位旁边的光敏三管来接收其透射光并转换成电信号。由于手指动脉血在血液循环过程中呈周期性的脉动变化,所以它对光的反射和衰减也是周期性脉动 , 于是红外接收三极管输出信号的变化也就反映了动脉血的脉动变化。只要把此电信号转换成脉冲并进行整形、计数和显示[10],即可实时的测出心脏跳动的次数。
硬件电路中,关键部分在于心率信号的检测。系统采用红色发光二极管和硫化镉光敏电阻组成透射遮光指套式光电传感器。红色发光二极管稳定性好,遮光指套式的装置减少了外界光的干扰,只需将待测手指插入,便可进行测量.测试时,被测手指正好处在发光二极管和光敏电阻之间,这样一来,光敏电阻的阻值便将随着手指的血容量的变化而变化。 心率信号取样电路如图 3.3 所示,U4 是红外发射和接收装置,由于红外发射二极管中的电流越大,发射角度越小,产生的发射强度就越大,所以对 R17 阻值的选取要求较高。R17 选择 270Ω 同时也是基于红外接收三极管感应红外光灵敏度考虑的。R17 过大,通过红外发射二极管的电流偏小,红外接收三极管无法区别有心跳和无心跳时的信号。反之,R17 过小,通过的电流偏大,红外接收三极管也不能准确地辨别有心跳和无心跳时的信号。 硬件系统是通过检测指尖来采取脉搏信号,从而得到心率信号。当手指离开传感器或检测到较强的干扰光线时,输入端的直流电压会出现很大变化,为了使它不致泄露到 U3A 输入端而造成错误指示,用 C8、C10 串联组成的双极性耦合电容把它隔断[11]。 图 3.3 信号采集电路
LM324 是四运放集成电路,它采用14 脚双列直插塑料封装.它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。
每一组运算放大器可用图3.4所示符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。两个信号输入端中, Vi-(-)为反相输入端,表示运放输出端Vo 的信号与该输入端的相位相反;Vi+(+)为同相输入端,表示运放输出端Vo 的信号与该输入端的相位相同。LM324 的引脚排列见图3.5。
图3.4 运算放大器 图3.5 引脚排列 由于LM324 四运放电路具有电源电压范围宽,静态功耗小,价格低廉等优点, 被广泛应用在各种电路中。 由于通过光电传感器接收到的信号极其微弱,容易被其外围电路所干扰, 因此系统必须为信号处理电路提供电源。检测到的信号经过 LM324放大器放大后仍存在较大的偏置电压,因此必须在信号输入端加滤波电容,将电路中的直流成份滤掉并保证不影响交流信号的传递。 该系统按人体心率在运动后跳动次数达 200 次/分钟的计算来设计低通放大器,如图3.6 所示。R24、C6 组成低通滤波器以进一步滤除残留的干扰,截止频率由 R24、C6 决定,运放 U3A 将信号放大,放大倍数由 R22 和 R24 的比值决定。经过低通放大后输出的信号是叠加有噪声的脉动正弦波[12]。
图 3.6 信号低通放大电路 根据一阶有源滤波电路的传递函数,可得: 按人体心率跳动为 200 次/分钟时的频率是 3.3 Hz 考虑,低频特性是令人满意 的。经过低通放大后输出的信号是叠加有噪声的脉动正弦波。波形如图 3.7 所示。 图 3.7 脉动正弦波
本电路的功能是将模拟电压信号转化为高低电平信号输出到单片机系统,可以采用反向滞回电压比较器进一步提高电路抗干扰能力。经过对强弱心率信号的测试和统计分析可以将其阈值确定。整形电路如图 3.8 所示,U3B 是一个电压比较器,C7、R27 构成一个微分器,U3C 和 C15、R31 组成单稳态多谐振荡器,其脉宽由 C15、R31 决定。U3B 的输出信号(波形如图 3.9)经 C7、R27 的微分后总是将正、负相间的尖脉冲(波形如图 3.10)加到单稳态多谐振荡器 U3C 的反向输入端, 不会造成很大的触发误差,因此稍微调节下 R28 即可将该比较器的阀值电压控制在正弦波的幅值范围内。
当检测到输入信号时,U3B 在比较器输入信号的每个后沿到来时输出高电平, 使 C15 通过 R31 充电。大约持续20ms 之后,因C15 充电电流减小而使 U3B 同相输入端的电位降低到低于反相输入端的电位,于是 U3B 改变状态并再次输出低电平。脉冲高电平与心跳同步,并由红色发光二极管 DS3 的闪亮指示出来,即发光二极管作心跳状态显示,心脏每跳动一次发光二极管就亮一次。同时,该脉冲电平通过R29 送到单片机/INTO 脚,进行对心率的计算和显示。输出波形如图 3.11 所示。
图 3.8 波形整形电路 经过比较器 U3C 产生的输出波形:
图 3.9 输出波形 经过微分器产生的输出波形: 图 3.10 比较后的输出波形 单片机接收到的信号: 图 3.11 接收信号
本设计采用单片机最小系统作为信号的处理电路,如图 3.12 所示,来自取样和整形输出电路的脉冲电平输入单片机 AT89C51 的/INTO脚,单片机设为负跳变中断触发模式,每次脉冲下降沿到达时触发单片机产生中断并进行计时,来一个脉冲心跳次数就加一;定时器中断主要完成一分钟的定时功能 [13]。
图 3.12 单片机处理电路 本设计采用LED数码管动态扫描来显示数据。两个4位的共阳极LED数码管组成8位显示,其中0、1两位显示测量中的时间,3、4两位显示测量中的心跳次数, 6、7两位用来显示上次测量的数据,如图3.13所示。单片机P0口控制显示字型,P2 口控制显示字位。
图 3.13 单片机处理电路 LED 数码管是由发光二极管显示字段组成的。在单片机应用系统中使用最多的就是七段 LED 数码管,有共阴极和共阳极两种。共阴极LED 数码管显示器的公共端为发光二极管阴极,通常接地,当发光二极管的阳极为高电平时,发光二极管点亮。共阳极的 LED 数码管显示器的公共端为发光二极管的阳极,通常接+5V 电源,当发光二极管的阴极为低电平时,发光二极管点亮。
本设计中采用的是 4 位七段共阳极数码管显示器,一共具有 12 个引脚,4 个位选端,8 个字选端。图 3.14 中所示,1、2、3、4 是位选端;a~g、Dp 是字选端。内部结构如图 3.15 所示。
图 3.14 4 位数码管引脚分布图
图 3.15 4 位共阳极数码管结构图 LED 数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出数据,根据数码管的显示方式可以分为静态显示和动态显示两类。 静态显示方式是指当显示器显示某一字符时,发光二极管的位选始终被选中。在这种显示方式下,每一个 LED 数码管显示器都需要一个 8 位的输出口进行控制。静态显示主要的优点是显示稳定,缺点在于占用硬件资源较多,每个 LED 数码管需要独占 8 条输出线。 动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,可以既保证亮度,又保证显示。若显示器的位数不大于 8 位,则显示器的公共端只需一个 8 位 I/O 口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个 8 位口(称为段码输出)。 通过比较,我们可以发现 LED 动态显示更加适合本设计,所以就采用此方法。 报警电路部分如图3.16所示,它使用的是一个蜂鸣器,其一端接P1.1,另外一端接地。当P1.1为高电平是就发出嘟的声音,为报警提示音。在系统初始化完成时会“嘟、嘟、嘟”连响三声,系统正常运行后在出现生理参数超出正常阈值时, 报警电路会嘟嘟嘟的报警到生理参数回到正常阈值内或重启监测仪才会解除报
警。 图3.16 报警电路
该硬件系统由信号取样,信号放大,波形整流,数码管显示以及报警等以上所述几部分电路组成,心率信号通过取样电路的传感器检测,经过信号放大,滤波,整流后,由单片机内部进行处理,最后将检测到的信号通过显示电路显示出来,其硬件原理图如图 3.17 所示。
图 3.17 电路原理图
第4章 软件系统设计 系统主程序控制单片机系统按预定的操作方式运行 , 它是单片机系统程序的框架。系统上电后,对系统进行初始化。初始化程序主要完成对单片机内专用寄存器、定时器工作方式及各端口的工作状态的设定。系统初始化之后, 进行定时器中断、外部中断、显示数据等工作,不同的外部硬件控制不同的子程序[15]。流程如图4.1所示。 图4.1 主程序流程图 定时器中断服务程序由一分钟计时、有无测试信号判断等部分组成。当定时 器中断开始执行后,对一分钟开始计时,到 60s 到了再停止并保存测得的心跳次数。同时可以对按键进行检测,只要复位测试值就可以重新开始测试。主要完成一分 钟的定时功能和保存测得的心跳次数。外部中断服务程序完成对外部信号的测量 和计算。外部中断采用边沿触发的方式,当处于测量状态的时候,来一个脉冲心 跳次数就加一,由单片机内部定时器控制一分钟,累加得出一分钟内的心跳次数。流程如图 4.2 所示。
图4.2 中断程序流程图 显示程序包括显示上次的心跳次数、本次测量中的时间和心跳次数。从中断程序中取得结果后,先显示上次的心跳次数,经过 10ms的延时后再显示测试中的心跳次数,再经过10ms的延时显示测试中的时间。流程如图4.3所示。 图4.3 显示程序流程图
第5章 系统干扰分析及处理措施 为了提高该监测系统的精确度,系统首先要解决的是硬件方面的干扰问题。在光电式心率监测系统的测量过程中,前端测量到的心率信号十分微弱,容易受到外界环境干扰,其中主要的干扰源有测量环境光干扰、电磁干扰、测量运动噪声。 在光电心率传感器中,光敏器件接收到的光信号不仅包含心跳信息的透射光信号,还包含测量环境下的背景光信号,由于动脉波动引起的光强变化比背景光变化微弱得多,因此在测量过程当中要保持测量背景光恒定,减少背景光干扰[16]。 测量环境下的背景光包含环境光和在测量过程中引起的二次反射光。为了减少环境光对心率信号测量的影响,同时考虑到传感器使用的方便性,采用密封的指套式包装方式,整个外壳采用不透光的介质和颜色,尽量减小外界环境光的影响。为了避免测量过程中的二次反射光影响,在指套式传感器的内层表面涂一层吸光材料,能有效减少二次反射光的干扰。 加上指套式外壳后的心率传感器测量到的心率波形比较平滑。这是因为加指套式的心率传感器中环境光在测量过程中基本不受外界环境光的影响,而且能够有效减少二次反射光,使照射到手指上的光波长单一,所以得到的心率信号较为稳定,没有明显的重叠杂波信号,能够很好的体现出心率波形的特征。 通过光电转换得到的包含心率信息的电信号一般比较微弱,容易受到外界电磁信号的干扰,在传统的光电式心率传感器电路中,由于光敏器件和放大电路是
分开的,在信号的传递过程就很容易受到外界电磁干扰,通常在一级放大电路采用电磁屏蔽的方式来消除电磁干扰[17]。本系统采用新型光敏器件,在芯片内部集成光敏器和一级放大电路,有效抑制了外界电磁信号对原始心率信号的干扰。 工频干扰是电路中最常见的干扰,心率信号变化缓慢,特别容易受到工频信 号的干扰,因此对工频信号干扰的抑制是保证心率信号测量精度的主要措施之一。通常心率信号的频率范围在 0.3-30Hz 之间,小于工频50Hz,因此通过低通滤波器可以有效滤除工频干扰,这在信号调理电路中容易实现;同时可以在控制电路中 对光源进行脉冲调制,这样不但能够降低系统的功耗,而且能够在一定程度上减 小外界的电磁干扰,在心率信号数据采集后,可以通过数据处理法方法进一步滤 除工频信号的干扰。 测量过程当中,通常情况下手指和光电心率传感器可能产生相对的运动,这样对心率测量产生误差,可以通过两个方面减少运动噪声误差:一是改善指套式传感器的机械抗运动性,比如说使指套能够更紧的套在手指上,不易松动;二是从心率信号处理的角度,通过算法来减小误差。对于传感器的设计,现在采用的第一个途径。
第6章 系统测试结果 根据系统设计方案,本系统调试分为两大部分:模拟部分和MCU部分。系统设计采用模块化设计,方便各电路功能模块的逐级测试。断开两部分连接点,先 调试MCU部分,试着输入一系列脉冲,观察MCU部分能是否能显示;模拟部分用不透明的笔在红外发射二极管和接收三级管之间摇摆,用示波器观察波形效果如 何。单片机软件先在最小系统板上调试,确保工作正常之后,再与硬件系统联调。最后将各模块组合后进行整体测试,使系统的功能得以实现。以下是硬件系统调 试过程。 系统上电后等待测试状态,如图6.1所示: 图6.1 等待测试 测量中显示的数据,如图 6.2 所示:
图 6.2 测量中显示数据 测量结束后显示的心跳次数,如图 6.3 所示: 图 6.3 测量结束显示数据 调试过程中的问题及解决办法: (1)传感器输出的正弦波幅度很小,经整形输出后检测到的脉冲还是很弱,在确定电路没有问题的情况下,加强信号的放大倍数,调整电阻R22和R24的阻值。(2)测量显示正常但经适当运动后测量,心跳次数没有增加,经检查是前置放大级有问题,更换之后系统运行正常。 (3)进人测量状态后,测量值不稳定,主要是光电传感器受到手机等电磁波干扰,其次是指尖汗液影响测量,将手机关机且测量前擦干指尖汗液即可。
系统于 2011 年 5 月 25 日 10:00 在石麟大楼 707 进行测试,标准的心跳次数是以型号 T006 的富林多功能听诊器测出的心跳次数,结果如下。 表 6.1 测量结果 标准 | 第一次测量 | 第二次测量 | 第三次测量 | 第四次测量 | 第五次测量 | 68 | 64 | 67 | 66 | 67 | 63 | 72 | 70 | 71 | 69 | 69 | 70 | 76 | 76 | 75 | 75 | 74 | 73 | 82 | 80 | 80 | 79 | 81 | 80 | 85 | 83 | 83 | 85 | 82 | 84 |
根据均方差公式对以上表格数据进行计算得:
误差分析结果,均方差越小,结果就越接近平均值,该处平均值即为实际测量的标准值。 由于冬季和夏季的心率值不同,本实验的数据使用夏季测量的值。实验结 果产生的误差主要来自硬件方面,实验室的背景光、电磁波等以及手指汗液都会 影响传感器的信号采集,最终导致测量数据的偏差。由于传感器和其他器件本身 并非理想线性,因此实测数据进行了线性补偿,使得误差值能保持在合理范围内。经校准,非线性补偿后,误差在合理范围内。
第7章 总结与展望 随着现代经济的快速发展,人们对健康的重视程度越来越高,对健康监护产品的需求量也稳步提升,心率监测系统已从危重病人监护,发展到如今普通病房的监护,其应用范围越来越广泛,市场对心率监测系统的需求也越来越大,具有很大的发展前景。 本次所设计的监测系统实现简单、功能稳定、使用方便,应用广泛,具有实 际意义。由于时间比较短,同时本人掌握的知识有限,本次设计还存在很多不足, 如程序不够简练,电路板不够美观,光电传感器灵敏度不够高,数码管显示部分 不够完美等,同时此次设计的测量仪功能比较单一,没有如语音系统实现自动读 出心跳次数等人性化功能,且在设计过程中使用的运放数量也较多,加大了电源 管理的复杂度。但我相信科技的进步势必会使监测仪的功能日益强大和完善,应 用领域会不断扩大,会给我们的生活带来更多的方便和精彩。 为了更好的进行心率监测系统的设计,在近一个学期的时间里,认真收集有 关资料,并做相关的整理和阅读,为这次的设计做好充分的准备。经过此次毕设, 我受益良多:(1)无论做什么事都应该事先做好充分的准备,不应该为了完成任务而被动盲目的学习;(2)了解了心率监测系统在国内外发展之迅速、应用领域之广、市场前景之大;(3)对硬件设计和各模块的功能有了更深的了解,同时提高了动手能力;(4)体会到坚持不懈的毅力对完成一件事情起着巨大的作用;(5)体会到团队合作精神的重要性及相互讨论过程中的乐趣。
致 谢 四年大学生活即将结束,这四年中,我收获了知识,收获了友谊,更收获了为人处事的道理。感谢学校为我提供这个自我发挥的舞台,让我在这里尽情展现了自己的才能。在这个大家庭里,我和同学们共同生活,共同学习。 生活的道路不会一直这么平坦,在前进的道路上,我遇到了很多困难和挫折, 但是凭借着自己的毅力和周围老师、同学的帮助,我最终都努力地克服了。 感谢学院、分院的各级领导,为我们创造的良好的学习氛围,感谢各位老师和我的朋友,以及通信 073 班的各位同学们,你们的关心与帮助使我能够更好地成长。 感谢各位专业课老师,正是你们的辛勤工作,使我对本专业产生了浓厚的兴趣,学到了很多的知识,掌握了很多方法。你们的谆谆教诲使我有志于在本专业继续深造。 感谢毕业设计指导老师应蓓华老师,您的指导和教诲将我领进了单片机这一扇大门。您耐心的教学态度、乐观的生活态度深深地影响着我,是您细心认真地指导我的毕业设计,指出我的不足之处,以使我及时修改更正。 父母是我生命中最重要的人,我今天取得的成绩与他们为我的付出是分不开的。他们一如既往的支持,是我前进的最大动力,是我成功的基石,感谢你们多年来为我的付出。
- 心率监控智能系统的信号采集、处理、显示的程序
- #include
- #define uint8 unsigned char
- #define uint16 unsigned int
- #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()
- {
- Init_System(); //初始化 while(1)
- {
- ShowDisp(Pulsenum, Pulsecnt, cnt1s); //显示
- }
- }
- /**********************************************************************
- *********
- 函 数 名: Exti0_interrupt
- 函数功能: /INT0 引脚下降沿进入中断
- 入口参数: 无
- 返 回: 无
- **********************************************************************
- *********/
- void Ext0_interrupt(void) interrupt 0
- {
- if(starttest == 1) //处在测试状态
- {
- Pulsecnt++; //来一次中断心跳计数器加 1
- }
- }
- /********************************************************************
- 函数功能:定时器/计数器 0 中断处理入口参数:null
- 返 回:null
- 备 注:null
- ********************************************************************/ void Timer0IntProc() interrupt 1
- {
- TH0 = TIMER0_HIGHT; //设置定时器 0 高字节初值TL0 = TIMER0_LOW; //设置定时器 0 低字节初值if(++cnt10ms == 100) //1s 计 时 到
- {
- cnt10ms = 0;
- if(starttest == 1) //处在测试状态
- {
- if(++cnt1s == 60) //一分钟时间到
- {
- starttest = 0; //一次检测完毕,等待下一次检测Pulsenum = Pulsecnt;//保存测得心跳值
- }
- }
- }
- if(keyin == 0) //检测按键
- {
- if(starttest == 1) //处在测试状态
- {
- cnt10ms = 0; //复位测试值,重新开始测试 cnt1s = 0;
- Pulsecnt = 0;
- }
- else //不在测试状态,开始新的一次测试
- {
- starttest = 1;
- cnt10ms = 0;
- }
- }
- }
- /////////////////////////End of Timer0IntProc//////////////////////// void Init_Extint(void)
- {
- IT0 = 1; //外部中断 1 设置为下降沿触发
- IE0 = 0; //标志位清 0
- EX0 = 1; //允许外部中断 1
- }
- /********************************************************************
- 函数功能:定时器/计数器初始化
- 入口参数:null 返 回:null
- 备 注:null
- ********************************************************************/ void TimerInitProc()
- {
- TMOD &= 0xF0;
- TMOD |= 0x01; //设置定时器 0,方式 1:16 位定时器
- TH0 = TIMER0_HIGHT; //设置定时器 0 高字节初值TL0 = TIMER0_LOW; //设置定时器 0 低字节初值TR0 = 1; //启动定时器 0
- ET0 = 1; //开定时器 0 中断
- EA = 1; //开总中断
- }
- /////////////////////////End of TimerInitProc//////////////////////// void initvar()
- {
- starttest = 0;
- cnt10ms = 0;
- cnt1s = 0;
- Pulsecnt = 0;
- Pulsenum = 0;
- }
- void Init_System(void)
- {
- Init_Extint(); TimerInitProc(); initvar();
- }
- /**********************************************************************
- ********
- 函 数 名:Display(uchar chose_dat,uchar dat)
- 函数功能:数码管显示
- 入口参数:chose_dat 数码管显示字位,dat 显示字型
- 返 回:无
- **********************************************************************
- *********/
- void Display(uint8 chose_dat, uint8 dat)
- {
- P0 = dat; //送显示字型
- P2 = ~(0x01< 送显示字位
- DelayMs(1); //延时 1MS
- P2 = 0xFF; //关闭显示
- }
- void ShowDisp(uint8 tPulsenum, uint8 tPulsecnt, uint8 tcnt1s)
- {
- Display(6, DispCode[tPulsenum%10]); //显示上次测量的心跳数 tPulsenum = tPulsenum/10;
- Display(7, DispCode[tPulsenum%10]);
- Display(3, DispCode[tPulsecnt%10]); //显示测试中的心跳 tPulsecnt = tPulsecnt/10;
- Display(4, DispCode[tPulsecnt%10]);
- Display(0, DispCode[tcnt1s%10]); //显示测试中的时间 tcnt1s = tcnt1s/10;
- Display(1, DispCode[tcnt1s%10]);
- }
- /********************************************************************
- 函数功能:延时 ms
- 入口参数:MS 返 回:null
- 备 注:null
- ********************************************************************/ void DelayMs(uint8 Ms)
- {
- unsigned char i,j; do
- {
- for(i=5;i>0;i--)
- for(j=98;j>0;j--);
- }while(--Ms);
- //Test for 12M
- }
- ///////////////////////////End of DelayMs////////////////////////////
复制代码
完整的Word格式文档51黑下载地址:
基于单片机的心率检测报警器设计开题报告加进度表 陈峰2014011323.doc
(36.5 KB, 下载次数: 24)
|