尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于STM32的脉搏电子血压计设计与实现

基于STM32的脉搏电子血压计设计与实现 简介本资源是一套基于STM32F10x系列芯片实现的脉搏电子血压计完整毕业设计项目面向电子信息、嵌入式系统、生物医学工程等专业的本科生解决课程设计、期末大作业及毕业设计中缺乏可运行硬件闭环项目的问题。压缩包共161个文件含35个C源码主控逻辑、ADC采样、FFT滤波、袖带加压控制、34个H头文件外设驱动与算法接口定义、22个编译中间文件.d及Keil工程核心文件uvproj、uvopt、sct等整体仅2.22MB轻量易部署。已有182人下载学习项目经实机严格调试支持心率/收缩压/舒张压实时测量与LCD界面显示代码全程中文注释涵盖GPIO、USART、ADC、TIM、EXTI等关键外设配置且包含BKP、RTC、FSMC等扩展模块调用示例结构清晰、模块解耦可直接用于答辩与演示。 做毕设那会儿我选的项目是基于STM32的脉搏电子血压计当时很多人问我为什么不做个游戏机或者温湿度计理由是血压计涉及传感器、气路、算法、人机交互一个项目把嵌入式开发的硬骨头全啃了一遍拿来当毕业设计不仅分数高写在简历上也很有分量。这个项目最核心的价值是它不是仿真不是纯软件而是一套能真实测量出血压数据的完整设备需要你把模拟电路、数字信号处理、嵌入式编程、机械气路配合全部打通。如果你正在找STM32相关的进阶项目这个选题很值得参考而且网上流传的源码全部资料版本也不少但很多资料零散、缺注释、电路图含糊真正能跑通的并不多。这篇文章我会从方案设计、硬件选型、软件算法到调试踩坑完整梳理一遍把我自己做这个项目的思路和实操记录分享出来希望能帮你少走弯路。1. 项目概述与整体设计思路1.1 这是一台什么样的血压计先把这个项目定位讲清楚。市场上常见的电子血压计大多采用示波法Oscillometric Method也就是通过袖带充气压迫动脉然后逐渐放气在放气过程中检测袖带内气压的振荡波。随着袖带压力从高于收缩压逐渐下降到低于舒张压脉搏波引起的压力振荡幅度会先增大后减小把这个振荡包络线提取出来再结合算法估算收缩压、舒张压和平均压。这个原理听起来不复杂但真正落地到单片机上涉及的事非常多。基于STM32的脉搏电子血压计就是把这一整套测量流程用STM32单片机实现。具体来说系统包括气泵给袖带充气、泄气阀以可控速度放气、压力传感器采集袖带压力、信号调理电路、STM32最小系统、显示模块和按键模块。开机后按一下按键系统自动充气到预设压力比如180mmHg然后以约3~5mmHg/s的速度放气期间持续采集压力数据从压力信号中分离出脉搏波振荡成分最后计算出血压值并在OLED或LCD上显示出来。用STM32来做这个项目相比用现成的血压计模块比如欧姆龙方案或者Arduino最大的好处是教学层次清晰可以从底层开始掌握ADC采样、滤波、算法实现、外设控制等知识点。毕设答辩时你能讲清楚每一个细节这是直接调用模块化方案无法比拟的。同时STM32的资源足够丰富后续想要加蓝牙、WiFi上传、云端存储都很容易扩展。1.2 为什么选择STM32而不是其他单片机市面上适合做仪器的单片机很多但STM32在这个项目中几乎是首选。原因有几点。第一STM32内置12位ADC采样率足够高可以采集压力传感器输出的模拟信号不需要外扩ADC芯片这对成本和复杂度控制很友好。第二STM32的定时器资源丰富可以实现精确的放气阀PWM控制保证放气速度稳定。第三STM32支持DMA可以在CPU不介入的情况下连续采样为后续的实时滤波和算法处理留出余量。第四STM32的生态太成熟了从标准库到HAL库再到CubeMX代码生成方便网上参考资料多出问题能找到人问。具体型号上F103C8T6是最经典的入门选择性价比高几十块钱一片72MHz主频64KB Flash20KB RAM对血压计项目来说完全够用。如果你想要更多的内存做波形存储和上位机通信也可以选F103RCT6或者F407系列。我实际做的板子用的是STM32F103C8T6小封装的蓝板小板子焊接方便配合几个模块就能搭起来适合毕设验证。当然如果你需要跑FreeRTOS或者更复杂的滤波算法建议用F103ZET6或F407但就这个项目而言C8T6已经够用没必要盲目堆料。1.3 系统架构与数据流设计整个系统的数据流是这样的压力传感器感知袖带压力输出一个与压力成比例的电压信号通常为0~5V或0~3.3V经过放大和滤波后送入STM32的ADC引脚。STM32以一定的采样率比如100Hz或200Hz采集该信号得到原始压力值。同时为了提取脉搏波需要对原始压力信号做带通滤波去除直流分量和呼吸干扰。在实际代码里我会先把原始采样值保存到BUFFER中然后软件上做差分或者高通滤波提取出振荡波再用滑动窗口找包络幅值最后按示波法算法计算血压。系统控制层面气压泵和泄气阀分别由两路GPIO控制通常还需要驱动电路。充气时打开气泵关闭泄气阀放气时关闭气泵通过泄气阀的PWM占空比控制放气速率。整个过程需要状态机来管理从上电自检、待机、充气、测量、放气、计算到显示每一步都有明确的进入条件和退出条件。状态机的健壮性直接决定了测量是否稳定这是代码里最容易出问题的地方。模块划分上建议把代码分为传感器驱动、滤波处理、算法判断、控制逻辑、显示和按键几个模块。这样后面调试的时候哪个环节有问题就单独看哪个模块不用在整个main函数里翻来翻去。源码要特别重视注释毕设答辩时老师很可能直接翻代码问某个函数的用途注释清晰能省很多解释成本。2. 硬件设计与核心传感器选型2.1 压力传感器的选择与信号调理血压计项目的核心传感器是压力传感器。市面上常见的有两种类型一种是压阻式压力传感器比如MPXV5050GP、XGZP6847它们输出模拟电压需要ADC采集另一种是数字式传感器内部集成了ADC和接口I2C或SPI比如MS5540C、BMP280但BMP280量程只有几百hPa不适合测人体血压需要0~300mmHg以上约40kPa。所以做血压计一般选模拟输出的压阻式传感器。我用的是XGZP6847一款国产的差压/表压传感器量程可以选-100kPa~100kPa供电3.3V或5V输出电压经过内部放大后接近于电源电压的比例关系具体灵敏度要看规格书。这类传感器模块在网上很便宜很多还直接集成了运放输出已经调理到0.5V~4.5V接STM32的时候要注意电压匹配。STM32的ADC输入范围是0~3.3V如果你选了5V供电的传感器模块直接接到PA0上会烧引脚必须用电阻分压或者运放电平转换。更常见的做法是选3.3V供电的模块或者自己搭一个分压电路。我自己的板子用5V传感器输出通过两个电阻分压到3.0V以下再接到ADC这样省事但会损失一些分辨率因为信号范围被压缩了。如果你追求精度建议在传感器和MCU之间加一级运放比如MCP6002把信号偏置到合适区间。信号调理方面即使传感器模块声称已校准输出信号仍然可能存在零点偏移和增益误差。所以代码里要做标定。最简单的标定方法用一只精密气压表或者水银血压计作为参考在传感器上施加已知压力记录ADC读数拟合出压力和ADC值之间的线性关系。标定公式一般是P (ADC - ADC0) * K其中ADC0是零点读数K是比例系数。这个标定过程在毕设里一定要写进文档因为它是测量精度的基础也是答辩时一个很好的展示点。2.2 气泵与泄气阀的控制电路气泵负责给袖带充气泄气阀负责按一定速度放气。市面上的电子血压计通常使用微型隔膜泵和电磁阀。气泵选型要注意工作电压和最大压力一般3V或5V的小型气泵就可以在十几秒内把袖带充到180mmHg如果你的袖带比较大可能需要6V或更高电压。驱动方式上气泵和泄气阀都是直流负载可以直接用NPN三极管如S8050或N-MOS管如AO3400驱动但要加续流二极管否则断电瞬间的反向电动势会打坏单片机引脚。我踩过这个坑一开始没加续流二极管驱动管的栅极和MCU引脚烧了好几次后来都加上了IN4007或者SS14才稳定。泄气阀有两种常见类型一种是常闭电磁阀需要通电才打开断电关闭另一种是比例阀可以通过PWM控制开口大小从而精确控制放气速度。毕设项目用常闭电磁阀加PWM控制也能近似实现比例放气在一个PWM周期内给阀通一小段时间的电让阀打开一小会儿再关上通过调节占空比控制平均流量。这种方法简单有效但阀的响应速度要够快否则会有颗粒感放气曲线不光滑。我用的是2通微型电磁阀PWM频率设置在1kHz左右配合PID调节放气速度可以稳定在4mmHg/s左右。控制电路里还有一个很关键的点气泵和电磁阀的供电要和单片机完全隔离至少共地时也要在电源入口做好去耦。我用的是锂电池供电加上DC-DC升压到5V给气泵然后通过LDO降到3.3V给MCU这样气泵启动瞬间的大电流不会把MCU电压拉垮。实测下来气泵启动时如果共用3.3V电源ADC采样值会跳得厉害后来分开供电后信号干净多了。2.3 袖带与气路连接注意事项袖带是包裹在手臂上的气囊通过软管连接到压力传感器和气泵/电磁阀。这个环节看似简单但气密性直接影响测量。买袖带时要注意接口口径一般用6mm内径的软管需要配三通接头一路接气泵一路接泄气阀一路接压力传感器。为了保证气密性接头处可以用喉箍或者扎带固定有条件的话涂一点密封胶。我曾经遇到一个现象充气到180mmHg后一秒钟内就掉到150mmHg排查了半天发现是三通接头没拧紧漏气了。所以拿到硬件后先做个简单的气密性测试充气到200mmHg关闭所有阀门观察压力在10秒内下降不超过2mmHg才算合格。另外袖带的尺寸也要注意成人袖带和儿童袖带充气后的容积不同会影响充气时间和放气速度。如果你的算法里假设了固定的放气速度而实际气路阻力变化很大测量可能失败。建议代码里将测量目标压力设成一个范围充气过程中实时采集压力当压力达到设定值附近就停止充气而不是盲目充气固定时长。2.4 显示与按键接口设计显示部分毕设常用0.96寸OLEDI2C接口或者1.3寸LCDSPI接口。OLED显示效果好刷新快功耗低驱动简单非常适合血压计这种数据量小的应用。我用的是SSD1306驱动芯片的OLEDI2C地址默认为0x3C。如果只有四根线VCC、GND、SCL、SDA接线非常方便。STM32的I2C有硬件和软件两种方式硬件I2C有时会遇到时序问题如果不想折腾建议直接用软件模拟I2C稳定性很好F103主频跑个100kHz没有压力。按键至少需要一个开始/停止键再加一个历史记录键更佳方便查看最近几次测量结果。按键处理要注意消抖可以用延时消抖也可以使用状态机我习惯用20ms的定时器轮询加标志位这样不阻塞主循环。如果还有蜂鸣器可以加一个血压测量完成后响一声很直观。显示内容建议包括当前袖带压力值实时刷新方便调试、测量状态充气中/测量中/放气中、最后测得的收缩压、舒张压、心率以及脉搏波形图可以简单画一条滚动曲线。波形显示在毕设答辩时是加分项能让评委直观看到你的信号处理效果强烈建议实现。3. 软件核心实现信号采集与血压算法3.1 ADC采样与滤波处理血压计软件的第一步是可靠地采集压力信号。我建议用定时器触发ADC采样而不是靠延时函数死等。具体做法是配置一个定时器如TIM2产生100Hz的频率每次溢出时启动一次ADC转换转换完成后在中断里读取结果并放入一个环形缓冲区。或者更高效的做法是用ADC的DMA模式设置扫描多路不要这里只需要一路然后开启连续转换和DMA循环模式这样采样数据会自动写入数组CPU只需要在数组满一半的时候处理一次。DMA的好处是可以连续采很多点比如以1kHz采样每次处理200个点算一次平均值得到10Hz的滤波后压力值。这种降采样平均的方法能有效抑制随机噪声。原始压力信号里包含两个成分一个是缓慢变化的直流分量袖带压力另一个是叠加在直流上的微小脉搏波幅度只有1~5mmHg相对于袖带压力100mmHg来说非常小。为了提取脉搏波需要做高通滤波。我首先对原始采样求滑动平均得到的平均值就是当前的袖带压力值然后原始采样值减去这个平均值就得到了高频的脉搏波分量。这种平均值作基线的方法本质上是一阶高通滤波简单直观在慢速放气时效果很好。但要注意窗口长度如果窗口太大脉搏波的成分也被平均掉了如果太小基线会跟随脉搏波波动。我实测下来在100Hz采样率下窗口长度取20~30个点比较合适相当于0.2~0.3秒的时间窗口能适应60~120次/分的心率范围。除了软件滑动平均ADC前端还可以加一个RC低通滤波器截止频率设在50Hz左右用于滤除工频干扰和高频噪声。RC参数很简单电阻10kΩ电容0.1μF或0.22μF即可具体可以算一下f1/(2πRC)10kΩ和0.1μF算出来约159Hz稍微高一点可以加大电容到0.33μF约48Hz。但RC滤波也会让脉搏波的边沿变缓所以截止频率不宜太低否则影响特征点识别。3.2 脉搏波提取与包络线绘制做完高通滤波之后我们得到一串随心跳起伏的波形称为摆动波Oscillation Wave。接下来要找出每个心跳周期的最大幅值。可以对摆动波做绝对值处理然后寻找局部峰值幅度超过一定阈值比如0.3mmHg则认为是一个有效脉搏波。记录下这次波动的峰值幅度就能得到一系列随时间变化的包络点。把这些点按照时间顺序连接起来就是经典的示波法包络线。包络线的形状是评估算法的基础。标准的包络线应该是一个先上升后下降的单峰波形峰值出现的时刻对应平均压MAP。理论上当袖带压力等于平均压时血管壁在袖带压力下处于无载荷状态血管顺应性最大搏动幅度最大所以包络线峰值对应的袖带压力就是MAP。收缩压和舒张压通常通过峰值幅度的比例来确定常见的方法是收缩压对应的袖带压力在包络线上升段找幅度为峰值K1倍的时刻舒张压在下降段找幅度为峰值K2倍的时刻。不同厂家的算法系数不同有些用K10.45、K20.75有些用K10.5、K20.8甚至有自适应系数。毕设里不需要追求绝对精确但要理解原理并在文档里写清楚你用的系数和依据。我采用的是美国医疗仪器促进协会(AAMI)推荐常用的0.45/0.75系数实测误差在可接受范围内。需要特别提醒的是包络线提取要防止单次随机波动造成误判。建议对得到的峰值序列再做一次平滑比如三点滑动平均让包络更光滑。同时如果某个脉搏波的幅度明显偏离前后值很可能是袖带抖动或放气阀动作造成的可以剔除这个点用前后值的平均值代替。3.3 示波法血压判定逻辑有了包络线和对应的袖带压力值之后计算血压就变得很直接了。首先找到包络线的最大值令其为AmpMax记录此时对应的袖带压力mapValue这就是平均压MAP。然后分别从包络线起点向峰值方向扫描找到第一个时刻其幅度大于等于0.45AmpMax的点用该点的袖带压力作为收缩压SBP。再从峰值向终点方向扫描找到第一个幅度大于等于0.75AmpMax的点用该点的袖带压力作为舒张压DBP。这个逻辑在程序里就是两个循环但有几个边界条件要注意。如果包络线的幅度一直很小受试者脉搏微弱、袖带没绑紧、或者气路漏气AmpMax可能低于某个阈值此时应该判为测量失败显示Err。如果找到的SBP点恰好是包络线起点意味着起点就已经超过阈值可能是充气压力不足或者放气初期的振荡已经达到阈值这时需要把起点对应的压力当成收缩压吗我个人不建议更稳妥的做法是重新测量一次确保充气压力高于收缩压至少30mmHg。这也是为什么很多血压计默认充气到180mmHg就是为了覆盖绝大多数人的收缩压。另外血压值的单位必须统一。压力传感器标定后得到的压力和ADC值之间的比例系数单位通常是mmHg/LSB要仔细换算。比如XGZP6847传感器输出电压范围0.5~4.5V对应0~100kPa而1kPa约等于7.5mmHg所以满量程100kPa750mmHg但实际量程内0.5~4.5V对应0~100kPa时输出电压与压力线性度很高可以直接线性映射。公式里要小心的是kPa与mmHg的转换我见过很多同学写代码时把单位搞混测出来的血压值偏大好几倍。3.4 心率计算与异常判断计算心率可以通过两次脉搏波峰的间隔得到。在提取包络线的过程中我们已经逐个识别了脉搏波可以记录每个波峰出现的时刻。两个相邻波峰的时间间隔就是一次心跳周期。比如间隔是0.8秒则心率为60/0.875次/分。为了稳定建议取最近5~10个间隔的平均值用做心率显示。心率异常判断可以很简单如果心率小于40次/分或者大于200次/分认为测量异常显示Err如果相邻PP间隔差异过大比如超过20%提示心律不齐。心律不齐检测在毕设里可以作为创新点写但要注意算法要保守不要随便下结论。我当时只是简单做了一个变异性分析计算几个间隔的标准差如果超过一定值就显示波动没有做医学意义上的诊断这和答辩老师说清楚就行。4. 实操过程与核心环节实现4.1 开发环境搭建CubeMX Keil现在STM32开发的主流方式是用STM32CubeMX生成初始化代码再用Keil或者GCC编译。我不推荐自己从零手写寄存器初始化虽然那样能加深理解但对于毕设项目来说效率太低而且调试时容易出错。CubeMX的好处是图形化配置时钟、GPIO、ADC、定时器、串口、I2C等外设生成的代码结构清晰包含错误处理如assert_failed可以直接在此基础上写业务逻辑。工程搭建的要点是时钟配置好我一般把系统时钟设为72MHz外部8MHz晶振PLL倍频9倍。ADC配置为12位分辨率采样时间尽量长一些如55.5个周期这样内阻影响小采样值更稳定。定时器我配置一个1ms的Tick用于按键扫描、状态机计时、OLED刷新节拍。串口配置为115200用于调试打印配合Serial或者直接用电脑的串口助手。OLED如果是I2C接口配置好I2C后可以移植现成的SSD1306驱动。这些步骤不算难但要注意CubeMX生成的代码中ADC的校准函数ADC_Calibrate需要认真调用否则首次采样可能不准。4.2 状态机设计与主循环框架血压计的主程序不要写成线性的开泵-延时-关泵-放气-采样-计算那样会非常死板而且难以加入超时保护。建议设计一个简单的状态机状态包括IDLE待机状态屏幕显示提示等待按键INIT系统自检检查传感器是否连接气路是否漏气CHARGING充气阶段打开气泵实时读取压力直到压力达到目标值MEASURING测量阶段关闭气泵控制电磁阀以设定速度放气同时采集数据CALCULATING数据处理阶段分析采样数据计算血压/心率RESULT显示结果保存历史停止控件主循环里根据状态机当前状态执行相应的逻辑每个状态内部可以再分子步骤。比如MEASURING状态下每10ms执行一次控制输出调整PWM占空比每100ms记录一个采样点同时检查超时标志如果放气了60秒还没完成自动失败。这样设计的好处是任何异常情况都能从状态机中退出不至于卡死在某个循环里。4.3 充气压力与放气速度控制充气阶段气泵全速打开实时采集压力值当压力达到预设目标比如170mmHg时关闭气泵。为了提高充气效率可以先用较快速度充到目标值以下20mmHg然后用小功率慢充逼近避免过冲。但我的实现里直接用全速充气到目标值因为关闭气泵后压力还会惯性上升几mmHg所以在目标值-5mmHg时就关泵等压力稳定后如果略低于目标再补一小段充气。这样简单有效。放气阶段是血压测量成败的关键。放气速度太慢2mmHg/s测量时间长受试者不舒服且信号基线漂移大太快8mmHg/s每个脉搏波间隔内压力变化太大会降低包络线分辨力。目标值一般取3~5mmHg/s。电磁阀的PWM占空比需要调节但不同阀的流量特性不一样气路阻力也不一样所以最好用闭环控制。一个简单做法是在放气过程中每200ms计算一次当前压力的下降速率如果快于目标值就减小PWM占空比慢于目标值就增大PWM占空比。我用这个比例调节方法很快就稳定在4mmHg/s左右没有写复杂的PID。如果要做PID可以用增量式PIDKp大约0.1Ki约0.05Kd为0即可前提是PWM周期不能太长否则调节滞后明显。4.4 实测校准与数据对比硬件和代码全部完成后最关键的一步是校准。我的做法是找一台水银台式血压计或者一个精密气压表把袖带接到同一个压力源上在0~250mmHg范围内每隔20~30mmHg记录一次ADC读数然后用最小二乘法拟合出ADC值-mmHg的线性系数。这个过程一定要做因为即使传感器厂家给了典型灵敏度实际个体差异也很大。标定完成后我再找一个志愿者和一台医用电子血压计对比各自连续测三次取平均记录误差。如果误差在±5mmHg内就算合格。我实测的结果是收缩压误差大约在3~7mmHg舒张压误差4~8mmHg有些点超了这属于正常现象毕竟示波法本身的精度也受很多因素影响。对比数据要保留图表放进毕设论文的附录里这也是答辩老师喜欢看的内容。5. 常见问题与排查技巧实录5.1 ADC采到的数据跳变严重这是最常见的问题。现象是OLED上显示的压力值无规律跳变几分钟内数值乱飘。排查顺序先用万用表测传感器供电是否稳定如果供电波动大在电源引脚就近加100nF和10μF电容再检查传感器输出信号的屏蔽线袖带充气时气泵电机产生的电磁干扰会耦合到信号线上建议把模拟信号线用双绞线或屏蔽线且远离气泵驱动线最后看ADC参考电压STM32的内部VREF引脚如果悬空建议接一个0.1μF电容最好直接用3.3V电源作为参考但电源要干净。如果软件滤波已经做了还是跳得厉害可以试试在ADC采样时间上加大比如改为239.5周期让内部采样电容充分充电。5.2 放气速度控制不住放气速度忽快忽慢或者一直快。这可能是因为电磁阀的PWM频率太低阀芯动作不连续有卡顿感。把PWM频率提到1kHz以上同时关闭气泵后等待200ms让压力稳定再开始测量。另一个原因是放气阀驱动电路里没有续流二极管导致阀断电后延迟关闭实际导通时间比PWM占空比对应的时间长这样调节就不准确。加上续流二极管后会有明显改善。如果还是不行可以使用两个电磁阀并联一个做粗调常开微漏另一个做PWM细调这种双阀结构很多商用血压计都采用。5.3 串口调试没有输出很多人用串口打印压力值但发现串口助手没有数据显示。先检查CubeMX中串口引脚是不是映射到了USART1默认是PA9(TX)、PA10(RX)USB转TTL模块的RX/TX要对调。接着检查波特率是否一致115200还是9600。还有一点容易被忽略USB转TTL模块和STM32开发板要共地否则数据全是乱码或不输出。如果还不工作用示波器或逻辑分析仪看PA9有没有波形。另外有的STM32板子上的PA9/PA10已经接了别的外设最好直接看原理图确认。5.4 包络线提取不到有效峰值测量过程中屏幕上的波形一直是一条平线或噪声找不到明显的脉搏波峰。先不急着调算法先用一个很简单的办法验证传感器方向把袖带绑在手上传感器单独接一个万用表手动快速给袖带加压看传感器输出有没有变。如果传感器没有问题再检查ADC采样值单位看是不是把mmHg和kPa混了导致脉搏波幅度在数字量化后不到1个LSB。我在XGZP6847上遇到的情况是传感器满量程100kPa对应4V输出那么在100mmHg约13.3kPa时输出约0.53V而脉搏波引起的压力变化只有2mmHg对应输出变化只有0.013V而STM32的12位ADC在3.3V参考下1LSB约0.8mV所以理论上0.013V对应16个LSB应该可以分辨。但如果传感器增益不足信号被埋在噪声里就需要检查调理电路。总之先看原始值有没有脉动再谈滤波算法。6. 毕设答辩要点与项目扩展6.1 讲清楚你的创新点答辩时老师一般不会要求你的血压计精度达到医疗器械标准但你必须讲清楚你做了什么为什么这么做结果如何。这个项目可以提炼的创新点包括完整的示波法算法实现而不仅仅是调用模块加入了动态放气速度PID控制通过上位机绘制实时脉搏波形实现可视化设计了基于状态机的可靠测量流程具备超时保护。每一项都可以作为展示重点。我的建议是把代码模块结构、算法流程图用Visio画和实测数据曲线放在答辩PPT里比纯文字有说服力得多。6.2 源码与资料的整理规范毕设作品除了能跑还要能交差。源码目录建议包括Doc论文、电路图、使用说明、Hardware原理图、PCB、BOM、SoftwareMDK-ARM工程、Test测试记录、上位机工具。每个源文件开头写明功能、作者、日期。关键函数用注释说明输入输出。我在提交资料前特意整理了一份README写明开发环境版本、怎么编译、怎么烧录、操作方法、常见问题这样不仅是给自己留底也是老师判断你工程素养的重要依据。很多同学把资料堆在一起没有说明老师看两天都看不懂印象分会打折。6.3 后续可以怎么扩展这个项目做完以后还有很多可以扩展的方向。如果你对无线通信感兴趣可以加一块蓝牙模块如HC-05或者ESP8266把测量数据上传到手机APP如果你对低功耗感兴趣可以改用STM32L0系列在测量间隙进入Stop模式几个月不换电池如果你对机器学习感兴趣可以采集更多人的脉搏波数据训练一个血压回归模型研究更智能的算法。我当时没有继续扩展只做了一个简单的串口上位机用Python的pyserial读取数据并画波形但就是这个上位机帮我在答辩时很直观地展示了信号的提取过程也给老师的提问提供了很好的素材。做这个项目最大的感受是血压计看起来是一个小家电内部却涉及传感器、电机控制、信号处理、算法、UI几乎是把嵌入式系统的基础内容全部串起来了。源码和资料找起来不难但真正有价值的不是那几份代码而是你把它吃透、跑通、调试到稳定的过程。如果你现在正准备做这个题目我的建议是先搭硬件再把原始压力值打印出来确认信号可信然后一点点加上滤波和算法千万不要想着一口气写完所有代码再调那样遇到问题会非常难定位。我调试这个项目前后花了一个多月大部分时间都花在为什么这个点采出来是错上但只要过了信号采集这一关后面的算法和界面对你来说就是顺水推舟了。本文还有配套的精品资源点击获取
返回列表