www.z-linear.com
规格表上的精度是"出厂潜力",标定校准才是"兑现手续"。没有标定的测量系统就像没对时的钟——再贵也只对自己的世界负责。本文讲透两点标定法的完整流程(含真实产品的标定界面实录)、温度补偿进阶、以及从工作标准到国家基准的溯源体系。全文约4000字。
一、标定的数学:一条直线的救赎
测量链的误差主体是线性误差:失调(截距b)与增益误差(斜率k)。模型:
真值 y = k × 读数x + b (k≠1即增益误差, b≠0即失调)
两点标定法:用两个已知真值的标准源,测得两个读数,解出k和b:
点A: (x_A, y_A) 点B: (x_B, y_B), y_B≠y_A
k = (y_B - y_A)/(x_B - x_A)
b = y_A - k×x_A
之后每次测量:Y = k×x + b 实时修正——一条直线,治好整条链的线性误差(传感器的k和b、调理放大、ADC的失调增益,全部一网打尽)。
选点原则:两点分布在量程的**30%和70%**附近(跨距大→k的拟合噪声小;避开端点非线性区)。标定后用中间点(50%)验证——残差体现非线性(INL),标定治不了的弯曲(第9篇)。
二、真实产品的标定界面实录
以DABL-7606的ADC标定流程(手册实录)为例:
① 标定点A:
外部标准源输入3.000V(约30%×10V量程)
→ 读ADC实测电压填入A点框
→ 点击"标定A" → 卡自动回传当前ADC读数
对应数字量并置"有效"
② 标定点B:
输入3.500V(70%) → 同样流程"标定B"
③ 生效条件:
"当标定A点和标定B点同时为有效时,
数据才按照标定模式处理,
只要有任何1个点未有效, 按理论值输出,
标定参数不参与计算"
→ 双点齐备才启用, 防半套系数误伤
④ 管理:
"读取标定参数"→回显当前系数
"清除"→恢复出厂理论值
三个设计细节值得学习:
- "有效"复选框:防止误输入单点就生效;
- 双点门槛:不完整的标定不如不标;
- 参数回读:标定可审计、可迁移——能被回读的标定才可传承。
传感器值标定的妙用(手册原话的深意):“DAC标定电压输出值是一方面,更大的作用是可以按照传感器实际输出值来进行标定,比如2V代表10mA的时候,只要用类似方式将外部传感器值标入采集卡,即可完成传感器输出的标定”——把标定从"电压对电压"升级为"工程量对读数"(y=kx+b直接输出工程单位)。
三、标定的执行纪律
标定SOP五步:
① 热机: 系统上电30分钟(温漂稳定)
② 标准源: 选择精度高于被校3~5倍的标准
(被校0.1% → 标准0.02%级以上)
③ A点: 输入30%标准值 → 稳定(≥10s) → 采N点
平均(N≥100) → 记录
④ B点: 70%同样流程
⑤ 验证: 50%输入, 检查|修正值-真值|
≤ 目标精度 → 完成; 否则排查(INL?干扰?)
两个易错点:
- 标准源本身要稳:用低档电源当标准=用脏抹布擦玻璃——误差传递方向反了;
- 读数取平均:标定点读数用100+点平均(压噪声),否则噪声进k和b,标定本身带伤。
四、温度补偿:标定的进阶形态
单次两点标定假设k、b恒定——现实是它们随温度漂移。进阶方案:温度补偿查找表:
温箱实验(或利用现场自然温差):
10℃: 两点标定 → (k₁, b₁)
25℃: → (k₂, b₂)
40℃: → (k₃, b₃)
运行时: 测环境温度T → 查表+线性插值得k(T), b(T)
→ 用当前温度的系数修正
import numpy as np
CAL = [(10, 0.9992, 0.0008),
(25, 1.0001, 0.0001),
(40, 1.0011, -0.0007)] # (T, k, b)
def comp(code, T):
ts = [c[0] for c in CAL]
k = np.interp(T, ts, [c[1] for c in CAL])
b = np.interp(T, ts, [c[2] for c in CAL])
return k*code + b
# 温度来源: 板载温度传感器/环境通道/DABT卡
适用判据:现场温差>10℃且精度要求<0.1%才值得做(恒温实验室单点温度标定够用)。
五、DAC输出的标定:输出侧两点法
输出通道同样有k和b误差,同样两点法(第23篇已述流程)。输出标定的特殊价值:修正后的AO可以直接充当低成本标准源——标定过的DAC输出3.000V,精度可能优于未标定的电源。自标定闭环(卡自己标自己)的雏形:AO输出→AI读回→比对——可以监测链路漂移(虽不能替代外部标准,但能发现"变了")。
六、校准周期与溯源体系
6.1 为什么需要周期复标
所有元件都在漂:基准电压年漂ppm级、电阻老化、电容漏电变化。校准的有效期由漂移速率与精度余量决定:
精度余量 = 允差 - 年漂移
例: 允差0.1%, 年漂0.02% → 3~4年仍安全
允差0.02%, 年漂0.01% → 1年必须复标
一般工业卡1~2年周期;计量级按规程(如JJG规范);关键应用缩短。
6.2 溯源金字塔
国家基准(中国计量院NIM)
↓ 检定
一级标准(省级计量院)
↓ 传递
工作标准(企业标准室: 0.01级表)
↓ 校准
测量设备(你的采集卡)
↓
测量数据(最终可信)
溯源(traceability):每一次校准都要能一级一级追到国家基准,校准证书上写着不确定度链。没有溯源的"标定"只是自我安慰——出了纠纷(质量事故、贸易结算)时,可溯源的测量数据才有法律地位。
6.3 现场级核查(不能等周期时)
两次正式校准之间的自查手段:
- 标准件核查:标准电池/标准电阻/砝码定期测,记录趋势——漂移超限即送检;
- 通道互检:同一信号双通道测,差值突变=某通道异常;
- 历史基线:固定工况的数据统计(均值/σ)建立基线,趋势突变预警。
七、标定的文档化
标定记录三要素(缺一不可):
标定记录单:
① 条件: 日期、温度、湿度、操作人
② 数据: A/B点标准值、读数、k、b、验证点残差
③ 溯源: 标准器编号、证书号、有效期
文档随数据走:自描述文件头里写入标定状态(第31篇的元数据字段"calibration: enabled, 2026-07-30")——三年后分析数据时,知道它带着哪套系数。
八、动手实验:完整标定演练
import numpy as np
# 实验: 给采集卡CH1做两点标定并验证
# 器件: 精密基准源(或3V/3.5V电池+电位器+万用表)
daq = connect_daq()
def read_avg(n=200):
return np.mean(daq.read_ai(ch=1, fs=1000, n=n))
# ① 热机30分钟(此实验可缩至5分钟演示)
# ② A点: 输入3.0000V(万用表实测值!)
std_A = 3.0000; input("接3V源后回车")
x_A = read_avg()
# ③ B点: 3.5000V
std_B = 3.5000; input("接3.5V源后回车")
x_B = read_avg()
# ④ 计算
k = (std_B-std_A)/(x_B-x_A)
b = std_A - k*x_A
print(f"k={k:.5f}, b={b*1000:+.3f}mV")
# ⑤ 验证: 50%点(3.2500V)
std_V = 3.2500; input("接3.25V源后回车")
meas = k*read_avg() + b
err = (meas-std_V)/std_V*100
print(f"验证: {meas:.5f}V, 误差{err:+.4f}%")
# |err|<目标精度 → 标定成功
# err大且线性 → 还有未发现的系统误差
# err随机 → 噪声/干扰问题, 加平均或查接线
# ⑥ 上链应用: 之后所有读数乘k加b
九、常见问题FAQ
Q1:两点标定后还有误差,为什么?
剩下的主要是INL(非线性弯曲)——两点法只治直线误差。需要更高精度用多点(五点/九点)分段线性化。
Q2:标定系数存哪?
卡的FRAM/EEPROM(掉电保存,"读取标定参数"可回显)或上位机配置文件——两边都记最稳妥。
Q3:不同量程档要分别标定吗?
要。每档的调理网络不同,k和b各不相同——高档卡"每档独立标定"是精度的组成部分。
Q4:传感器换了要重新标定吗?
必须。k和b里含传感器灵敏度——换传感器=换了一条链。整套系统(传感器+卡+线缆)作为整体标定最严谨。
十、总结
标定三句话:两点法定直线(30%/70%+验证)、温度表治漂移、溯源链定身份。它是测量系统的"定期体检"——把出厂的潜力兑现成日常的可信,把"我觉得准"升级成"有据可查的准"。下一篇讲数据可信的最后一环:误差分析与不确定度。
下一篇预告:《误差分析与不确定度:给测量结果一个诚实的区间》
97

被折叠的 条评论
为什么被折叠?



