3、压力传感器详解:压阻式压力传感器原理、信号调理电路、校准与标定方法、温度补偿
压力传感器,在嵌入式系统里太常见了。从无人机的高度测量,到智能穿戴的气压监测,再到工业现场的液压控制,到处都有它的身影。今天咱们就好好聊聊压阻式压力传感器——这是目前应用最广、性价比最高的一种。
3.1 压阻式压力传感器原理
说白了,压阻式传感器就是利用了一个物理现象:半导体材料受到压力时,它的电阻值会发生变化。这个现象叫压阻效应。
我刚开始接触这个领域时,总把它和压电效应搞混。后来才明白,压电效应是产生电荷,压阻效应是改变电阻,完全是两码事。
典型的压阻式压力传感器内部,有一个很薄的硅膜片。膜片上通过扩散工艺制作了四个压敏电阻,通常接成惠斯通电桥的形式。当压力作用在膜片上时,膜片发生形变,四个电阻的阻值会发生变化——两个增大,两个减小。电桥的输出电压就和这个压力成正比了。
核心公式:
电桥输出电压 Vout = Vex × (ΔR / R) × G
其中 Vex 是激励电压,ΔR/R 是电阻相对变化率,G 是电桥增益系数。
你想想看,这个结构其实很巧妙。四个电阻做成全桥,不仅灵敏度高,还能自动抵消温度带来的共模误差。嗯,这里要注意,全桥接法对温度补偿确实有好处,但并不是万能的。
3.2 信号调理电路
传感器出来的信号,通常只有几个毫伏到几十个毫伏。直接送给ADC?不行,信号太弱了,噪声都能把它淹没。所以我们需要信号调理电路。
我个人习惯把调理电路分成三级:
- 前置放大:用仪表放大器把差分信号放大到伏级。我推荐AD620或INA128,便宜又好用。
- 滤波:二阶低通滤波器,截止频率根据应用场景定。测气压的话,10Hz就够了;测动态压力,可能需要100Hz以上。
- 电平偏移:把信号调整到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 温度补偿
压阻式传感器对温度很敏感。温度一变,零点和灵敏度都会漂。不补偿的话,夏天和冬天的读数能差好几个百分点。
温度补偿的方法,我归纳为三种:
| 方法 | 原理 | 精度 | 成本 |
|---|---|---|---|
| 硬件补偿 | 在电桥中串入热敏电阻或恒流源 | 中等 | 低 |
| 查表法 | 在不同温度下标定,建立温度-补偿系数表 | 高 | 中 |
| 模型法 | 建立温度-压力-输出的数学模型 | 最高 | 高 |
我个人最推荐查表法。原因很简单:实现起来不复杂,精度也够用。具体做法是:
- 把传感器放进温箱,从-20°C到60°C,每10°C取一个点。
- 在每个温度点下,做一次完整的压力校准。
- 把零点和灵敏度的温度系数存成表格。
- 运行时,用温度传感器读数查表,做线性插值。
// 温度补偿示例代码(伪代码)
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上,温度变化快。两者读数不同步,补偿自然不准。解决办法是把温度传感器也贴在管壁上,或者加一个低通滤波器让温度信号慢下来。
好了,关于压阻式压力传感器,原理、调理电路、校准、温度补偿,这些核心内容都讲到了。下一章咱们聊聊加速度计和陀螺仪,这两个家伙在姿态解算里可是主角。