4、氧浓度传感器数据采集:电化学与顺磁式氧传感器原理、氧浓度信号调理电路、氧浓度数据读取与换算

4.1 氧浓度传感器原理对比

在呼吸机系统中,氧浓度(FiO₂)的精确测量直接关系到患者的安全与治疗效果。目前主流方案分为两类:电化学式顺磁式。两者在响应速度、寿命、精度和成本上差异显著,需根据呼吸机档次(家用/急救/重症ICU)进行选型。

特性电化学氧传感器顺磁式氧传感器
工作原理氧气在电极上发生电化学反应,产生与氧分压成正比的电流利用氧气的高顺磁性(磁化率远高于其他气体),在磁场中产生压力差或热磁效应
输出信号微弱电流(nA ~ μA级),需跨阻放大差分电压(mV级)或频率信号
响应时间(T90)10 ~ 30 秒(较慢)< 200 ms(极快,适合实时控制)
寿命1 ~ 2 年(电解液消耗)> 5 年(无消耗性材料)
精度±1% ~ ±2% O₂±0.1% ~ ±0.5% O₂
成本低(几十元)高(数百至上千元)
适用场景家用呼吸机、急救转运ICU高端呼吸机、麻醉机

4.2 氧浓度信号调理电路设计

4.2.1 电化学传感器调理电路(跨阻放大器 + 偏置补偿)

电化学传感器输出为电流信号,典型灵敏度为 50 ~ 100 nA/%O₂。必须使用低偏置电流、低噪声的运算放大器(如 ADA4530-1、LMP7721)构成跨阻放大器(TIA)。

// 电路拓扑要点(伪代码描述)
1. 传感器阴极接运放反相输入端(-IN),阳极接GND。
2. 反馈电阻 Rf = 100kΩ ~ 1MΩ(根据灵敏度选择)。
3. 反馈电容 Cf = 10pF ~ 100pF(防振、限制带宽)。
4. 运放同相输入端接偏置电压 Vbias = 0.6V ~ 0.8V(使传感器工作于线性区)。
5. 输出 Vout = I_sensor * Rf + Vbias。

关键设计参数计算示例:

  • 传感器灵敏度:80 nA/%O₂
  • 目标量程:0% ~ 100% O₂ → 最大电流 8 μA
  • 选择 Rf = 150 kΩ → 满量程电压 = 8 μA × 150 kΩ = 1.2 V
  • 加上 Vbias = 0.7 V → ADC输入范围 0.7 V ~ 1.9 V(适合3.3V ADC)

4.2.2 顺磁式传感器调理电路(差分放大 + 同步解调)

顺磁传感器通常输出差分电压(例如 ±50 mV 对应 0% ~ 100% O₂),且易受共模噪声干扰。需采用仪表放大器(如 AD8221、INA118)进行差分放大,并配合低通滤波器。

// 电路拓扑要点
1. 传感器差分输出接仪表放大器输入端(+IN, -IN)。
2. 增益电阻 Rg 决定放大倍数:G = 1 + (49.4kΩ / Rg)。
3. 一级低通滤波:截止频率 fc = 1 / (2π * R * C),通常设为 10 Hz ~ 50 Hz。
4. 若传感器为热磁式(需交流激励),则需加入同步解调器(如 AD630)将交流信号转换为直流。

4.3 氧浓度数据读取与换算(Python 实现)

以下代码演示了从 ADC 读取原始电压,并根据传感器特性换算为氧浓度百分比。假设使用电化学传感器,ADC 为 12 位,参考电压 3.3 V。

import numpy as np

class OxygenSensor:
    """
    电化学氧传感器数据读取与换算类
    """
    def __init__(self, adc_bits=12, vref=3.3, sensitivity_nA_per_O2=80.0,
                 feedback_resistor_kohm=150.0, bias_voltage=0.7):
        self.adc_max = 2**adc_bits - 1
        self.vref = vref
        self.sensitivity = sensitivity_nA_per_O2 * 1e-9  # 转换为 A/%O2
        self.Rf = feedback_resistor_kohm * 1e3           # 转换为 Ω
        self.Vbias = bias_voltage
        # 预计算转换系数:每 %O2 对应的电压变化
        self.volts_per_O2 = self.sensitivity * self.Rf   # V/%O2

    def adc_to_voltage(self, adc_raw):
        """将ADC原始值转换为电压"""
        return (adc_raw / self.adc_max) * self.vref

    def voltage_to_O2(self, voltage):
        """将电压转换为氧浓度百分比"""
        # Vout = I_sensor * Rf + Vbias
        # I_sensor = (Vout - Vbias) / Rf
        # O2% = I_sensor / sensitivity
        current = (voltage - self.Vbias) / self.Rf
        o2_percent = current / self.sensitivity
        # 限幅保护
        return np.clip(o2_percent, 0.0, 100.0)

    def read_and_convert(self, adc_raw):
        """一步完成读取与换算"""
        voltage = self.adc_to_voltage(adc_raw)
        return self.voltage_to_O2(voltage)

# ========== 使用示例 ==========
if __name__ == "__main__":
    sensor = OxygenSensor()

    # 模拟ADC读取值(假设当前氧浓度为45%)
    # 理论电压 = 45 * 0.08e-6 * 150e3 + 0.7 = 45 * 0.012 + 0.7 = 1.24 V
    # ADC值 = 1.24 / 3.3 * 4095 ≈ 1538
    adc_sample = 1538

    o2 = sensor.read_and_convert(adc_sample)
    print(f"ADC原始值: {adc_sample}")
    print(f"换算电压: {sensor.adc_to_voltage(adc_sample):.3f} V")
    print(f"氧浓度: {o2:.1f} %O2")

    # 批量处理(模拟10个采样点)
    adc_samples = [1538, 1540, 1535, 1542, 1539, 1536, 1541, 1537, 1543, 1538]
    o2_values = [sensor.read_and_convert(adc) for adc in adc_samples]
    print(f"氧浓度序列: {[f'{v:.1f}' for v in o2_values]}")
    print(f"平均氧浓度: {np.mean(o2_values):.1f} %O2")

4.4 工程注意事项

  • 温度补偿:电化学传感器受温度影响显著(约 2%/℃),需在电路中加入 NTC 热敏电阻,并在软件中查表修正。
  • 零点漂移:传感器长期放置后输出可能偏移,建议每次开机时通入 21% O₂(空气)进行单点校准。
  • 抗干扰:顺磁传感器对振动敏感,安装时需使用减震支架;电化学传感器需避免冷凝水堵塞透气膜。
  • 安全冗余:高端呼吸机通常同时安装电化学与顺磁传感器,互为备份,并通过一致性校验判断故障。