3、压力传感器详解:压阻式压力传感器原理、信号调理电路、校准与标定方法、温度补偿

压力传感器,在嵌入式系统里太常见了。从无人机的高度测量,到智能穿戴的气压监测,再到工业现场的液压控制,到处都有它的身影。今天咱们就好好聊聊压阻式压力传感器——这是目前应用最广、性价比最高的一种。

3.1 压阻式压力传感器原理

说白了,压阻式传感器就是利用了一个物理现象:半导体材料受到压力时,它的电阻值会发生变化。这个现象叫压阻效应。

我刚开始接触这个领域时,总把它和压电效应搞混。后来才明白,压电效应是产生电荷,压阻效应是改变电阻,完全是两码事。

典型的压阻式压力传感器内部,有一个很薄的硅膜片。膜片上通过扩散工艺制作了四个压敏电阻,通常接成惠斯通电桥的形式。当压力作用在膜片上时,膜片发生形变,四个电阻的阻值会发生变化——两个增大,两个减小。电桥的输出电压就和这个压力成正比了。

核心公式:

电桥输出电压 Vout = Vex × (ΔR / R) × G

其中 Vex 是激励电压,ΔR/R 是电阻相对变化率,G 是电桥增益系数。

你想想看,这个结构其实很巧妙。四个电阻做成全桥,不仅灵敏度高,还能自动抵消温度带来的共模误差。嗯,这里要注意,全桥接法对温度补偿确实有好处,但并不是万能的。

3.2 信号调理电路

传感器出来的信号,通常只有几个毫伏到几十个毫伏。直接送给ADC?不行,信号太弱了,噪声都能把它淹没。所以我们需要信号调理电路。

我个人习惯把调理电路分成三级:

  1. 前置放大:用仪表放大器把差分信号放大到伏级。我推荐AD620或INA128,便宜又好用。
  2. 滤波:二阶低通滤波器,截止频率根据应用场景定。测气压的话,10Hz就够了;测动态压力,可能需要100Hz以上。
  3. 电平偏移:把信号调整到ADC的输入范围。比如0-3.3V。

我在一个无人机气压计项目中遇到过一个问题:信号调理电路输出噪声很大,足有50mV的峰峰值。查了半天,发现是电源纹波串进来了。后来在仪表放大器的供电脚加了个LC滤波,噪声立刻降到了5mV以下。

实战技巧:

仪表放大器的参考端(REF)不要直接接地。用一个电压跟随器输出一个稳定的偏置电压,这样你可以灵活调整输出信号的零点。

3.3 校准与标定方法

传感器出厂时,每个个体的零点和灵敏度都有差异。不校准?那测量误差可能高达20%。所以校准是必须的。

校准说白了就是两件事:找零点,找斜率。

我常用的方法是两点校准法:

  • 第一步:在零压力下,记录ADC读数,记为 Z0
  • 第二步:在已知标准压力 Pref 下,记录ADC读数,记为 Sref
  • 第三步:计算灵敏度系数 K = (Sref - Z0) / Pref
  • 第四步:实际压力 P = (ADC_reading - Z0) / K。

如果要求更高精度,可以用多点校准,然后做线性插值或多项式拟合。我曾经给一个医疗设备做传感器标定,用了10个压力点做三次多项式拟合,精度做到了0.1%以内。

注意:

校准时的压力源一定要稳定。我见过有人用手动气压泵,手一抖压力就跳了,标出来的数据根本不能用。建议用高精度的压力控制器,或者至少用带锁紧功能的螺旋压力泵。

3.4 温度补偿

压阻式传感器对温度很敏感。温度一变,零点和灵敏度都会漂。不补偿的话,夏天和冬天的读数能差好几个百分点。

温度补偿的方法,我归纳为三种:

方法 原理 精度 成本
硬件补偿 在电桥中串入热敏电阻或恒流源 中等
查表法 在不同温度下标定,建立温度-补偿系数表
模型法 建立温度-压力-输出的数学模型 最高

我个人最推荐查表法。原因很简单:实现起来不复杂,精度也够用。具体做法是:

  1. 把传感器放进温箱,从-20°C到60°C,每10°C取一个点。
  2. 在每个温度点下,做一次完整的压力校准。
  3. 把零点和灵敏度的温度系数存成表格。
  4. 运行时,用温度传感器读数查表,做线性插值。
// 温度补偿示例代码(伪代码)
float compensate_pressure(float raw_adc, float temp_c) {
    // 查表得到当前温度的零点和灵敏度
    float zero = lookup_zero(temp_c);
    float sens = lookup_sensitivity(temp_c);
    
    // 计算补偿后的压力
    float pressure = (raw_adc - zero) / sens;
    return pressure;
}

float lookup_zero(float temp) {
    // 线性插值实现
    int idx = (int)((temp + 20.0) / 10.0);
    float t0 = -20.0 + idx * 10.0;
    float t1 = t0 + 10.0;
    float z0 = zero_table[idx];
    float z1 = zero_table[idx+1];
    return z0 + (z1 - z0) * (temp - t0) / (t1 - t0);
}

避坑指南:

我曾经在一个项目中,温度补偿后反而误差更大了。排查了很久,发现是温度传感器和压力传感器的热时间常数不一样。压力传感器贴在金属管壁上,温度变化慢;温度传感器在PCB上,温度变化快。两者读数不同步,补偿自然不准。解决办法是把温度传感器也贴在管壁上,或者加一个低通滤波器让温度信号慢下来。

好了,关于压阻式压力传感器,原理、调理电路、校准、温度补偿,这些核心内容都讲到了。下一章咱们聊聊加速度计和陀螺仪,这两个家伙在姿态解算里可是主角。