基于51单片机的脉搏测量仪设计与实现

news/2024/5/9 23:18:43/文章来源:https://blog.csdn.net/weixin_53402301/article/details/130286261

目录

前言

一、设计背景

二、系统功能

三、系统硬件设计

3.1 总体方案设计

3.2 信号采集电路设计

3.3 报警电路设计

3.4 下载电路

3.5 电源电路设计

3.6 OLED显示设计

3.7 键盘电路

四、系统软件设计

4.1 系统主程序设计

4.2  脉搏采集子程序设计

4.3 键盘程序设计

4.4 OLED显示程序设计

4.5 AD采集脉搏波程序设计

4.6 数据存储程序设计

五、实物测试

总结

前言

本设计为基于51单片机的脉搏测量仪,部分内容参考网络资料,如有侵权请及时联系博主删除。

一、设计背景

       在中医四诊(望﹑闻﹑问﹑切)中,脉诊占有非常重要的位置。脉诊是我国传统医学中最具特色的一项诊断方法,其历史悠久,内容丰富,是中医“整体观念”﹑“辨证论证”的基本精神的体现与应用。脉搏携带有丰富的人体健康状况的信息,自公元三世纪我国最早的脉学专著《脉经》问世以来,脉学理诊作为“绿色无创”诊断的手段和方法得到了中外人士的关注。但由于中医是靠手指获取脉搏信息,虽然脉诊具有简便﹑无创﹑无痛的特点易为患者接受,然而在长期的医疗实践中也暴露出一些缺陷。首先,切脉单凭医生手指感觉辨别脉象的特征,受到感觉﹑经验和表述的限制,并且难免存在许多主观臆断因素,影响了对脉象判断的规化。其次,这种用手指切脉的技巧很难掌握。再则,感知的脉象无法记录和保存影响了对脉象机理的研究。脉诊的这种定性化和主观性大大影响了其精度与可行性,成为中医脉诊应用﹑发展和交流中的制约因素。为了将传统的中医药学发扬光大,促进脉诊的应用和发展,必须与现代科技相结合,实现更科学﹑客观的诊断。

        医院的护士每天都要给住院的病人把脉记录病人每分钟脉搏数的方法是用手按在病人腕部的动脉上,根据脉搏的跳动进行计数。为了节省时间,一般不会作1分钟的测量,通常是测量10秒钟时间心跳的数,再把结果乘以6即得到每分钟的心跳数,即使这样做还是比较费时,而且精度也不高。因此,开发出一款功能强大的脉搏测量仪是非常有意义的。

二、系统功能

       本课题设计的脉搏测量仪,控制单元选择STC15F2K60S2单片机,传感器选择反射式光电对管ST188,利用人体指腹血液透光性不一样的特性,让传感器接收不同信号从而间接测量人体脉搏,OLED12864液晶显示器实时显示脉搏数据,使用STC15F2K60S2芯片内部EEPROM实现数据存储功能,将之前测得的数值存储起来,与新测得的脉搏进行对比,便于观察出人体脉搏的变化。用LabVIEW设计上位机软件,将采集到的信号通过串口发送到上位机,实时显示测量的脉搏波形。脉搏超标提醒装置选择蜂鸣器,提醒脉搏过高或过低。具体功能如下所示:

  1. 使用反射式光电传感器ST188,实现对人体的脉搏测量,显示分辨率为1bpm;
  2. 计量时,测量结果与信号发生器设置的信号相对误差小于5%;
  3. 采用OLED12864显示测量结果;
  4. 使用STC15F2K60S2芯片内部EEPROM实现数据存储功能,并能够显示存储的数据。
  5. 具有与PC端的通信功能;
  6. 设计labview软件显示测量的脉搏波形;
  7. 具有超标(脉搏过低或过高)提醒功能。

三、系统硬件设计

3.1 总体方案设计

       总体方案设计如图3.1所示。由于使用的单片机芯片中包含存储器EEPROM、AD转换器以及时钟电路,设计的硬件电路主要分为七个部分。

3.2 信号采集电路设计

       反射式光电对管ST188在进行正常工作时,检测的信号为光反射信号,经过模块外部放大、整形、滤波等处理,最终输出模拟信号。由于本次设计采用STC15F2K60S2芯片为主控制,通过检测IO口低电平存在的时间并结合换算关系可实现脉搏的计算。如下图3.2所示为信号采集电路,主要包括低通滤波、信号放大、波形整形等三部分所构成,信号放大和波形整形通过双运算放大器LM358实现。

3.3 报警电路设计

       本次设计的报警系统设计采用有源蜂鸣器实现报警电路,当检测到脉搏值不在阈值范围内时,单片机控制报警电路实现报警。如下图3.3为报警电路设计图。采用S8550 PNP三极管的开关作用控制蜂鸣器的开关,并拥有放大信号的作用。

       如图中所示,BUZZR为蜂鸣器元件,Q1为S8550三极管,三极管的发射极接到蜂鸣器,通过基极的电平状态从而控制三极管的开关,三极管基极限流电阻接到单片机的P0^4引脚,通过单片机输出高低电平从而控制蜂鸣器。其原理如下:当单片机的P0^4输出低电平时,三极管集电极导通,蜂鸣器负极接地,从而蜂鸣器发出声响;当P0^4输出高电平时,三极管集电极处于截止状态,蜂鸣器没有电压从而不发出声音。

3.4 下载电路

       如图3.4所示的下载电路。VCC引脚为正电源输入端,需要外接0.1uF退耦电容C6,接电脑的5V供电。V3引脚外接0.01uF退耦电容C3。XI/XO引脚接晶振12MHz,电容取22pF。TXD/RXD分别接单片机的RX和TX,用作数据通信。

       CH340芯片的发送引脚TXD上接一个反向二极管,然后再连接到对端IC。在接收引脚上加一个限流电阻来防止对端IC对CH340倒灌电流。通过反向二极管的原理是:在CH340发送数据时,发送高电平时二极管截止,但是由于对端RXD默认上拉也是高电平不会有采样问题,而发送低电平时二极管导通,对端RXD接收到低电平,因此可以正常通讯。并防止了CH340的TXD发送引脚将电流倒灌到对端IC。通过限流电阻的原理是:倒灌电流导致芯片工作甚至闩锁效应,是由于引脚电流过大超过了芯片设计时容忍的上限导致芯片内部电路出现异常,因此加一个限流电阻。

3.5 电源电路设计

       本设计对电源要求不是很高,基本的USB 5V或者四节1.5V干电池供电即可完成,本设计采用USB电源线供电,如下图3.5为本设计的电源接口及开关控制电路图。1脚接到开关控制脚,通过开关U3控制电源的通断,输出到VCC为系统供电,VCC为5V。2、3脚接CH340的UD+和UD-,用于USB转串口通信。4脚接GND。

3.6 OLED显示设计

    采用低功耗的0.96寸OLED显示屏,OLED即有机发光二极管(Organic Light-Emitting Diode)。该OLED具有轻薄、低功耗的特点,在MP3等播放器上被广泛应用,由于其低功耗的,在其他可穿戴式产品上也相继被使用。

        OLED具有多种驱动方式,常用的方式主要有SPI和IIC驱动,本设计采用IIC接口的方式,IIC只需要两根数据线即可驱动显示,使用原理简单。该模块内部不带任何字符,在显示字符、数字、汉字时都需要制作字库,因此可以显示各图案。如下图3.6所示为OLED显示电路。该模块具有4个引脚,VCC接电源5V供电,GND接地线,3脚接IIC的 SCL,4脚接IIC的 SDA。

3.7 键盘电路

      本设计采用三个独立式按键实现阈值调整、界面切换功能。三个按键分为设置加键、设置减键、切换键。设置加键是用来对报警阈值进行设置加,设置减键是用来对报警阈值进行设置减。界面切换键可实现对上下限阈值调整界面进行切换。

      下图中3.7为键盘电路设计图,图中三个个按键一端接公共端GND,另一端分别接单片机的I/O。三个按键接口分别接单片机的P0^1、P0^2、P0^3引脚,当单片机的相应引脚检测到低电平时,说明该引脚被触发,从而实现相应的动作。

四、系统软件设计

4.1 系统主程序设计

       首先进行系统初始化,系统初始化包括液晶初始化配置、定时器初始化以及串口初始化。接下来进入主程序循环。主程序循环系统中主要是脉搏信号的实时采集。利用定时器2实现脉搏脉冲信号的捕获,检测两次脉冲的间隔时间,定时器0实现有效脉搏信号的计数,最终通过计算得到实际的脉搏值,将得出的脉搏值存储在EEPROM中。利用AD开始采集原始脉搏波形并通过串口上传到Labview上位机。同时键盘子程序实时扫描,检测到切换键按下时,会切换显示;在阈值界面设置状态下,设置按键按下时上限阈值或下限阈值会相应增加减。系统的软件程序框图如下图4.1所示。

4.2  脉搏采集子程序设计

       设计采用检测两次脉搏信号脉冲间隔时间计算脉搏,在采集脉搏时,其具体步骤如下:首先是初始化定时器0、2,分别定时1ms、10ms中断,之后进入循环。在循环中,如果脉搏脉冲信号存在30ms以上,在定时器1中断开始脉搏计数,同时在定时器0中断排除脉搏测量不稳定的情况,最后通过脉搏算法算出其脉搏值,在OLED上显示出来,其流程图如下图4.2所示。

 

4.3 键盘程序设计

        按键在本系统中主要起到阈值调整、切换界面等功能。按键工作流程如下:首先在正常工作状态下,按下切换键,进入设置上下限阈值界面,OLED显示脉搏测量值、上下限阈值,通过设置加键、设置减键实现上下限阈值的调整。设置完成后最后按下切换键会回到初始界面,具体流程图如下图4.3所示。

 

4.4 OLED显示程序设计

        本次设计采用OLED屏作为显示器,本次选用的是IIC接口,四针的OLED,通过IIC实现驱动OLED,使用方式非常简单。由上一章节可知,OLED的SDA、SCL分别接STC15F2K60S2的P2^7、P2^6,通过软件模拟IIC驱动。IIC接口包括IIC起始信号、IIC停止信号、IIC读数据、IIC写数据、IIC响应信号和非响应信号。以下为OLED读取显示数据流程图,首先进行初始化配置,初始化IIC,然后配置指令。接下来进入显示数据工作中,首先确定显示显示为坐标,然后显示字体大小等信息,然后写入显示数据。其流程图如下图4.3所示 。

 

4.5 AD采集脉搏波程序设计

       本次设计采用STC15F2K60S2内部8通道10位高速ADC,速度可达30万次/秒,3路PWM还可当3路D/A使用。其使用方式非常简单,不需作为A/D使用的P1口可继续作为IO口使用(建议只作为输入)。需作为A/D使用的口需先将P1ASF特殊功能寄存器中的相应位置为‘1’,将相应的口设置为模拟功能,接着在配置ADC控制寄存器、ADC转换结果调整寄存器以及ADC转换结果寄存器即可。以下为AD采集脉搏波程序设计流程图,首先选择AD转换通道,开启AD转换。接下来获取AD采样结果即可。其流程图如下图4.5所示。

 

4.6 数据存储程序设计

       本次设计采用STC15F2K60S2内部大容量EEPROM,其与程序空间是分开的,擦写次数在10万次以上,可分为若干扇区,每个扇区512字节。使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放在不同扇区。在不同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。以下为数据存储程序设计流程图,首先进行EEPROM初始化,然后写数据前擦除扇区。接下来写入存储数据即可。其流程图如下图4.6所示。

五、实物测试

       通过对本次课题设计的系统设计和硬件电路设计,最终做出电路板,将电路各个模块进行焊接。在焊接时应该注意先后顺序,先焊接电路模块,将电路接口和电源开关焊接好后,接通电源。接下来利用万用表测试各个电源点是否正常,测试正常后进入下一步的焊接。焊接顺序按照先焊接电源和主控制单片机部分,先焊接小元件再焊接大元件的方式,最终焊接完成图样如下图5.1所示。

       在系统板在开机后,正常运行时,OLED第三行会显示“欢迎使用”2秒,然后自动刷新显示心率、EEPROM存储心率值等。如下图5.2所示为系统开机界面和数据显示主界面图。在主界面下实时显示该系统的心率、EEPROM存储心率值等数据。如图所示,心率值通过心率传感器ST188采集心率,当没有进行心率测量时,屏幕第一行显示“0”,第二行显示EEPROM存储心率值。如图第一行显示心率为0,未进行心率测量,第二行显示上一次断电前最后一次测量EEPROM存储心率值51。

       在主界面上实时显示,可通过按键实现其他功能,按下切换键时,OLED将切换到阈值显示界面,由于OLED大小关系,故而选择分屏显示。显示界面显示心率测量值、上下限阈值、EPROM存储心率值等信息,如下图5.3所示为上下限阈值显示界面图。第一行显示心率测量值,当没有进行心率测量时,屏幕第一行显示“0”,第二行显示上/下限阈值,第三行显示EEPROM存储心率值。

       通过按键进行上下限阈值调整时,需要先按下设置键进入调整界面,如下图5.4所示为上下限阈值调整界面图。第一行显示心率测量值,第一行显示“0”,第二行显示上/下限阈值,第三行显示EEPROM存储心率值。图上所示,此时分别正在下限阈值和上限阈值,通过设置加、设置减键进行上下调整,按一次设置键自动化后退到下一个参数的设置,最后设置完分之后再次按下设置键,将自动保存设置好的时间并退出设置界面自动进入主界面。

总结

       本次设计顺利完成所有要求,但美中不足的是ST188焊接处出了问题,导致设计整体不够美观,当然本人水平有限,设计有所缺陷,欢迎各位小伙伴在评论区交流指正!设计源码、PCB原理图、设计报告见下百度网盘链接:

链接:https://pan.baidu.com/s/1pbsC4rZsHcywS5LAlzyhyg 
提取码:tqam 

创作不易,还请各位多多支持!
 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102158.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正式开赛|2023年“桂林银行杯”数据建模大赛暨全国大学生数学建模竞赛广西赛区热身赛

为学习贯彻党的二十大工作报告中关于加快发展数字经济、促进数字经济和实体经济深度融合的重要指示,不断推进数字化转型与金融科技创新,桂林银行联合全国大学生数学建模竞赛广西赛区组委会、广西应用数学中心(广西大学)共同主办20…

使用EasyExcel导出模板并设置级联下拉及其原理分析

一、概述 项目中有时会遇到需要导出一个Excel模板,然后在导出的Excel中填充数据,最终再调用接口批量把Excel中的数据导入到数据库当中的需求。 其中级联下拉选择,手机号校验,性别校验等都是比较常见的校验。 这里就已上面三种情…

王道计组(23版)3_存储系统

概述 RAM:随机存储器,任一个存储单元可以随机存取,易失。用作主存(DRAM)或Cache(SRAM) ROM:只读存储器,可随机读出,写入较慢,需刷新,非易失。Flash、SSD固态硬盘、U盘 _____SSD&…

RK3399平台开发系列讲解(PCI/PCI-E)PCIE相关配置说明

🚀返回专栏总目录 文章目录 一、DTS 配置二、menuconfig 配置三、cmdline 配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在使用 RK3399 平台 PCIE 时候的配置。 一、DTS 配置 ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>; 此项是设置 PCIe…

arthas的简单使用

目录 arthas是什么为什么要使用arthasarthas能做什么安装arthas前提准备arthas主要命令trace命令watch命令monitor命令jad命令dashboard命令Thread命令sc命令mc命令redefine命令 实战演练1.定位到需要修改的类2.将定位到的.class文件反编译成.java文件3.修改.java文件4.将修改后…

深入浅出DPDK-1.1主流包处理硬件平台

DPDK用软件的方式在通用多核处理器上演绎着数据包处理的新篇章&#xff0c;而对于数据包处理&#xff0c;多核处理器显然不是唯一的平台。支撑包处理的主流硬件平台大致可分为三个方向&#xff1a;硬件加速器、网络处理器、多核处理器。 根据处理内容、复杂度、成本、量产规模…

Scala循环中断

目录 1.使用抛出和捕获异常的方法跳出当前循环2.使用Scala中的Breaks类的break方法3.测试4.简化 使用 ._ 来引入全部内容 方便调用 在scala中无法直接使用break关键字跳出当前循环&#xff0c;但有其他方法 1.使用抛出和捕获异常的方法跳出当前循环 def main(args: Array[Str…

3105—IIS部署子站点

一、父站点 1—web.config配置 新增并设定location段落 <configuration><location path"." allowOverride"false" inheritInChildApplications"false"><system.webServer><handlers><add name"aspNetCore"…

Java -枚举的使用

一、背景及定义 枚举是在JDK1.5以后引入的。主要用途是&#xff1a;将一组常量组织起来&#xff0c;在这之前表示一组常量通常使用定义常量的方式&#xff1a; public static int final RED 1; public static int final GREEN 2; public static int final BLACK 3;但是常量…

使用 Flask 快速构建 基于langchain 和 chatGPT的 PDF摘要总结

简介 这里不对 langchain 和 chatGPT 进行介绍&#xff0c;仅对实现过程进行整理 环境 Python >3.8 Flask2.2.3 Jinja23.1.2 langchain0.0.143 openai0.27.4 实现 总结功能 使用 langchain 和 openai 接口实现总结功能 实现逻辑&#xff1a;通过text_splitter 将pdf 分…

图像分类识别(方向/重点指引)

1、继YOLO之后的高效目标检测算法&#xff1a; CenterNet 继YOLO之后的高效目标检测算法&#xff1a; CenterNet 2、百度飞浆面向 AI 行业应用场景的开源项目&#xff1a;GitHub - PaddlePaddle/PaddleX: PaddlePaddle End-to-End Development Toolkit&#xff08;『飞桨』…

APP渗透—绕过反代理、反证书检测

APP渗透—绕过反代理、反证书检测 1. 前言1.1. 无法获取数据包情况 2. 反代理2.1. 反代理情况2.1.1. 某牛牛反代理2.1.2. 某探反代理 2.2. 绕过反代理2.2.1. Proxifier设置2.2.1.1. 设置代理服务器2.2.1.2. 配置代理规则2.2.1.3. 检测状态 2.2.2. 抓包测试 2.3. 总结 3. 反证书…

牛客网Verilog刷题——VL7

牛客网Verilog刷题——VL7 题目答案 题目 根据输入信号a&#xff0c;b的大小关系&#xff0c;求解两个数的差值&#xff1a;输入信号a&#xff0c;b为8bit位宽的无符号数。如果a>b&#xff0c;则输出a-b&#xff0c;如果a≤b&#xff0c;则输出b-a。接口信号图如下&#xff…

[pgrx开发postgresql数据库扩展]3.hello world全流程解析

数据库的扩展开发框架 一般来说&#xff0c;数据库的扩展开发主要有的目的就是扩展数据库引擎的能力&#xff08;不管是用pgrx还是其他的框架都一样&#xff09;&#xff1a; 例如PostgreSQL上最著名的扩展PostGIS&#xff0c;就是扩展了PG数据库的空间数据支持能力&#xff…

4.数据结构(0x3f:从周赛中学算法 2022下)

来自0x3f【从周赛中学算法 - 2022 年周赛题目总结&#xff08;下篇&#xff09;】&#xff1a;https://leetcode.cn/circle/discuss/WR1MJP/ 包括堆&#xff08;优先队列&#xff09;、单调栈、单调队列、字典树、并查集、树状数组、线段树等。 学习这些只是开始&#xff0c;能…

软件测试之基础概念学习篇(需求 + 测试用例 + 开发模型 + 测试模型 + BUG)

文章目录 1. 什么是软件测试2. 软件测试和软件开发的区别3. 软件测试和软件调试的区别4. 什么是需求1&#xff09;以需求为依据设计测试用例 5. 测试用例是什么6. 什么是 BUG&#xff08;软件错误&#xff09;7. 五个开发模型1&#xff09;瀑布模型2&#xff09;螺旋模型3&…

PM866 3BSE050200R1高压变频器的四种控制方法

PM866 3BSE050200R1高压变频器的四种控制方法 高压变频器装置指驱动输入电源为6&#xff0c;000V或10KV的电机装置&#xff0c;高压变频器一般主要有下列几种方案选择&#xff1a; 一、直接高压控制&#xff08;高成本&#xff09; 目前以采用美国罗宾康类似的无谐波变频技术&a…

(二十一)查找算法-插值查找

1 基本介绍 1.1 插值查找 插值查找算法又称插值搜索算法&#xff0c;是在二分查找算法的基础上改进得到的一种查找算法。 插值查找算法只适用于有序序列&#xff0c;换句话说&#xff0c;它只能在升序序列或者降序序列中查找目标元素。作为“改进版”的二分查找算法&#xf…

MyBatis-Plus多数据源dynamic-datasource解决多线程情境下数据源切换失效问题

前言&#xff1a;项目中使用MyBatis-Plus多数据源dynamic-datasource&#xff0c;完成多数据源的切换&#xff1b;但是在并发场景下&#xff0c;我们会发现线程会一直访问默认数据源&#xff08;配置的Master数据&#xff09;&#xff0c;并没有访问我们在上一步切换后的数据源…

参展第六届中国城市轨道交通智慧运维大会 | 图扑软件

2022&#xff08;第六届&#xff09;中国城市轨道交通智慧运维大会在西安顺利举行。此次大会由现代轨道交通网联合中国机械工程学会设备智能运维分会主办&#xff0c;西安市轨道交通集团有限公司运营分公司、轨道交通工程信息化国家重点实验室(中铁一院)协办。来自行业学会、地…