3. 土壤EC传感器温度补偿标定

任务对象与测量链路

本节针对一款模拟输出的土壤EC传感器(输出0–2.5V对应0–5 mS/cm,内部无温度补偿),在恒温水浴中把同一盐溶液分别稳定在10℃、15℃、20℃、25℃、30℃五个温度点,记录每个温度点下的原始电压与参考电导率,再拟合温度补偿系数并验证补偿后读数误差。

关键约定:EC的温度效应通常用线性模型近似,以25℃为参考温度:

EC₂₅ = EC_T / [1 + α·(T − 25)]

其中 EC_T 为温度T下的实测电导率,α 为温度补偿系数(单位 1/℃),典型土壤溶液在 0.018–0.022 /℃ 之间。标定的任务就是由多温度点数据反求 α,并检验补偿后误差。

恒温水浴 盐溶液(同一浓度) T = 10/15/20/25/30 ℃ 温度稳定 ±0.2 ℃ EC探头 ADC采集 12位ADC,Vref=3.3V 原始码值 → 电压 V_T 温度测量 DS18B20 读数 T 电压→EC_T EC_T = V_T × 2 (mS/cm) 温度补偿 EC₂₅ = EC_T / [1+α(T−25)] 误差验证 相对误差 ≤ 阈值? 多温度点数据 → 最小二乘拟合 α 记录表(每温度点) T(℃) | V_T(V) | EC_T | EC₂₅ 10 | 1.02 | 2.04 | 2.51 20 | 1.12 | 2.24 | 2.50 30 | 1.22 | 2.44 | 2.49

标定数据采集与系数拟合

用同一浓度盐溶液(示例目标约 2.5 mS/cm @25℃)在五个温度点稳定后各采集 10 次,取中位数抑制噪声。下表为教学示例数据(假设值,用于演示计算过程):

温度 T (℃)原始电压 V_T (V)EC_T = 2·V_T (mS/cm)
101.0202.040
151.0702.140
201.1202.240
251.1702.340
301.2202.440

由模型 EC_T = EC₂₅·[1 + α(T−25)],令 x = T−25,y = EC_T,做线性回归 y = a + b·x,则 α = b / a(a 即 EC₂₅ 估计值)。用上表数据:

import numpy as np

T  = np.array([10, 15, 20, 25, 30], dtype=float)
EC = np.array([2.040, 2.140, 2.240, 2.340, 2.440])

x = T - 25.0
b, a = np.polyfit(x, EC, 1)      # 斜率 b, 截距 a
alpha = b / a
print(f"EC25 = {a:.4f} mS/cm, alpha = {alpha:.5f} /℃")

# 补偿并计算相对误差
EC25_meas = EC / (1 + alpha * (T - 25))
rel_err = (EC25_meas - a) / a * 100
for t, e in zip(T, rel_err):
    print(f"T={t:.0f}℃  补偿后EC25={EC25_meas[T==t][0]:.4f}  相对误差={e:+.2f}%")

按上表数据,回归得到斜率 b ≈ 0.0200 mS/cm/℃,截距 a ≈ 2.340 mS/cm,故 α ≈ 0.00855 /℃。这个值明显低于土壤溶液典型范围(0.018–0.022),说明示例数据本身温度效应偏弱——实际标定时若出现这种情况,应检查溶液浓度是否过低、探头是否未完全浸没或温度是否未真正稳定,而不是直接采用该系数。

补偿验证与阈值判定

把拟合得到的 α 代回补偿公式,对 10–30℃ 每个温度点计算补偿后 EC₂₅ 与参考值(25℃实测值)的相对误差,与设定阈值比较。示例阈值取 ±3%。

温度 (℃)EC_T (mS/cm)补偿后 EC₂₅相对误差判定(阈值±3%)
102.0402.3400.00%通过
152.1402.3400.00%通过
202.2402.3400.00%通过
252.3402.3400.00%通过
302.4402.3400.00%通过
上表误差全为 0 是因为示例数据严格按线性模型构造,属于理想化演示。真实标定中应保留原始多次采样、计算标准差,并至少留一个温度点(如 12℃ 或 28℃)作为独立验证点,避免用拟合数据自证拟合效果。

实操判定流程:① 每个温度点采样 10 次,剔除偏离中位数 3σ 以上的点;② 用五点拟合 α;③ 用未参与拟合的验证温度点计算补偿后误差;④ 若最大相对误差超过阈值,先排查温度稳定性与溶液浓度,再考虑改用二次温度模型或分段系数。

若传感器在 10℃ 与 30℃ 两端误差明显大于中间点,说明温度响应非线性,可改用 EC₂₅ = EC_T / [1 + α₁(T−25) + α₂(T−25)²] 二次模型,用最小二乘同时求 α₁、α₂,并重新验证。