摘 要

心脏,作为人体最重要的器官,心率就显得尤为重要,它是衡量人体健康的重要指标。本文的研究目标是基于
软件滤波算法,采用单片机内置精度高,采集信号速度快,转化效果好的ADC模块,对脉搏信号进行采样滤波,设计
了一款结构简单,可达到设计要求的心率检测计。
  首先,针对市场上普遍采用的红外对管采集心率信号失真严重等问题,按照模块化设计思想对整个心率检测计
进行总体方案设计,完成了硬件电路设计、核心板设计、硬件选型等工作。
其次,设计心率采集算法,在对心率信号物理特性的基础上,建立数学模型,确定心率采集算法。此外,针对不同
的人体造成的输出信号不同的问题,设计信号采样方法,提高心率检测精度。
  再次,在采集到心率的基础上,制定了显示方案,通过液晶屏打印心率数值,该方案可以很好的与用户交互,
可以直观的观察到心率数值。
最后,根据整体方案设计,搭建心率检测计系统平台,并通过实验测试所设计的心率检测计的检测精度以及实际工
作环境的运行能力。
关键词:心率检测;滤波算法;ADC模块;

第1章 绪论

1.1选题的背景和意义
  随着科学技术,经济文化等各个方面日新月异的变化,让我们体会到了时代的发展,越来越关注自己的身体状
况,而心率是人体健康的一项重要指标,它能够很好的反映人们的身体的情况,能及时发现身体的异样。近些年
来,我国人口逐步进入老龄化模式,二胎三胎政策也逐步开放,因此国家现如今更加关注于医疗健康相关方面的问
题,此外,由于新冠病毒的爆发,所引起的一系列症状如发热,呼吸困难等都引起人们的重视。众所诸知,心脏病
一般都是突发性,如果不及时发现,可能会带来非常严重的后果,对心脏病人及其家庭都带来了极大的危害,因此
心率检测,就可以作为一个实时监控能够在危急时刻能以警报的装置,用来检测家人的身体情况,由此可以看出心
率检测仪对人们的作用是十分重要的。
  其次,据研究表明,一个正常成人的正常心率介于每分钟60到100次(BPM:每分钟节拍数的单位)之间,而且
许多因素都会影响心率,例如:年龄,健身和活动水平,吸烟者,患有心血管疾病、高胆固醇或糖尿病、气温、身
体姿势(如,站立或躺下)、情绪、药物等,因此,根据这些因素,正常心率会因人而异。最易发现的是当其他因
素保持基本相同时,仅当性别而有所不同,女性的平均心率比男性快约2-7 BPM。虽然正常值的范围很广,但异常高
或低的心率可能表明存在潜在问题。而我们知道测量心率的办法仅仅是去医院检测或者购买一些昂贵的电子仪器进
行测量,显然这都是不能被大多数普通家庭所接受的。因此一款携带方便,成本较低,操作简单的心率检测计,这
无疑是为大多数家庭带来福音。
1.2心率检测计的研究现状
1.2.1 国外研究现状
  据调查研究发现,早在1912年左右就有国外研究人员开始研究心率,他们在实验中使用水桶作为配重,后来研
发出第一个电子心脏监测仪器,心电图仪,它的体积基本和一间房间的大小一样庞大,极其不方便携带。而最早发
明的心率检测器(HRM)是一种个人监测设备,世界上第一台无线心电图心率监测器被发明于1977年,它由一家芬兰
的运动训练计算机制造商Polar Electro开发而来。而第一台心率监测器的发明正是用于芬兰越野滑雪队的训练辅助
工具。它的模型是由一个监控盒子和一根电机引线构成,这根电机引线可以连接监控盒和人的胸部,从而来测量出
人的心率变化情况,如图1.1所示。由于体育运动的越来越流行,无线个人心率监测仪也开始逐步进入人们的视野
中,早在1983年便可在各大商品店中买到。在1984年,该公司进一步研究,推出了一款具有集成计算机界面的心率
监测器,它能够是运动员可以在计算机上查看他们的个人的心率测量数据,也能够很好地分析出他们的训练数据。
在此后的时间里,像运动智能手表Polar sport tester PE 2000,Polar Cyclovantage监视器,T40胸部心率监测
器,腕部心率监测器等等一系列产品相继问世,这些也越来越满足广大消费者的需求,不仅方便携带,而且功能也
相应齐全,如图1.2 所示。现在为止,市面上的心率检测仪已经具备
相当完善的功能了,基本满足人们的一系列要求。
1.2.2图 1.1心率检测器(HRM) 国内研究现状在这里插入图片描述

图 1.2腕部心率监测器
  我国对电子医疗设备的研发起步较迟,直到近些年来,我国的电子医疗器械市场才开始快速发展。“至今天下
言脉者,由扁鹊也”,这句话出自司马迁的《史记》,介绍了精通脉诊的名医扁鹊,由此可看出脉诊的历史悠久。
但早在春秋战国时期以前,脉搏诊断已经达到了一定的水平。它不仅方便快捷,而且无创无痛,能被大多数患者接
受。但是同时它也暴露出一些缺陷,首先,仅运用这种手指切脉具有极大地主观性,仅仅依靠医生主观的感受来分
析脉象的特征,存在了许多主观臆断因素,缺少了科学性,精度也大大受到影响。此外,临时的脉搏判断难以精准
的记录和保存,不能进行对脉象深层次的分析和研究,仅仅靠医生的主观感受来进行判断,规范性大大降低,也非
常容易受到外界环境的干扰。
  随着技术的慢慢推进,后来的医疗中大多医生使用听诊器来观测病人的心率、动脉等各方面情况,用听诊器听
心跳,普通正常人一般是“咚嗒”的声音,通常第一声低沉,第二声高亢,当心脏有问题时会发出其他声音,或者
声音跳动节律不整齐。但是它在诊断疾病时具有一定的局限性,因为听诊器主要依靠声音的传播来判断病人的病
情,但是针对一些没有任何声音迹象的疾病来说,如心脏方面的供血不足,它的作用微乎及微。
  到了近代,心电图仪的产生给人们带来了极大地方便,它被广泛应用于临床医学,主要针对心血管疾病及心脏
等相关疾病的诊断,但是由于价格较昂贵,故人们仅能在医院才能检测,极为不便。
现如今国内市场上有手指指夹血糖仪,腕式血糖仪,智能手表等多种类型的心率检测仪,国内相关品牌有可孚,鱼
跃,海尔等各大品牌。
1.3主要研究内容
本文提出了基于51单片机检测仪的设计与实现。本论文研究的主要内容可以分以下几个方面:
1.系统整体方案的论证和设计:根据要求,对系统进行整体方案的设计,并分析各个方案的优缺点,选择较为合适
的方案;
2.硬件模块设计:根据系统设计的要求,列选本系统需要的元器件清单,然后利用Altium Designer软件进一步绘制
系统硬件原理图,并利用protues仿真软件进行进一步的仿真实验。
  3.软件模块设计:先对软件部分进行整体设计,制定出合适的编写方案,开始进行程序的编写,最后软硬件结
合进行系统性的调试,测试功能是否能实现。
本文总有六个章节,现介绍论文的行文结构如下:
  第一章:引言部分,主要阐述了本课题的研究背景和国内外的研究状况,并对本文的主要内容和意义进行了阐
述,为实现对心率采集做好了前期准备工作。
  第二章:介绍系统总体方案的论证与设计,并具体介绍了课题中所涉及的主控模块,放大电路芯片,心率传感
和显示模块的选型和分析,为后面硬件的开发提供了理论的依据。
  第三章:本章为系统的硬件电路设计。在搭建后硬件平台的总体框架的基础上,通过对电路原理图分析,完成
了系统供电方案的设计、单片机最小系统扩展板的设计、以及各类传感器模块的工作电路设计。并对信号采集原理
中对滤波电路及放大整形电路进行系统性的阐述。
  第四章:本章为基于51单片机心率检测计的软件部分设计。首先对系统软件进行总体设计,编写各功能块的软
件代码,其中包括定时器中断程序代码实现,INT中断程序代码实现,ADC采集模拟信号的代码实现,心率信号滤波
算法的实现以及显示模块的程序代码实现。
  第五章:本章主要展示系统完成情况,在前文总体设计方案的基础上搭建了心率检测核心板,并对系统进行硬
件和软件调试,分析调试结果并进行误差分析,研究在调试中遇到的问题并提出解决方案。
  第六章:对系统进行总结,之后对硬件电路部分、软件算法实现部分的不足进行阐述,指出该系统工作的不足
并进行未来展望。
本文的研究框架如图所示。在这里插入图片描述

图 1.3全文研究内容框架

第2章 总体方案的论证和设计

2.1系统方案设计与分析
  本系统主要采用单片机STC12C5A60S2为主要控制核心载体,通过光电传感模块将人体的心率信号采集并将其转
化成为对应的电信号,然后将转化的电信号传递给单片机电路,单片机电路中会对心率频率进行分析处理,单片机
内部电路进行ADC采集完成模数转换,并在此之后进行软件算法滤波,随后记录检测到的每分钟心跳次数,最后将计
数结果在LCD1602液晶屏中进行实时显示,同时由WIFI模块将数据打印到手机,实现对心率信号的采集和显示功能,
同时,采用一个LED灯来指示心跳频率,每检测到一拍心跳LED灯会跟随心跳跳动一次,从而增强与用户的交互体
验。系统方案设计框图如图2.1所示。在这里插入图片描述

图 2.1系统方案设计
  方案一:该方案使用STC89C51作为主控,利用按键设置心率阈值,光电传感器采集人体信号,红外对管来检测心
跳频率,当超出阈值时,蜂鸣器会发出提醒,将将转化后的电信号进行一系列的放大和整形处理后传递给单片机电
路,单片机电路中会对心率频率进行分析处理,最后液晶屏LCD1602将显示心率测得值。而硬件搭建采用的是直接在
环氧实验板中进行焊接各种元器件,此外因为需要将外设引脚和主控引脚连接起来,故需要进行焊接大量的跳线。
方案一控制框图如图2.2所示。在这里插入图片描述

图 2.2方案一系统框图
  方案二:由于方案一中采用了大量的跳线处理,导致焊接难度系数较高,投入的时间精力巨大,故方案二在方
案一的基础上采用Altium Designer软件绘制原理图和PCB板,该软件功能相当强大,使用起来也十分容易上手,不
仅能够设计原理图和PCB,而且能进行元器件的封装处理,因此充分利用该软件,从而解决了方案一的缺陷。
  方案三:考虑到方案二可能存在的问题,如检测心率数值不准确,精度不够的问题,该方案则进一步对心率信
号的采集模块进行重新挑选,将传统的红外对管探测心率转换成了利用 Pulse sensor的光电反射型 Pulse
sensor,该模块在方案二的基础上,大大提高了该心率检测计的准确性和高精度性,满足了该系统的基本要求,符
合需要设计的目的。方案三系统框图如2.3所示。在这里插入图片描述

图 2.3方案三系统框图
2.2主控模块的选型和论证
  方案一:采用MSP430系列微控制器单片机,该系列包括2000多种器件,几乎可以满足任何需求,它是一款16位
单片机的,有者强大的处理及运算的能力,片内资源较为丰富,并且有着超级低的功耗和方便且高效的开发环境。
但是该芯片价格较为昂贵,性价比不高,并且不适合初学者入门学习,不适用于一般的设计开发所使用。
  方案二:采用STM32系列的单片机,它具有一流的外设以及拥有高性能,价格适中,功耗较低,能保持了高集成
性以及开发简易的特点。但是STM32单片机比较适用于运行算法,对于多路信号处理,必须需要多个DSP进行并行处
理,此外因为疫情等等原因,该系列单片机价格波动较大,性价比一般。
  方案三:采用51系列的单片机,开发人员较为熟悉的一款产品,它不仅价格低廉,控制比较方便,性价比高而
且结构相对简单,还具有很高可靠性,高性能,是初学者最容易上手学习和操作的单片机。此外,它的应用领域也
十分广阔,不管是家用电器还是智能仪器仪表产品再到机电一体化产品,到处都有它的身影。
根据本系统的特点,和实际的经济条件等种种原因,因此,选择51系列单片机作为该心率测试仪的主要控制芯片。
心率采集方案的选型和论证:
  方案一:采用LM393电压比较模块如图2.4所示,模块一侧接输入模块,采集输入信号,另一侧接单片机,该输
出是通过在组件上103滑动电阻调整输入信号和参考电压的最后结果,该参考电压在比参考电压输出管脚高的情况
下,在输入信号比参考电压高的情况下输出管脚输出低。,从而使输出的信号为一个矩形脉冲[2]。在这里插入图片描述

图 2.4LM393电压比较模块
  方案二:采用LM358芯片作为本系统的放大电路的核心芯片,不仅仅适用于单电压使用,也适用于双电源的模
式,使用范围十分广泛,可以应用于大多数可以放大电路的场合[3]。它不仅低功耗电流,适合于电池供电,而且价
格相对比较平稳,波动区间较小。
  放大电路如图2.4所示,红外接收D2接收到细微的电压变化后,经过简单的滤波电路输入LM358的IN2+引脚,
LM358的IN2-引脚接103滑动变阻器,这个滑动变阻器的作用是设置基准电压,滑动变阻器的阻值直接影响心率检测
的准确度, LM358组成的双级放大点路可以将微弱的电压变化信号放大便于单片机采集。在这里插入图片描述

图 2.5放大电路
  由于输入的人体心率信号过于微弱,经过双级放大电路干扰太多,使用LM358放大电路采集导致心率信号严重失
真。
  方案三:采用ADC模块采集心率信号,将输入的心率信号转换成数字信号,方便处理,且可以分析多种波形,不
同的人身体机能不同,产生的模拟信号略有不同,但是方案三可以分析不同的波形对信号进行滤波处理。
因此本文选用方案三作为最终的心率信号采集方案。
2.3外设模块的选型和论证
2.3.1心率传感器的选型和论证
  方案一:通过对人体的心电信号中提取对应的心率值,但是由于人体发出的心电信号相对随机且信号微弱,大
约仅有0.05mv至5mv,此外还存在外界其他因素的的干扰。
  方案二:采用压电式传感器来检测人体的心率值,压电式传感器的工作原理式利用一些特殊的介质材料的压电
效应,当该材料收到外力的作用会导致扭曲变形,该介质材料的一面会聚集大量的正电荷,而另一面则为等量的负
电荷,因此能实现非电量测量。但是该传感器内部阻抗较高,但输出能量相对较少,此外灵敏度也相对较弱,不利
于精度大的的心率检测。
  方案三:采用光电式传感器来测量人体心率数值,光电传感器的工作原理是利用光电效应,把接收到的信号转
换成相应的光学信号,再转换成电子信号,以达到采集的目的 [4]。它的主要突出优点是有较高的保持性,可以进
行长久的使用,只需给它通上电源,就能过保持较高的工作状态,此外它也测量精度较高,反应灵敏,对测量物体
的限制性少,分辨率较高等优点。
  由于方案一需要在人体贴各种测量信号的电极片,且测量时不可以随意走动,灵活度便捷度较差,方案二灵活
度增强但是测量精度不符合本系统的设计标准,故采用方案三中的光电式传感器来用于本系统的心率传感模块。
2.3.2显示模块的选型和论证
  方案一:采用LED数码管进行动态显示,如图2.6所示。数码管的显示分动态显示和静态显示,其中静态显示需
要使用一个8位数据线来保持显示的字符,当下一次新的字符传来,显示才会改变,该方法虽便于操作但是成本较高
且电路相对复杂[6]。而动态显示方式占用单片机口线少,但是它需要配合74LS164移位寄存器进行使用,也相对麻
烦。
  方案二:采用点阵式数码管进行显示。该方法是通过一些可以发光的点阵进行随机的排列组合从而形成对应的
数字和字符。但是它本身需要八行八列的发光二极管,尺寸较大且显示内容较单一。
  方案三:采用LCD液晶显示屏进行显示如图2.7所示。液晶屏能够显示主要是依靠液晶的物理特性,电压改变了
液晶的分子排列顺序,从而使其发光,显示到屏幕上[5]。首先相对于数码管,液晶屏不仅耗电低而且显示内容较为
丰富,体积较小,使用寿命也相对较长。在这里插入图片描述

图 2.6LED数码管图 2.7LCD液晶显示屏在这里插入图片描述

2.3.3无线模块的选型
  当采集到心率数值后将数值打印到LCD屏幕上只实现了数据可视化的第一步,然而目前LCD应用场景较少,大部
分人都使用手机,可见不能只使用LCD显示心率数值,这样数据显示显得过于单一,很多用户选择更智能的设备,想
要将心率检测计更智能化,就需要开发板与手机通信,那么选择哪种通信设备就显得尤为重要了。
  目前,使用比较多的手机与单片机通信的设备有蓝牙和无线网。由于蓝牙传输速度较慢,连接速度缓慢,在多
种场景中连接不稳定,主机与从设备传输数据有延时。
  因此本文设计的心率检测计选用wifi模块作为手机与单片机通信设备,其中esp8266搭载多种无线网模式,能很
好的满足本文的设计需求,

第3章 系统的硬件电路设计

3.1控制系统硬件平台总体框架
  本课题的心率检测系统采用STC12C5A60S2作为主控,用光电式传感器Pulse Sensor来采集人体的心脏跳动频
率,心率信号经过单片机ADC功能采集后由软件滤波算法找出心跳,滤除干扰杂波,通过串口打印心率数值在电脑端
显示,通过LCD打印心率数值,通过WIFI模块打印数值在手机端显示,也可通过上位机实时显示脉搏波形图,通过按
键设置心率阈值,超过规定数值蜂鸣器则自动报警,同时手机端发出字符WANING警告。系统的硬件平台总体框架如
图3.1所示。
在这里插入图片描述

图 3.1系统的硬件平台总体框架
3.2核心板模块的设计与分析
3.2.1核心板功能简介
  一个完整的项目离不开主控,单片机作为核心部件,完成各个模块的调用,对采集到的信息进行处理,再通过
定时器引脚ADC处理采集到的脉冲信号,使得整个系统完成规定的任务。
  本论文以STC12C5A60S2为主要控制器,研制了一种用于测量心率的仪器。这是一个增强的51微处理器,具有很
强的性能,共有40个引脚,有10位8通道的ADC采集电路,模拟信号经过ADC输入通道后,AD转换器电源开启并选定
ADC转换通道,开始将模拟信号按照一定的采样频率转换成数字信号[7]。主控芯片引脚功能如图3.2所示。在这里插入图片描述

图 3.2主控芯片引脚功能
  为使课题项目项目更加系统化,本文在采用STC12C5A60S2最小系统的基础上,设计了核心扩展板,使整体项目
方便后期维护和移植,调试方便。
本文所设计的心率检测核心板整体如图3.3所示。在这里插入图片描述

图 3.3心率检测核心板
  核心板整体有晶振电路、复位电路、电源供电电路、程序烧录电路构成的单片机最小系统,以及LCD1602液晶显
示电路、蜂鸣器报警电路、按键输入电路、LED指示灯电路、心率模块接口电路,最后还有一些扩展口,方便后期增
加更多功能。
采用专业电路软件绘制的开发板整体抗干扰能力更强,项目完整度更高,方便进行更多嵌入式开发。
3.2.2核心板原理图设计
  使用Altium Designer软件作为设计工具,结合心率检测计所使用到的芯片引脚绘制原理图。如图3.4所示,分
别有两个4pin的程序下载电路接口,16pin的LCD1602显示电路接口,9pin的上拉电阻接口,考虑到可扩展性,以及
更高的兼容性,这里预留了一个8pin的wifi模块接口,4pin心率传感器接口,以及蜂鸣器报警电路等。从网上下载
原理图封装,为元器件分配封装。在这里插入图片描述

图 3.4核心板原理图
3.2.3核心板PCB设计
  将原理图同步到PCB,检查PCB封装是否正确,切割板子形状,设置自动布线规则,为防止电流过大烧坏电路
板,GND走线要尽量宽一些,GND网络走线宽度设置为1mm,VCC网络走线宽度设置为0.7mm,其它网络走线设置为0.4
mm,设置完成后,使用自动布线功能完成扩展板的连线。最后再添加泪滴,避免电路板受到巨大外力的冲撞时,导
线与焊盘或者导线与导孔的接触点断开。如图3.5所示。在这里插入图片描述

图 3.5核心板PCB图
  接下来是铜涂层,这是PCB制图的一个重要部分。 所谓的铜涂层是用来用铜来填充未使用的PCB空间,这些铜部
分也被称为铜填充物。覆铜板的意义在于,它可以降低接地电阻,提高抗干扰能力;降低电压,提高电源效率;连
接到地面,进一步减少电路面积。它还能屏蔽和抑制内部信号噪音。提高印制电路板的热性能。它可以减少PCB制造
过程中使用的腐蚀性材料。防止印制电路板过热时,由于铜箔的偏向而产生的各种应力,导致印制电路板的变形和
扭曲。
  采用大面积的实心覆铜,设置好覆铜规则之后,将铜皮连接顶层和底层GND网络,在孤立的铜皮上放置过孔有利
于散热。
覆铜之后的PCB如图3.6所示。在这里插入图片描述

图 3.6覆铜之后的PCB
  最后,检查PCB板有无问题,将工程文件中的PCB文件压缩后发到PCB工厂制作。设置板材尺寸为5cm乘4cm,板子
厚度为1.6cm,阻焊颜色选择白色,字符颜色为黑色。
3.3系统外设供电方案的设计及资源分配
3.3.1主控供电方案分析
  硬件设计时要考虑各个外设以及主控的供电需求,考虑到本文所使用到的主控芯片供电为5v,其他外设除了
WIFI模块以外电压均为5v,因此,供电则采用3020mah的锂离子聚合物电池,体积小,容量大,安全性高,输出电压
3.82v,由一块充放电模块如图3.7所示,稳压后再给单片机供电,充放电模块输入输出同口,接入5v 为充电,其他

情况自动切换到输出5v。锂离子聚合物电池输出的3.82v电压经过输入输出模块后,可以输出稳定的5v电压经过插拔
式插座给单片机主控供电。
  WIFI模块单独供电,由AMS117降压芯片单独输出3.3V到模块电源引脚,AMS117输入电压为电池稳压模块输出的
直流5V。在这里插入图片描述

图 3.7充放电模块
  原理图供电电路设计如图3.8所示,考虑到系统的容错率采用两种方案供电,当外部电池不可用时,可以使用
P1,DC插口接USB-TTL程序下载器的5v输出口,S1自锁开关控制系统通断,防止紧急情况发生,当外部电池正常时,
使用J1电池插口供电。同时P1也可作为电池充电口,多重供电方案保障系统正常工作。在这里插入图片描述

图 3.8供电电路设计原理图
同时利用一个LED灯作为电源指示灯用来显示系统供电正常,当由5v电源输入时,指示灯常亮,表示系统接入电源
[16]。
3.3.2主控最小系统设计
  单片机最小系统使正常使用单片机必不可少的电路,它包括:外部时钟电路、程序初始复位电路、电源供电电
路[1],这部分电路不可或缺,少了其中任何一项单片机都有可能无法正常工作。
  外部时钟电路选择11.0592MHz的晶振为系统提供精准的时钟信号,使用主控18和19号引脚,查看芯片数据手册
旁路电容选择30pf,可以滤除晶振正弦波毛刺,保证晶振输出标准正弦波。
  程序初始复位电路使用主控RST引脚,旁路电容选择10uf,当按键按下时RST接入GND电压将为零,RST引脚由高
电平突降为低电平,再松开按键又升至高电平理论上会产生一个方波信号,但是事实往往差强人意,按键按下后会
有短暂的抖动导致输出的方波顶端出现毛刺,旁路电容可以很好的消除按键抖动,同时按键抖动也可通过软件算法
消除。
单片机最小系统使用到的硬件资源如表3.1所示。
表 3.1单片机最小系统使用到的硬件资源
外设引脚 功能说明
XLAL1 晶振输入
XLAL1 晶振输入
RST 复位
5V 电源
为最小系统分配好资源之后,接着就是设计电路图,在Altium Designer软件中绘制最小系统原理图,主控模块如图
3.9所示,将其原理图同步到pcb如图3.9所示。在这里插入图片描述

图 3.9单片机最小系统原理图图 在这里插入图片描述

3.10单片机最小系统PCB图
3.3.3单片机下载电路设计
  程序编写完成之后需要将代码烧录至单片机中,51单片机烧录程序需要使用到STC-ISP软件,通过下载器USBTTL,连接单片机串口,才可将可执行文件写入单片机,因此下载电路需要用到四个引脚,TX、RX、VCC、GND[8],
当要下载程序时下载器USB-TTL的TX引脚接RX,RX引脚接TX,需要用到的硬件资源如表3.2所示。
表 3.2下载电路硬件资源分配表
  
外设引脚 功能说明 核心板引脚
5V 电源 VCC
TX 串口发送 P3.0
RX 串口接收 P3.1
GND 地线 GND
  为下载电路分配好硬件资源之后,接着就是设计电路图,在Altium Designer软件中绘制下载电路原理图,如图
3.11所示,选择4pin的XH2.54排针扩展下载电路引脚,排针使用方便,杜邦线价格便宜,方便硬件调试。将其原理
图同步到PCB如图3.12所示。PCB过孔旁边注明每个引脚的网络名称,防止连线错误烧坏主板。在这里插入图片描述

图 3.11下载电路原理图图 3.12下载电路PCB图在这里插入图片描述

3.3.4LCD液晶显示器电路设计

液晶显示屏,英文简称LCD,全称为Liquid Crystal Display,显示的原理则是充分地利用了液晶的物理特性
[17]。LCD显示屏按照显示内容可分为字符型,笔段式和图形点阵式三种,若按照显示模块划分,则可划分为TN,
HTN,STN,FSTN,VA五类,使用者可根据任务的不同,挑选出合适的显示屏。
  LCD液晶屏的命名主要由分辨率来命名的,如LCD1602其分辨率则为162,lCD12864就是分辨率为12864。其中
LCD1602则是许多单片机爱好者最熟悉的液晶显示屏之一,在本系统中也采用LCD1602作为本系统的输出显示,其原
理图如在这里插入图片描述

图3.13所示。将其原理图同步到PCB如图3.14所示。 在这里插入图片描述

图 3.13 LCD1602原理图图 3.14 LCD1602pcb图
  LCD1602液晶屏是一款字符型液晶显示模块,它的主控芯片采用的是HD44780或其他兼容性芯片,标准的无背光
液晶型LCD1602有14个引脚,而背光则有16个引脚,增加了两个背光源电极引脚[9]。它的主要参数如表3.3所示:
表 3.3LCD主要参数表
  
显示字符 162个字符
工作电压 4.5V~5.5V
工作电流 2.0mA
工作温度 -20℃~70℃
最佳工作电压 5.0V
单个字符尺寸 2.95
4.35(W*Hmm)
引脚个数 16个
各引脚功能表如表3.4所示:
表 3.4LCD引脚功能及资源分配表
各引脚的详细功能分别介绍如下:
  RS接核心板P25号引脚,对LCD进行数据/命令选择,R/W接核心板P26号引脚,对LCD进行读/写选择,EN接核心板
P27号引脚,对LCD进行使能。D0-D1接核心板P0组引脚,进行数据传输,是控制LCD显示的关键,A、K分别接核心板
5V、GND,打开LCD背光。
3.3.5心率传感器电路设计
  本系统心率传感器采用的是Pulse Sensor心率传感芯片 ,实物图如图3.15所示,它是一款光电式传感器,主要
利用光透过血管时,光电变换器将接收到反射过来的光线,将其转换成对应的电信号,并进行整形,放大滤波等一
系列信号采集处理,最终将采集的心率信号显示到LCD1602液晶屏上,从而实现了心率的检测和收集。
Pulse Sensor传感器只有三个引脚,分别是VCC,GND,以及信号输出S脚。电源正极主要作为5V或3.3V电源输入,负
极则接地,当给其通过电后,Pulser Sensor则不断从S脚输出采集到的电压模拟数值,它的主要参数如表3.5所示,

3.3.6WIFI模块电路设计
  ESP8266WIFI 模块支持较多的网络模式,本课题所设计的心率检测计主要使用该模块的多链接模式,
ESP8266WIFI模块作为热点,手机端用TCP连接软件连接wifi模块热点,实现手机直接与该模块通信。ESP8266WIFI模
块需要与核心板通过串口通信,两条数据线,一条为RX接核心板P3.1,一条为TX接核心板P3.0,VCC接3.3v,GND接
核心板GND,CH_PD接核心板3.3v,RST接PC13,ESP8266WIFI模块硬件电路资源分配如表3.2所示。
表 3.6ESP8266WIFI模块硬件电路资源分配
  
模块引脚 功能说明 开发板引脚
VCC 电源 3.3v
GND 地线 GND
RX 模块接收端 P3.0
TX 模块发送端 P3.1
RST 复位 不接
CH_PD 使能端 3.3v
  为ESP8266WIFI模块分配好硬件资源之后,接着就是设计电路图,在AD中绘制ESP8266WIFI模块接口原理图如图
3.18所示。将其原理图同步到pcb如图3.19所示。
图 3.18ESP8266WIFI模块接口PCB图图 3.19ESP8266WIFI模块接口原理图在这里插入图片描述

第4章系统软件总体设计

4.1程序开发环境简介
  STC-ISP软件可以直接配置相关基础例程,STC-ISP是一款基于C语言编程环境,可以给51单片机下载程序的软
件。它自带丰富的开发资料和基础例程,可以使用这款软件作为基础开发工具,有效提高开发效率,缩短开发周
期。软件自带大量的开发工具,例如:串口助手、波特率计算器、定时器计算器、软件延时计算器等等。STC-ISP软
件的操作界面如图4.1所示[10]。在这里插入图片描述

图 4.1STC-ISP软件的操作界面
本文所设计的心率检测计设计具体过程如下:
  (1)使用STC-ISP软件将必要的头文件和单片机型号包,安装到keil安装路径下防止头文件丢失,添加前需要
先关闭Keil软件,然后添加STC的MCU选型数据库文件到Keil安装路径下的UV2(或uV3\或UV4\,取决于Keil的版本)
目录中,复制STC的8051头文件到Keil安装路径下的C51]INC\STC\目录中,复制STC的80251头文件到Keil安装路径下
的C251\INC\STC\目录中,最后确认Keil的安装目录下有C51目录和C251目录[11]。
  (2)保证基础文件添加完成之后,打开keil4新建工程文件,使用STC-ISP软件生成基础例程,例如:本文需要
用到10ms的定时器,只需要在软件中找到定时器计算器,配置参数即可一键生成代码,将代码复制到keil4中,按照
自身需求进行修改即可。
  (3)配置基础设置完成之后,将工程文件在keil4下打开进行下一步开发,keil4是一款基于C、C++平台的开发
环境,可以开发51以及stm32单片机。
配置工程完成之后,接着根据整体系统的设计需求仅需开发代码,整体工程结构如图4.2所示。在这里插入图片描述

图 4.2整体工程结构
  图4.2中main.c文件存放主函数,作为工程的入口函数,所有的文件调用都从这里开始,usart.c存放串口代
码,实现单片机主控与外设的串口通信,LCD1602.c文件中存放LCD驱动代码实现LCD液晶显示,ADC.c文件中存放信
号滤波算法实现模拟信号转换为数字信号,tim.c中存放定时器初始化和定时器中断服务函数。delay.c文件中存放
延时函数,为必要的语句提供时间延时[18]。
4.2系统软件总体设计
系统软件总体流程图如图4.3所示,主函数部分代码如图4.4所示。在这里插入图片描述

在这里插入图片描述

图 4.3主程序流程图
图 4.4主函数部分代码
  按下核心板复位按键程序从主函数开始执行,完成所有外设初始化,包括定时器、外设引脚、串口、LCD1602、
按键等,完成初始化后程序开始执行主函数代码,首先刷屏LCD1602清除上次使用的缓存数据,并测试LCD1602功能
是否正常,LCD1602显示正常后,接着初始化外部按键,由定时器中断开始按键扫描,当有按键被按下时,进入心率
阈值设置菜单,设置心率上下限,当没有检测到按键时,持续不停的进行按键扫描,设置心率阈值完成后,打开心
率检测模块,监测是否有心率信号产生,有心率信号产生则进行滤波算法采集每分钟心跳次数,若没有采集到心率
信号则返回初始化函数继续进行按键扫描,当每接收到一次心率信号时,LED灯便会跟随心跳频率闪烁,LCD1602打
印心率值,同时由WIFI模块发送心率数值到手机端,判断心率值是否超过设置的阈值,若超过阈值则拉高蜂鸣器控
制引脚使蜂鸣器发声,WIFI模块发送字符waning警告,若心率值在正常范围内则一次心率检测流程结束,WIFI模块
发送字符Plus Ok提醒,等待下一次检测。
4.3心率检测模块算法设计与分析
4.3.1ADC原理简介
  单片机是数字器件,只能处理数字信号,然而自然界中大部分信号都是模拟信号,人体的心率信号也不例外,
要处理人体心脏跳动产生的模拟信号,而 MCU在处理模拟信号时,必须与 A/D变换器相连,将模拟值转换成数字,
然后进行相应的处理[12]。
从模拟量到数字量的转换可以分为采样、保持、量化和编码4个步骤:
  (1)采样:首先规定一个采样周期,必须符合 Shannon取样理论,取样频率必须大于两倍于模拟信号频谱之最
大值。,接着,每隔一个采样周期获取模拟信号的瞬间产生的信号强度,周期长度称为采样宽度,采样后的信号被
称为采样信号,输入信号被称为原信号[19],
(2)保持:保持是指在量化编码过程中,将取样的模拟信号的瞬间所生成的信号强度维持在一个取样时段内。。
  (3)量化:字长为n的A/D转换器把Ymin-Ymax。范围内变化的采样信号变换为数字信号,其最低有效位(least
significant bit,LSB)所对应的模拟量q称为量化单位[13]。
(4)编码:所谓的编码,就是用二进制的数字来表达经过量化的数据,也就是 A/D转换器的输出。。
4.3.2心率信号滤波算法代码实现

要处理pulsesensor模块输出的波形,就要建立波形图数学模型,pulsesensor模块输出的波形数学模型如图4.7
所示。在这里插入图片描述

图 4.7pulsesensor模块输出的波形
  如图4.7所示,输出的波形图为脉冲波,每个周期的最大值称为波峰P,最小值称为波谷T,除去波形有用部分的
峰值称为重博波[21]。滤波的目的就在于找到有用的波形并从峰值中间值处跟踪脉搏波形图的上升,确定IBI的数
值,检测其信号时真正的脉搏信号而不是其他杂波。代码实现如图4.8所示。
在这里插入图片描述

图 4.8滤波算法代码实现
具体工作流程如下:
  首先,初始化系统外设,开始每10ms进入一次定时器中断服务函数,在中断服务函数中检测脉搏信号,当
pulsesensor检测到有脉搏信号产生时,暂时关闭定时器中断,读取AD数值,变量sampleCounter的数值加2用于记录
确定脉冲时间,同时更新变量N(距离上次心跳时间)的数值。
  接着,开始更新脉搏波的波峰和波谷数值,当原始信号Signal小于瞬时采样数值thresh 且N > (IBI/5)*3,且
原始信号Signal < T(波谷的值),则T = Signal,否则原始信号就可能是波峰,若Signal > thresh 且Signal >
P(波峰),则P = Signal。通过连续不断的检测最终找到pulsesensor脉搏信号的波峰和波谷。更新脉搏波的波峰
和波谷数值算法流程图如图4.9所示。在这里插入图片描述

图 4.9更新脉搏波的波峰和波谷数值
  接着,当N数值大于IBI的3/5时,目的是为了去除重博波,开始记录IBI, Pulse用来标记脉搏波谷,脉波高时
为真,低时为假,当(Signal > thresh) && (Pulse == false) && (N > (IBI/5)*3)时,Pulse = true,
lastBeatTime用于记录上一次计算得到的IBI,IBI = sampleCounter – lastBeatTime ,lastBeatTime =
sampleCounter。
最后,记录十次IBI数值,求取平均值输出最终结果。
4.4按键设置阈值代码实现
  打开定时器中断,在中断服务函数中每10ms检测一次按键状态按键标志位进行Key_Con自增运算,随即跳出中
23
断,下一次再进入中断时确认按键已被按下,两次判断按键是否被按下起到按键延时去抖的作用,随即进入按键判
断语句,判断是哪一个按键被按下,按键键值判断完成后按键标志位置零,等待下一次按键按下。
检测到按键被按下后,在主函数开关语句中,进入对应按键的功能语句,在LCD1602上显示对应的按键功能,部分代
码如图4.11所示。在这里插入图片描述

图 4.11按键功能部分代码

第5章系统的焊接与调试

5.1电路焊接
  核心板制作完成后只是一块空板如图5.1所示,还需进行焊接工作,需要焊接的主要元器件有:排针、排母、电
阻、电容、四角按键、蜂鸣器、三极管、电源插座、芯片底座、晶振、LM117等,所有元器件除了 LM117以外封装均
是过孔,封装为过孔的元器件焊接相对容易,贴片元器件焊接难度较大。在这里插入图片描述

图 5.1核心板PCB
在焊接过程中遇到如下问题:
(1)蜂鸣器封装分配错误,比实际购买的封装引脚间距过大。
解决办法:重新绘制电路板,为蜂鸣器分配正确的封装。
(2)按键走线未同步到PCB,按键引脚临时有变未及时保存到PCB工程文件,导致按键信号引脚缺失。
解决办法:使用外部引线自行焊接到相应引脚,保证焊接正确,使用万能表蜂鸣器档测试引线是否连接正常。
(3)复位电路原理图引脚网络分配出错。
解决办法:使用刻刀切断连接错误的引脚,使用外部引线自行焊接,连接到正确的引脚。
(4)200K电阻封装分配错误,引脚间距过小。
解决办法:将电阻倒立焊接不影响正常使用。
整体焊接完成如图5.2所示。在这里插入图片描述

图 5.2整体焊接完成
5.2系统调试
5.2.1系统硬件调试
  在进行软件编写之前首先要做的就是调试各部分硬件是否正常工作,防止由于硬件问题影响整个系统的软件开
发工作,为后续工作的开展做好充分准备。
(1)STC12C60S2核心板主控调试
  将芯片接入最小系统核心板,使用stc-isp烧录工具,烧录出厂测试程序点亮LED灯珠,若LED灯珠点亮成功便可
初步判断芯片功能正常,若灯珠不亮,检查硬件连线是否出错,排除连线错误之后,可以初步判断芯片损坏更换其
他芯片,
经过调试主控芯片所有功能均正常。
(2)按键测试
  使用万能表,拨到蜂鸣器档,将红黑表笔接触四角按键成对角的两个引脚,可以发现此时这两个引脚并没有导
通,保持表笔的继续接触,当一按下按键时,蜂鸣器则报警,说明在按键按下时该对引脚导通,未按下时,该对引
脚断开。则按键硬件电路测试正常。
(3)LCD1602电路测试
  同样使用万能表蜂鸣器档,打开原理图,对照原理图连接网络,分别检测各个引脚是否导通,经过仔细检查,
LCD1602硬件电路连接正确。使用同样的方法,检测心率检测模块接口电路、蜂鸣器电路等。
(4)自锁开关及供电电源测试
  使用万能表拨到直流电压20V档位,测量电池输出电压,确保输出电压为5V,正确连接正负极,按下自锁开关,
电源指示灯点亮,说明电源及自锁开关工作正常[20]。
(5)下载电路测试
  将芯片插入芯片底座,使用USB转TTL下载器连接电脑,打开stc-isp选择正确的芯片型号后,点击检测MCU选
型,可以看到芯片型号检测正常如图5.3所示。在这里插入图片描述

图 5.3芯片型号检测
5.2.2系统软件调试
模块化编程是重要的思想方法,本文软件调试工作正是基于这个方法展开的。
首先,测试LCD1602显示模块,其中遇到的问题及解决办法如下:
(1)字符显示出现叠加,上一时刻显示的字符与之后的字符重叠在一起,造成重影现象
解决办法:两次显示字符之间插入延时以及清屏函数,使用单片机发送清屏指令,清除上一时刻的字符。
(2)字符显示不在正确位置
解决办法:编写字符显示起始位置函数,确定显示的起始位置,从起始位置坐标开始打印字符。
(3)字符只显示一半,字符长度缺失
解决办法:LCD显示字符长度有限,将未显示的字符在第二行打印。
接着,测试按键模块功能是否正常,其中遇到的问题及解决办法如下:
(1)按键按下单片机检测不到
  解决办法:检查了软件算法发现按键引脚定义错误,硬件连接按键P20、P21、P22号引脚,程序函数中定义
P30、P31、P32号引脚,纠正之后问题顺利解决。
(2)按键按下LCD1602未打印正常图形
  解决办法:仔细检查算法,发现程序中定时器未使能,导致中断服务函数无法正常运行,打开定时器之后功能
恢复正常。
最后,测试心率检测模块,使用示波器观察波形,滤波算法工作正常。
5.3实物调试
整体测试完毕,连接电池,按下自锁开关,将手指放在心率检测模块上方,设置心率上限下限,最后可得到心率数
值。如图5.4所示。
在这里插入图片描述

图 5.4心率检测计实物测试
连接到wifi模块热点后,打开TCP连接,连接WIFI模块,可以在界面看到打印的心率数值,如图5.5所示。在这里插入图片描述

图 5.5wifi模块打印数据

第6章 全文总结和展望

6.1总结
  在这几个月中,我收集了有关该系统的相关信息,确定了设计的方向和思想,并在此基础上完成了电路板的设
计、电路板的制作、硬件的焊接、编程、调试、测试。期间也遇到了许多障碍,但都一一克服,最终完成了基于51
单片机心率检测计的设计。下面对所做工作进行总结,并提出系统的改进意见和未来展望。
1.首先在接到任务书后,就开始进行认真的选题,选择相关设计方案以及设计课题思路,在知网上搜集了大量的文
献,并学习大量的与本课题相关的单片机知识,认真分析课题的设计方法及存在的难点,对以后课题的设计做足了
大量的前期准备。
2.确定选题的方向和目标,结合学习了大量相关知识的基础上,提出了多种可行的方案和计划,并对各个方案逐一
进行论证和分析,最终确定了课题的研究方案,设计一款基于51单片机心率检测计。
3.对本课题的硬件进行焊接和调试,首先设计符合本课题设计需求的主控核心板,绘制出原理图,并设计出各类控
制电路、显示电路等,确保各个功能模块可以正常工作。
4.进行软件程序编写,分模块进行功能检测,分析所使用到的功能算法,优化冗杂的代码,实现各类模块达到预期
功能,首先从单个外设开始逐一解决控制问题,将单独调试好的外设模块汇总到一个工程文件中,使各个模块可以
协调工作。
5.最后对整体进行调试,使其实现所预期的目标。首先检查焊接及其硬件设备,各类模块检查无误后烧录工程文
件,接着对搭建好的硬件模块进行心率的检测,并通过LCD1602显示器观察显示器上的数值是否正常,并对存在的问
题进行分析和解决,确保检测心率能够保持一个正常范围内。
6.2展望
1.存在的不足
  (1)首先由于对芯片知识了解不充分,选用的为51系列单片机芯片,导致其测量精度不足,同时存在其他因素
的干扰,如手指的移动,阳光的干扰都会对心率数值造成影响,导致测量结果稍有偏差,显示的数值不是特别稳
定。
  (2)由于时间有限,导致板子焊接效果不是特别完美,板子体积较大,没有达到理想的效果,焊接技术还需要
进一步提高加强。
(3)由于软件算法方面知识储存不够,部分算法还存在冗杂问题,有待改善。
2.展望
   本文设计的基于51单片机心率检测仪虽已完成基本功能实现,但各方面都有待改善,若有充足的时间,查阅充
分的资料并提升自己的知识深度,可在本设计中针对一些存在的不足,进行针对性的改进,使其实现更好的功能效
果。同时也可以在本设计的基础上进行进一步优化升级,如可以利用GSM模块给手机发送信息等功能,这些都可在以
后的学习中进一步加强改善。

Logo

科技之力与好奇之心,共建有温度的智能世界

更多推荐