十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

电子心率计课程设计全解析:从PPG信号到单片机心率计算的完整流程

电子心率计课程设计全解析:从PPG信号到单片机心率计算的完整流程 简介这是一份电子心率计课程设计说明书面向电子技术、测控技术与仪器等专业学生适合正在完成心率测量类课程设计或希望系统理解生理信号处理电路的初学者。文档从任务分析与方案设计切入给出采用红外传感器检测脉搏经放大器、低通滤波器、整形电路后利用计数分频计算心率并与标准范围比较、超限触发LED报警的整体方案。后续章节完整展开各环节设计包括TCRT5000(L)传感器选型与红外测脉搏原理、电压跟随器缓冲隔离作用、二级放大电路总增益660倍的计算过程、二阶有源低通滤波器截止频率1000Hz的品质因数设计以及整形电路和报警显示的实现。每个模块都结合仿真波形说明参数来源电路实现路径清晰方便直接参考搭建。资源包共包含1个doc文件容量1.6MB内容以文字、公式和电路图为主。已有351人学习下载对撰写课程设计报告或搭建实物电路具有较高参考价值。1. 引言为什么电子心率计是课程设计的“常青树”做电子类课程设计心率计绝对是最经典的选题之一你在学校实验室里看一圈十个项目里有三四个都是做这东西的。拿这个题目入手有一个天然的优势——它包含了一个完整电子系统该有的所有环节微弱信号采集、模拟信号调理、数字处理、人机交互显示。换句话说你把这一个项目吃透了等于把“传感器前端信号链单片机系统”这条主线整个过了一遍这比单纯焊一个流水灯或者写一个跑马蜂鸣器有价值得多。另外一个现实原因是它的容错空间大、成本可控。整个系统用的都是常见器件光电传感器、运放、单片机加起来几十块钱就算方案推倒重来也不心疼。而且心率计涉及生理信号正常人安静状态下心率大概在60到100次/分钟这个区间设计指标比较容易达到不会像高频通信或者大功率电路那样动不动就是一堆不可控因素。这篇博文我就以“电子心率计的设计”这个课程设计为载体从方案选型到硬件电路、再到软件处理和实测心得完整走一遍流程。无论你是刚拿到题目的在校生还是想复习一下模拟信号处理知识的工程师这篇文章都值得花几分钟看完。我会把很多设计文档里不会写、但老师答辩时一定会问的细节都讲清楚尤其是那些“看代码能跑、焊板子能亮但一测心率就乱跳”的问题基本都能在这篇文章里找到答案。2. 整体方案设计先别急着动手焊接想清楚这几个选择题2.1 第一道选择题光电式还是心电式心率检测从信号来源上分主要有两大流派光电容积脉搏波描记法PPG和心电图法ECG。光电式是利用红光或红外光照射皮肤血液流动时血管容积变化导致光的吸收量改变接收管检测到的光强信号就会呈现出和心跳同步的脉动分量。这种方案的探头就是一个发光管加一个光敏管实现简单手指一夹就行所以市面上绝大多数消费级手环、手表用的都是这个原理。ECG则是采集心脏电活动在体表产生的微弱电位差需要电极贴片接触皮肤信号更“根正苗红”但前端电路要处理的是毫伏级甚至微伏级信号对放大器的噪声和共模抑制比要求高得多而且电极接触不好还会带来一堆运动伪迹。对于课程设计这个场景我强烈建议选光电式。原因有几个一是探头可以自己做红外发射管加光敏三极管就搞定不需要买昂贵的专用电极二是信号幅度相对比心电大一些调试难度低不少适合在有限的时间周期内出成果三是老师看实物演示时手指一夹就能看到数字跳动效果直观。当然如果你指导老师明确要求做心电方向那就要把前端仪表放大器的设计当作重点来展示两种路线的技术高低各有侧重没有绝对的好坏。2.2 第二道选择题模拟为主还是以数字处理为主确定了传感器思路之后接下来要决定的是信号处理的分工。比较传统的做法是模拟链路为主光电信号经过前置放大、滤波、整形变成方波脉冲再用单片机数脉冲个数。这种方案的好处是信号链逻辑清晰每一个模块的作用都可以在示波器上直接看到答辩的时候讲起来非常有体系。另一种思路是前端简化将传感器输出的信号直接送单片机ADC采样然后在软件里做滤波、阈值检测和心率计算。这种方案的硬件更精简调试工作转移到代码里。但说实话课程设计的核心训练目标就是模拟电路如果一个项目从头到尾没有一级像样的运放电路评审老师很容易觉得设计深度不够。我的建议是走模拟前端数字计数的折中路线放大、滤波、整形都用硬件完成单片机只负责定时计数和显示。这样做既保住了硬件的含金量又能把软件控制在合理复杂度范围内正适合两周到一个月周期的课程设计。后面的内容我就按这个框架来讲。3. 核心硬件电路设计信号链路上的每一个环节都不能糊弄3.1 传感器探头与前置放大电路探头是整个系统的信号源头很多同学图省事直接买现成的心率传感器模块这当然可以但既然做设计我建议还是自己把探头搭一遍。一个典型的PPG探头结构是红外发光管比如940nm波长的紧贴皮肤一侧照射光敏三极管比如3DU5C放在旁边或正对面接收透射/反射光。发光管需要串联一个限流电阻电流控制在10到20毫安电流太大发热影响信噪比太小信号幅度不够。光敏管输出的是光电流信号需要先通过一个I-V转换电路变成电压信号。这里有两种做法简单一点是光敏管集电极接电源、发射极接电阻到地从发射极取电压讲究一点是用运放搭跨阻放大器优点是偏置电压固定线性度好适合信号幅度动态范围大的场景。课程设计我用的是后者基准确度有明显提升。前置放大电路参数计算以跨阻放大器为例运放选择LM358就可以起步虽然它不是低噪声运放但胜在便宜、易采购、单电源供电方便。光敏管产生的脉动光电流ΔI通常在微安级别假设我们要在输出端得到大约50mV的脉动交流信号那么跨阻反馈电阻Rf的取值可以这样估算[ R_f \frac{\Delta V_{out}}{\Delta I} \frac{50 \text{mV}}{5 \mu A} 10 k\Omega ]实际电路里我会在Rf两端并联一个10pF到100pF的小电容作用是限制带宽滤除高频干扰。这个电容太小了没用太大了会把有用信号的高频分量也削掉建议直接从100pF起步调在示波器上观察脉动波形最平滑的值就是合适的。3.2 滤波电路把工频干扰和基线漂移一起干掉传感器出来的信号有两个典型干扰必须处理。第一个是50Hz工频干扰来自电源和周围环境表现为信号上叠加的细小毛刺第二个是基线漂移因为手指按压力度变化、呼吸起伏导致信号的直流分量会缓慢上下移动如果不处理后面整形电路很容易误触发。针对工频干扰我用了二阶有源低通滤波器截止频率设在40Hz左右。这样心脏信号的频段——也就是0.5Hz到4Hz——保留完整而50Hz及以上的干扰被压下去。截止频率的计算公式是[ f_c \frac{1}{2\pi \sqrt{R_1 R_2 C_1 C_2}} ]假设取R1R239kΩC1C20.1μF代入可得[ f_c \frac{1}{2\pi \sqrt{39k \times 39k \times 0.1\mu \times 0.1\mu}} \approx 40.8 \text{Hz} ]对于基线漂移则是用高通滤波器来解决截止频率设在0.5Hz附近。这里要提醒一下截止频率太低会滤不掉漂移太高了会把心率信号本身的低频分量衰减掉导致波形变形。0.5Hz作为下限基本上对应30次/分钟的心率已经低于正常人生理范围了安全余量足够。3.3 整形电路从模拟信号到标准脉冲滤波后的信号是一个和心跳同步的脉动波形幅度可能只有几百毫伏要送单片机计数还得把它整形成标准方波。经典的方案是使用电压比较器。我用的是LM393它集成了两个独立的比较器其中一路用来做信号整形另一路可以做成窗口比较器或者留作备用。比较器需要一个阈值电压。最简单的做法是用电阻分压设置一个固定阈值但这种方法有一个隐患就是如果信号幅度动态变化比如换一个人测试峰值电压变了固定阈值可能就失效了。更好的方案是把信号的平均值提取出来作为自适应阈值怎么做呢就是取一个RC时间常数比较大的低通滤波网络把脉动信号的平均直流电平提取出来然后将这个电平通过电阻分压得到一个略低于平均电平的阈值。这样手指轻微移动导致信号整体偏移时阈值会跟着一起移动不会出现频繁误触发。这个技巧在实际测试中非常有用强烈推荐。关键设计计算对应脉冲信号LM393是开漏输出必须接一个上拉电阻到电源一般选4.7kΩ到10kΩ。上拉电阻的取值会影响输出上升沿的速度阻值太大上升沿会变缓单片机内部输入引脚带施密特触发还好但若外部走线较长建议用4.7kΩ。输入端的回差可以通过在正反馈电阻和输入电阻之间加一个几毫伏到几十毫伏的滞回区间来设置避免信号在阈值附近抖动导致输出反复翻转。滞回量的计算公式为[ V_{hysteresis} \frac{R_1}{R_1 R_2} \times (V_{OH} - V_{OL}) ]其中R2是正反馈电阻R1是输入串联电阻。我做的时候取R110kΩ、R21MΩ得到的滞回量大约15mV实测下来抗抖动效果不错。4. 软件与系统集成单片机这样写心率计算才稳4.1 测频法的实现逻辑硬件整形之后单片机要做的核心事情就是测频率。最常用的方法是定时计数法固定一个时间窗口T比如6秒统计这个窗口内到来的脉冲个数N那么心率就是[ HR \frac{N}{T} \times 60 ]这里有一个关键的工程权衡。T太短比如1秒虽然响应快但一个脉冲的误差就会导致心率显示偏差最多60次/分钟数值跳来跳去T太长比如30秒数值稳定但用户等得不耐烦。6秒是一个比较折中的窗口每次刷新显示一次实际使用中心律较齐的人跳动范围能控制在±2以内是可以接受的。窗口到达后将计数N乘以10就得到每分钟心率因为N/6×60 N×10这个乘法可以用移位或整数运算直接完成一点不费劲。还需要加一个超时判断比如连续2秒没有检测到脉冲说明手指可能拿开了这时显示“--”而不是一个残留的旧数值。心率计算演示假设6秒窗口内微控制器统计到中断引脚上的下降沿数量为8个那么心率计算如下[ HR \frac{8}{6} \times 60 80 \text{ bpm} ]软件里直接写成heart_rate pulse_count * 10;即可。要注意变量类型若心率最大按220 bpm算pulse_count最大为22乘10后为220用unsigned char就能表示但如果后续还想做报警阈值扫描建议直接使用unsigned int免得溢出问题在答辩时被老师问住。4.2 按键消抖与显示刷新策略系统除了测心率一般还要配一个或两个按键用来切换显示模式或记录最高最低值。按键消抖不要在中断里做阻塞延时最好是在主循环里通过状态机或周期查询的方式处理确认电平稳定超过20ms才认为是一次有效按下。显示我选用的是4位数码管一位显示状态三位显示心率值。刷新采用动态扫描每位点亮1ms整个周期4ms肉眼看起来就是稳定的数字。动态扫描的刷新频率不能太低否则会闪也不能让每位的导通时间太长否则亮度不均匀。1ms一位这个经验值在大多数场景下都表现良好。注意不要在定时器中断里频繁操作段选和位选引脚因为中断优先级高会导致主循环里的计数逻辑响应异常实测下来会产生计数丢脉冲的问题这一点我踩过坑。4.3 系统联调与整体流程硬件和软件分别调通后联调时建议按下面的顺序走一遍先用示波器看比较器输出端确认手指放入探头后有规则的方波输出频率随心跳变化。再将比较器输出连接到单片机外部中断引脚用万用表或逻辑分析仪确认引脚电平变化正常排除上下拉配置冲突。打开数码管显示确认心率数值变化趋势与手动数脉搏一致。这一步一定要找三个人测试因为不同人的信号强度差异很大最容易暴露阈值问题。最后测试边角场景比如手指快速拿开、大力按压、轻轻搭在探头上越怪异的动作越能帮你提前发现系统会怎么死掉。5. 调试心得与常见问题排查清单课程设计做出来“能跑”很简单但要做到“稳”就全靠调试阶段的经验。下表是我几次做这类项目总结出来的高发问题与对应排查方法。现象可能原因排查与解决方法无信号输出比较器输出始终为高或低传感器供电异常、LED未点亮、光敏管接反先用万用表测LED两端电压正常约1.2V左右再用示波器逐级往前查信号有波形但频率乱跳心率值忽快忽慢阈值电压设置不当比较器误触发改为自适应阈值方案检查滞回电阻是否焊错观察信号幅值是否过小手指放上去显示值明显高于实际心率工频干扰叠加到信号上检查滤波电路是否生效确认探头屏蔽线接地是否良好40Hz低通是否被短路换一个人测试数值异常信号幅度差异大阈值无自适应能力适当增大前置放大增益调高自适应阈值的跟随速度数码管显示闪烁严重动态扫描频率过低或每位点亮时间不均匀优化定时器中断确保每位占空比一致扫描频率至少提到250Hz以上接上单片机后模拟信号变差数字地与模拟地混接噪声耦合单点接地将模拟地、数字地在电源端汇合电源加100nF去耦电容手指静止时测没问题稍微一动就乱跳运动伪迹导致基线漂移加剧增加高通滤波级数在软件里增加连续无效数据丢弃机制这里再分享两个硬件调试的独门技巧。第一个判断运放电路是否正常工作时用手轻轻触摸运放输入端示波器上应当能看到明显的50Hz工频波形被放大如果什么都看不到大概率放大链路存在虚焊或器件损坏。第二个整机测试前先用一个信号发生器在比较器输入端注入一个1Hz的方波看看计数器逻辑是否正常这样可以先把硬件和软件隔离起来避免一上来就合力排查大大节省时间。另外必须强调一下电源设计。很多课程设计用的是USB供电但USB的5V纹波并不小。建议在系统电源入口串联一个几十微法的电解电容并联一个100nF陶瓷电容这组组合能应对绝大多数低频和高频噪声。如果项目对测量精度有更高要求可以考虑使用低噪声LDO给模拟部分单独供电数字部分用另一路两路之间用磁珠隔离这算是一个加分项答辩时讲出来非常加分。6. 写在最后课程设计收获的绝不止是一个“能用的模块”做电子心率计这个项目我最大的体会是“设计”二字的真正含义不在电路图本身而在于你做每一个决定前能不能讲清楚为什么。为什么用光电式不用心电式为什么截止频率取0.5到40Hz为什么计数窗口选6秒而不是1秒这些问题才是评审老师真正感兴趣的也是你未来做工程时每天都在反复权衡的东西。最后分享一个答辩小技巧把示波器存下来几张关键节点的波形图分别是传感器原始信号、滤波后信号、比较器输出方波打印出来贴在报告最后。这比文字描述一百句都有效因为评审老师一眼就能看出你对每一级电路的作用是真正理解的是动手验证过的。项目做完了别急着拆留着探头和信号调理部分下次做心电采集或者脉搏血氧相关的设计时这部分可以直接复用性价比非常高。本文还有配套的精品资源点击获取
返回列表