3、流量传感器数据采集:热膜式与压差式
3.1 热膜式流量传感器原理
热膜式流量传感器基于热传递原理(即King’s Law)工作。传感器内部有一个加热元件(热膜)和两个温度敏感元件(通常为热敏电阻或热电堆)。
- 工作过程:加热元件将热膜加热到高于气体温度的一个恒定温差(例如200°C)。当气流流过热膜时,会带走热量,导致热膜温度下降。
- 信号输出:为了维持恒定的温差,电路需要增加加热电流。该加热电流的变化量(或桥路输出电压)与气体的质量流量成非线性关系,通常遵循:
I² · R = (A + B · √(ρ·v)) · ΔT,其中ρ为气体密度,v为流速。 - 特点:直接测量质量流量,响应速度快(毫秒级),对气体成分敏感(需校准),无移动部件,压损小。
3.2 压差式流量传感器原理
压差式传感器基于伯努利方程和节流效应。通过在流道中设置一个节流元件(如孔板、文丘里管或层流元件),产生与流量相关的压差。
- 工作过程:气流通过节流元件时,流速增加,静压下降。在节流元件前后引出两个压力端口,连接到差压传感器(如MEMS压阻式差压芯片)。
- 信号输出:差压ΔP与体积流量Q的关系为:
Q = K · √(ΔP / ρ),其中K为流量系数(与节流件几何形状有关)。 - 特点:结构简单、成本低、测量范围宽。但输出为体积流量,需温度压力补偿才能得到质量流量;响应速度较慢(受差压腔体容积影响),且存在永久压损。
3.3 流量传感器校准方法
校准的目的是建立传感器输出(电压/电流/数字值)与标准流量之间的映射关系。对于呼吸机应用,校准通常在标准温湿度条件下(22°C,50%RH,1atm)进行。
3.3.1 多点静态校准
- 标准源:使用高精度质量流量控制器(MFC)或皂膜流量计作为基准。
- 数据采集:从0到最大流量(如0~180 L/min),选取10~15个流量点,记录传感器原始ADC值。
- 拟合曲线:对于热膜式,常用多项式拟合(如4阶)或分段线性插值;对于压差式,常用平方根拟合:
Flow = a · √(ADC_raw - ADC_offset) + b - 验证:回测误差应小于±2%读数或±0.5 L/min(取较大值)。
3.3.2 动态校准(时间常数补偿)
呼吸机需要快速响应(吸气相上升时间<10ms)。静态校准无法补偿传感器的动态滞后。需通过阶跃响应实验获取传感器的时间常数τ,并在软件中进行一阶滞后补偿:
# 数字补偿滤波器(一阶超前)
def compensate_sensor(raw_value, prev_compensated, tau, dt):
alpha = tau / (tau + dt)
compensated = (raw_value - (1 - alpha) * prev_compensated) / alpha
return compensated
3.4 使用ADC采集模拟流量信号
呼吸机中常用的ADC类型为逐次逼近型(SAR ADC)或Σ-Δ ADC。以下以STM32G4系列内置12位SAR ADC为例。
3.4.1 硬件连接要点
- 信号调理:传感器输出通常为0.5~4.5V(或0~5V),需经过运放(如OPA2333)进行电平移位和阻抗匹配,使信号落在ADC输入范围(0~3.3V)。
- 抗混叠滤波:在ADC输入端加一阶RC低通滤波器,截止频率设为信号最高频率的5~10倍(呼吸频率最高约2Hz,但流量波形包含谐波,建议fc=50Hz)。
- 参考电压:使用外部高精度基准(如REF3033),避免内部Vref随温度漂移。
3.4.2 软件采集与滤波(Python示例)
以下代码模拟从ADC读取原始值,并应用校准曲线和数字滤波:
import numpy as np
import matplotlib.pyplot as plt
# 模拟ADC采集(假设采样率1kHz)
fs = 1000.0
t = np.linspace(0, 2, int(2*fs))
# 模拟真实流量信号(正弦+噪声)
true_flow = 30 + 20 * np.sin(2*np.pi*1.5*t) # L/min
# 模拟传感器非线性响应(压差式)
adc_raw = 200 + 1500 * np.sqrt(true_flow / 100) + np.random.normal(0, 5, len(t))
# 校准参数(从静态校准获得)
a = 0.044 # 系数
b = -0.5 # 偏移
adc_offset = 200
# 应用校准曲线
flow_calc = a * (adc_raw - adc_offset)**2 + b
# 数字低通滤波(二阶巴特沃斯,截止频率20Hz)
from scipy.signal import butter, filtfilt
b, a = butter(2, 20/(fs/2), btype='low')
flow_filtered = filtfilt(b, a, flow_calc)
# 绘图对比
plt.figure(figsize=(10,4))
plt.plot(t, true_flow, 'k--', label='True Flow')
plt.plot(t, flow_calc, 'r', alpha=0.5, label='Raw Calibrated')
plt.plot(t, flow_filtered, 'b', label='Filtered Output')
plt.xlabel('Time (s)')
plt.ylabel('Flow (L/min)')
plt.legend()
plt.grid(True)
plt.show()
3.4.3 关键注意事项
| 问题 | 解决方案 |
|---|---|
| ADC采样抖动 | 使用硬件定时器触发ADC,避免软件延时抖动 |
| 电源噪声耦合 | 传感器与ADC使用独立LDO供电,模拟地与数字地单点连接 |
| 传感器零点漂移 | 每次开机执行自动归零(关闭气流后采集10个样本取平均) |
| 温度影响 | 在传感器附近放置温度传感器,进行软件温度补偿 |
3.5 实战建议
- 热膜式:优先用于需要快速响应和直接质量流量的场景(如吸气阀控制)。注意气流中的水汽会改变热导率,需在传感器前加防水透气膜。
- 压差式:适合成本敏感且对压损不敏感的场景(如呼气端流量监测)。务必在软件中实现平方根开方运算,并注意小流量时的信噪比问题。
- 校准周期:临床呼吸机建议每6个月或更换传感器模块后重新校准。