3. 压力传感器选型与校准

各位同学好,我是老张。今天咱们聊聊血压计里最核心的器件——压力传感器。说实话,我见过太多项目因为传感器选型不当,量产时吃大亏。嗯,咱们一步步来。

3.1 传感器类型:压阻式 vs 电容式

目前市面上主流的血压计压力传感器,基本就两大家族:压阻式电容式。我个人的习惯是,先看应用场景再选型,而不是盲目追新。

压阻式传感器

说白了,就是利用硅材料的压阻效应。压力变化时,电阻值跟着变。这种传感器我用了十几年,最大的优点是线性度好、响应快。我在项目中遇到过一批传感器,零漂特别大,后来发现是封装应力没释放干净。所以选压阻式时,封装工艺一定要看仔细。

  • 优点:线性度好(通常<0.1%FS)、响应速度快、成本低
  • 缺点:温漂较大(需要补偿)、对封装应力敏感
  • 典型型号:NXP MPXV5050GP、Honeywell 24PC系列

电容式传感器

电容式传感器靠的是极板间距变化引起电容值改变。你想想看,它本质上是个微机械结构。我建议在需要低功耗、高灵敏度的场景下优先考虑它。不过要注意,电容式对寄生电容和湿度比较敏感,PCB布局要格外小心。

  • 优点:灵敏度高、功耗极低、温漂相对小
  • 缺点:非线性较明显、易受寄生电容干扰、成本稍高
  • 典型型号:Infineon DPS310、TE MS5803

我的选型建议

量产血压计,我个人更倾向压阻式。原因很简单——成熟、稳定、供应链好找。电容式虽然指标漂亮,但量产一致性控制起来更费劲。当然,如果你做的是高端腕式血压计,对功耗有极致要求,电容式也是好选择。

3.2 关键参数解读

选传感器不能光看数据手册上的漂亮数字。我吃过亏,所以下面这几个参数,你一定要吃透。

参数 含义 血压计要求 避坑指南
量程 传感器能测量的压力范围 通常0~300mmHg(约40kPa) 别选刚好够的,留20%余量。我曾经选过0~250mmHg,结果过压测试全挂了。
精度 测量值与真实值的偏差 ±1mmHg以内(0.13%FS) 注意区分「精度」和「分辨率」。分辨率再高,精度不行也白搭。
温漂 温度变化引起的输出漂移 ≤0.1%FS/℃ 这是血压计最大的坑。零漂可以校准,温漂必须靠算法补。
响应时间 压力变化到输出稳定的时间 ≤1ms 血压测量是动态过程,响应慢了波形会失真。

⚠️ 重要提醒

我曾经在量产时发现一批传感器精度都合格,但温漂一致性很差。后来查出来是供应商换了芯片内部的胶水材料。所以批量供货前,一定要做温漂抽检,别只看样品报告。

3.3 传感器校准原理

校准,说白了就是给传感器「定标」。再好的传感器,出厂也有偏差。咱们得在产线上把它校准到标准值。

零点校准

零点校准就是测「没有压力」时的输出值。理想情况下应该是0,但实际总有偏移。我习惯的做法是:

  1. 让传感器通大气(压力=0)
  2. 读取ADC值,记为Offset
  3. 后续所有测量值都减去这个Offset

嗯,这里要注意:零点校准必须在传感器稳定后进行。我见过产线工人刚通电就校准,结果零点漂了2mmHg。建议上电后等3~5秒再操作。

满量程校准

满量程校准是确定传感器的「斜率」或「增益」。通常用标准压力源施加一个已知压力(比如250mmHg),然后计算增益系数。

// 校准流程伪代码
// 1. 零点校准
adc_zero = read_adc();  // 通大气时读取
// 2. 满量程校准
set_pressure(250.0);    // 施加250mmHg标准压力
adc_full = read_adc();
gain = 250.0 / (adc_full - adc_zero);
// 3. 实际测量
adc_meas = read_adc();
pressure = (adc_meas - adc_zero) * gain;

💡 经验之谈

我建议产线上做两点校准就够了——0点和满量程点。三点校准虽然更准,但产线节拍受不了。如果传感器线性度好,两点校准完全能满足±1mmHg的要求。

3.4 温度补偿算法

温度补偿是血压计校准里最头疼的部分。为什么?因为压力传感器对温度太敏感了。你想想看,冬天和夏天测同一个血压计,读数能差5~10mmHg。这绝对不行。

为什么需要温度补偿?

压阻式传感器的温漂主要来自两方面:

  • 零点温漂:没压力时,输出随温度变化
  • 灵敏度温漂:同样的压力,不同温度下输出不同

我在项目中遇到过一批传感器,常温下校准得好好的,放到40℃恒温箱里,零点漂了3mmHg。后来加了温度补偿才搞定。

常用的补偿方法

方法一:查表法

最简单粗暴。在不同温度下标定出补偿系数,存成表格。运行时查表插值。

// 温度补偿查表示例
// 假设在10℃、25℃、40℃下标定了补偿系数
typedef struct {
    float temp;
    float offset_comp;  // 零点补偿值
    float gain_comp;    // 增益补偿系数
} comp_table_t;

comp_table_t comp_table[] = {
    {10.0, 1.2, 0.998},
    {25.0, 0.0, 1.000},
    {40.0, -1.5, 1.003}
};

float temp_compensate(float raw_pressure, float current_temp) {
    // 线性插值计算补偿值
    // ... 插值代码略
    return compensated_pressure;
}

方法二:多项式拟合

如果传感器温漂特性比较平滑,可以用二次或三次多项式拟合。我比较推荐这种方法,因为省存储空间,而且连续性好

// 二次多项式补偿
// 假设拟合结果为:comp = a*T^2 + b*T + c
float temp_comp(float raw, float T) {
    float comp = a*T*T + b*T + c;
    return raw + comp;
}

我的建议

量产时,我倾向于查表法+线性插值。原因很简单:

  • 查表法对MCU算力要求低
  • 线性插值在温度点足够密时,精度完全够用
  • 产线标定时,只需要在3~5个温度点下采集数据

多项式拟合虽然看起来高级,但万一传感器特性不是平滑曲线,拟合误差反而大。我吃过这个亏,后来老老实实改回查表法。

产线温度补偿流程

实际产线上怎么做?我给大家梳理一下:

  1. 常温标定(25℃):做零点校准和满量程校准
  2. 高温标定(40℃):记录温漂数据
  3. 低温标定(10℃):记录温漂数据
  4. 生成补偿表:根据三点数据计算补偿系数
  5. 写入EEPROM:每个传感器单独存储补偿参数

⚠️ 量产注意事项

我曾经犯过一个错误——把所有传感器的补偿参数写成一个固定值。结果同一批货,有的准有的不准。后来才意识到,每个传感器都有自己的「个性」,必须单独标定、单独存储补偿参数。虽然产线慢一点,但质量有保障。

3.5 小结

好了,这一章的内容就这些。总结几个要点:

  • 压阻式传感器是血压计的主流选择,性价比高
  • 选型时重点关注温漂参数,别被精度数字迷惑
  • 零点校准和满量程校准是产线必备,两点法够用
  • 温度补偿推荐查表法+线性插值,每个传感器单独标定

下一章咱们聊聊气路设计和气泵选型,那又是另一番天地了。各位先消化一下,有问题随时交流。

📌 课后思考

如果你手头的传感器温漂是0.15%FS/℃,量程300mmHg,温度从20℃变到35℃,最大可能引入多少误差?算一算,下节课我抽查。