一、血压计系统概述:示波法原理、系统框图与关键指标
大家好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊血压计系统的那些事儿。
说实话,我最早接触血压计项目时,也踩过不少坑。记得有一次,明明传感器信号看着挺干净,可算出来的血压值就是跟水银柱对不上。后来才发现,是采样率设得太低,把关键的脉搏波峰给漏掉了。嗯,这种教训,一次就够你记一辈子。
所以,在动手写代码之前,咱们得先把底层的原理和指标搞清楚。你想想看,如果连血压计是怎么工作的都不明白,那后面的滤波算法、ADC配置,岂不是空中楼阁?
1.1 示波法原理:血压计是怎么“猜”出血压的?
市面上绝大多数电子血压计,用的都是示波法。说白了,它不是直接测血压,而是通过测量袖带里的压力波动,间接推算出来的。
过程是这样的:
- 充气加压:袖带充气,压力升到高于收缩压(比如160-180 mmHg),把动脉血管压扁,血流暂时阻断。
- 阶梯放气:然后开始缓慢放气,每次放掉一点点压力。这时候,随着袖带压力下降,血管开始重新打开,血流冲击血管壁,产生微小的压力波动。
- 捕捉振荡波:压力传感器会同时测到两个信号:一个是袖带的静压(直流分量),另一个是叠加在上面的脉搏振荡波(交流分量)。这个振荡波的幅度,会随着袖带压力变化而变化。
- 特征点提取:振荡波幅度最大的那个点,对应的袖带压力,就是平均压。然后,根据经验公式,从幅度包络线的上升沿和下降沿,推算出收缩压和舒张压。
核心要点:示波法测的不是“点”,而是“趋势”。它依赖的是脉搏波幅度包络线的形态,而不是某个瞬间的绝对值。这一点,在做ADC采样和滤波时,至关重要。
我个人习惯把示波法比作“听诊器的电子版”。医生用听诊器听的是柯氏音,我们电子血压计听的是脉搏波的幅度变化。殊途同归。
1.2 血压计系统框图:信号从哪儿来,到哪儿去?
搞清楚了原理,咱们来看看硬件上是怎么实现的。一个典型的示波法血压计,系统框图大致如下:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 袖带+ │ │ 压力 │ │ 模拟 │ │ MCU │
│ 气泵 │───>│ 传感器 │───>│ 前端 │───>│ (ADC) │
│ 电磁阀 │ │ │ │ 滤波 │ │ 算法 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │
▼ ▼
(静压信号) (脉搏波信号)
我来拆解一下每个环节:
- 袖带 + 气泵 + 电磁阀:这是执行机构。气泵负责充气,电磁阀负责放气。放气速度要稳,一般控制在2-5 mmHg/s。太快了,采样点不够,算不准;太慢了,病人胳膊难受。
- 压力传感器:把物理压力转换成电压信号。常用的有压阻式、电容式。我建议选表压传感器,量程0-300 mmHg就够用。分辨率要高,至少12位起步。
- 模拟前端:这里包含两个关键路径:
- 直流路径:提取袖带静压,用于判断充放气状态。
- 交流路径:滤除直流分量,放大微弱的脉搏波信号(幅度通常只有几毫伏)。
- MCU + ADC:模数转换,把模拟信号变成数字量。然后运行滤波算法、特征提取算法,最终算出血压值。
我的经验:很多新手容易忽略模拟前端的噪声抑制。我曾经在一个项目中,因为PCB布局不好,电源纹波直接耦合到了脉搏波信号里,导致算法怎么调都调不准。后来加了一级有源低通滤波,才把问题解决。所以,硬件底子打不好,软件再牛也白搭。
1.3 关键指标:采样率、分辨率、精度
这部分是咱们做嵌入式开发最关心的。ADC怎么配?滤波怎么设?全看这几个指标。
1.3.1 采样率
采样率决定了你能捕捉到多快的信号变化。对于脉搏波,它的主要频率成分集中在0.5-5 Hz。根据奈奎斯特定理,采样率至少要是信号最高频率的2倍,也就是10 Hz。
但实际工程中,我从来不会卡着这个下限去设。为什么?因为你要考虑后续的数字滤波和特征点提取。比如,你要做数字低通滤波,采样率太低,滤波器的过渡带就会很陡,容易引起相位失真,导致脉搏波波形变形。
我个人建议:
- 对于静压信号:采样率100 Hz就足够了。变化慢,不需要太高。
- 对于脉搏波信号:采样率建议设在200-500 Hz。这样既能保证波形细节,又不会给MCU带来太大负担。
注意:采样率不是越高越好。太高了,数据量暴增,MCU处理不过来,反而会引入额外的延迟和抖动。我曾经见过有人用1 kHz采样脉搏波,结果MCU的DMA被撑爆,系统直接死机。嗯,这就是典型的“过犹不及”。
1.3.2 分辨率
分辨率指的是ADC能分辨的最小电压变化。对于12位ADC,参考电压3.3V,分辨率就是3.3V / 4096 ≈ 0.8 mV。
那血压计需要多少分辨率呢?咱们算一笔账:
- 压力传感器灵敏度:典型值10 mV/mmHg(不同传感器有差异)。
- 脉搏波幅度:通常只有1-5 mmHg,也就是10-50 mV。
- 如果ADC分辨率是0.8 mV,那么对于1 mmHg的脉搏波(10 mV),你能分辨出大约12个台阶。勉强够用。
我的建议:
- 至少用12位ADC。
- 如果条件允许,上16位ADC或者24位Σ-Δ ADC。分辨率高了,后续的滤波算法会轻松很多,信噪比也更好。
一句话总结:分辨率决定了你的“视力”。分辨率不够,小信号就淹没在量化噪声里,神仙算法也救不了。
1.3.3 精度
精度和分辨率是两码事。分辨率高不代表精度高。精度指的是测量值与真实值之间的偏差。
对于血压计,行业标准(比如AAMI/ISO 81060-2)要求:
| 指标 | 要求 |
|---|---|
| 平均误差 | ≤ ±5 mmHg |
| 标准差 | ≤ 8 mmHg |
影响精度的因素很多:
- 传感器本身的非线性:需要做校准和补偿。
- ADC的参考电压漂移:温度变化会引起参考电压波动,导致测量值偏移。
- 算法误差:特征点提取不准,或者经验公式不匹配。
我记得有一次做产品认证,样机送检前,我特意把ADC的参考电压用高精度万用表测了一遍,发现比标称值偏了0.5%。别小看这0.5%,换算成压力值就是1.5 mmHg的误差。后来我在软件里加了一个参考电压校准系数,才把精度拉回来。
避坑指南:我曾经因为偷懒,直接用MCU内部的参考电压,结果产品在高温环境下精度严重超标。从那以后,我但凡做血压计,一律用外部高精度参考电压芯片,比如REF3033。多花几毛钱,省心一大截。
小结
好了,第一章的内容就到这里。咱们把示波法的原理、系统框图、以及采样率、分辨率、精度这几个关键指标都捋了一遍。这些东西看着基础,但都是后面所有工作的根基。
下一章,我会带大家深入ADC的配置细节,包括怎么选通道、怎么设置采样时间、怎么用DMA来减轻CPU负担。到时候咱们直接上代码,手把手教你怎么把信号“抓”进来。
记住一句话:好的开始是成功的一半。把基础打牢,后面的路就好走了。
咱们下章见。