1. 先把概念理清楚:校准、补偿、标定的区别与联系
1.1 传感器不准确的根源
做嵌入式或者仪器仪表的朋友,几乎都跟温度传感器打过交道。DS18B20、NTC热敏电阻、PT100、热电偶,这几种是最常见的。很多人接上传感器,读到一个数就直接用了,结果发现跟水银温度计对不上,跟红外测温枪也对不上,就开始怀疑硬件有问题。
其实大部分时候硬件没坏,问题出在传感器本身的分散性和系统性偏差上。
拿NTC热敏电阻举例,标称10K B值3950,听起来是个标准型号,但同一批料的阻值离散度能做到±1%到±5%。在25℃时10K误差5%,反映到温度上可能偏差1℃多,到了100℃附近,非线性和阻值偏差叠加起来,偏个3到5℃都很正常。热电偶更夸张,同样型号不同批次的热电势特性有差异,再加上冷端温度不是0℃,读出来的温度就是错的。
数字传感器比如DS18B20,出厂前厂家做过校准,标称精度±0.5℃,但那是理想条件下的。传感器探头的引线电阻、自热效应、PCB布局的热传导、ADC的参考电压漂移,每一样都会引入额外误差。所以只要是对温度精度有要求的场景——恒温箱、电池管理系统、医疗设备、环境监测——校准和补偿就是绕不开的环节。
1.2 校准和补偿不是一回事
这两个词经常被混用,但在工程上它们解决的是不同的问题。
校准,英文Calibration,本质是拿一个已知的、高精度的标准源,去实测传感器的输出,然后建立传感器输出与真实物理量之间的映射关系,把偏差修正掉。一句话概括:校准解决的是“有标准答案时,怎么把答案对准”的问题。校准之后,传感器在标定温度点附近会非常准。
补偿,英文Compensation,解决的是“没有直接测量到的因素对结果产生了影响,怎么把这部分影响抵消掉”的问题。典型例子是热电偶的冷端补偿:热电偶测的是测量端和冷端之间的温差电势,如果冷端温度在变,读数就会漂。这时候需要在冷端放一个温度传感器测冷端温度,在软件里把这个误差加回去,这叫补偿。
还有一个词叫标定,英文Calibration的另一种翻译,实际操作中经常和校准混着用。严格说,标定更偏重于“把传感器的输出曲线定下来”,而校准更偏重于“修正到标准值”。但口语里大家基本不分,我说校准还是标定,都指同一件事。
打个比方,校准就像你家的电子秤,买回来发现称出来比标准砝码重了50克,你按说明书把零点调一下,这属于校准。补偿就像你在海边用电子秤称东西,潮汐变化导致秤的基础读数在漂,你根据潮汐表把这个漂移减掉,这属于补偿。校准是静态修正,补偿是动态修正,两者配合才能让传感器在真实工况下保持精度。
2. 校准的常见方法与实操流程
2.1 单点校准:零点和增益修正
单点校准是最简单的校准方式,适合传感器本身线性度很好、但存在固定偏置的场景。
比如你用一个线性输出的温度传感器,比如模拟输出的LM35或者某些集成温度芯片,常温下读数比实际温度高了2℃,而且整个量程范围内这个偏差基本恒定,那只需要做一次偏移校准就够了。在软件里把读数减去2℃就行,或者校准ADC的偏移寄存器。
单点校准的数学形式是:
[ T_{corrected} = T_{raw} + b ]
这里的b就是偏移量,通常在校准点处测得的误差取负值。
但单点校准有个大坑:它只修正了偏置,没有修正增益误差。如果传感器的斜率不准,比如实际灵敏度是9.8mV/℃而不是标称的10mV/℃,那么单点校准只是把校准点附近校准了,越远离校准点误差越大。所以单点校准适合量程窄、精度要求不高的场景,或者在传感器的增益已经由硬件精确保证的情况下使用。
实操上,单点校准最常用的标准源是冰水混合物,一个标准大气压下冰水混合物稳定在0℃。把传感器探头插进去,等读数稳定后记录偏差,然后写入偏移量。如果没有冰水条件,用恒温槽或者精密温度计实测当前温度作为参考值也可以,只是精度稍微差一点。
1.3 两点校准:线性映射的推导与计算示例
两点校准是工程上用得最多的方法,因为大多数传感器的输出在有限温度区间内可以近似看成线性。它同时修正了偏置和增益,相当于把传感器的输出直线“掰”到理想直线上。
数学上就是标准的一次函数映射:
[ T_{corrected} = k \cdot T_{raw} + b ]
两个未知数,需要两个标准点来求解。实际操作流程是:
准备两个已知温度的标准源。最经典的是0℃冰水混合物和100℃沸水。冰水混合物在标准大气压下就是0℃,沸水是100℃。如果做高温传感器,也可以用恒温槽设置两个温度点。
把传感器分别放入两个标准源中,等读数稳定(通常要等1到3分钟),记录传感器示数T1和T2。
代入公式求解k和b:
[ k = \frac{T_{std2} - T_{std1}}{T_{raw2} - T_{raw1}} ]
[ b = T_{std1} - k \cdot T_{raw1} ]
举个例子。我用一个NTC接ADC采集,ADC原始值换算成电压再查表得到温度,但发现0℃时读成2.3℃,100℃时读成94.8℃。那T1=2.3,T2=94.8,标准值是0和100。
k = (100 - 0) / (94.8 - 2.3) = 100 / 92.5 ≈ 1.0811 b = 0 - 1.0811 × 2.3 ≈ -2.4865
所以修正公式就是T_corrected = 1.0811 × T_raw - 2.4865。把这个公式写到代码里,读到的原始温度先经过这一步换算再输出,在0到100℃范围内精度就能做到±0.5℃以内。
这个例子里k大于1,说明传感器的响应偏“迟钝”,实际温度变化100℃它只变了92.5℃,所以要把差值放大。b是负数,说明传感器零点偏高,要把读数往下拉一点。
两点校准的本质就是拿两个点的实测数据,硬生生把传感器的输入输出曲线掰成目标曲线。对于绝大多数量程不宽、线性度尚可的应用,两点校准的精度已经够用了。但不适合非线性特别严重的场景,比如宽量程的NTC或者热电偶,两点校完中间还会翘。
1.4 多点校准与多项式拟合:处理非线性
如果传感器非线性明显,两点校准就不够了。典型的例子是NTC热敏电阻,在宽温度范围内阻值和温度的关系是高度非线性的指数关系。这时候需要多点校准。
多点校准的思路是:在量程范围内选n个校准点,逐一记录传感器读数与标准值,然后用最小二乘法拟合一条高次曲线。最常用的是二次或三次多项式:
[ T_{corrected} = a \cdot T_{raw}^3 + b \cdot T_{raw}^2 + c \cdot T_{raw} + d ]
选点数量一般是3到7个。选点有个原则:在量程两端和曲线弯曲最厉害的地方加密,线性区域可以稀疏一点。比如-20℃到150℃的NTC校准,我会选-20、0、25、50、85、125、150这几个点。如果只做室温附近的精确测量,25℃附近多取几个点。
拟合计算我一般用Python的numpy.polyfit,几行代码就能出结果。采集到的数据格式是(raw_temp, std_temp)的配对,丢进去拟合,返回的就是多项式的系数,直接填到C代码里用霍纳法求解。
对于不需要自己做曲线拟合的场景,还有一个更工程化的方案:分段线性插值。把校准点之间用直线连起来,查表加插值。比如校准点记录为{(raw1, std1), (raw2, std2), ...},代码里找到raw落在哪个区间,然后线性插值。这个方法不像多项式拟合那样需要算高次项,计算量小,而且校准点足够密的话精度非常可观。
值得提醒的是,多项式拟合的次数不是越高越好。5次、6次多项式看着拟合误差小,但校准点之间的区域可能剧烈震荡,这叫龙格现象。工程上我最多用到4次,一般3次就够。实在不行就加校准点,而不是加多项式次数。
1.5 查表与插值:工程上最稳妥的方法
如果你不想跟多项式纠缠,查表法是最稳妥的选择。做法很简单:
- 在校准点记录“ADC值-温度”的对照表。
- 代码里二分查找当前ADC值落在哪两个表项之间。
- 线性插值得到温度值。
这个方法精度可控、实现简单、便于现场维护。恒温箱、温控仪表、BMS里的温度采集,大量都是查表实现的。NTC的阻值-温度表更是出厂就带,直接查表就行。
查表法的核心在于表要建得合理。表项不需要均匀分布,曲线陡的地方密一点,平缓的地方疏一点。ADC分辨率是12位、16位还是24位,决定了表项用多少。16位ADC的原始值范围是0到65535,直接用ADC值建表的话表会很大,所以我通常先做一次粗略的线性变换,把ADC值压缩到实际温度范围附近再建表,表项50到200个就够了。
查表插值的一个隐藏优势是:校准数据变得可追溯。比如产品出货前,把每一台设备的校准表打出来贴在测试报告里,任何温度点都能查到对应的校准依据。客户现场问起来,也方便比对。这对做仪表认证和批量生产的场景特别重要。
2. 常见传感器的校准与补偿实践
2.1 NTC热敏电阻:Steinhart-Hart方程与分压电路
NTC在消费电子和工业领域用得极广,便宜、响应快,但非线性是所有温度传感器里最严重的。NTC的阻值与温度关系可以用Steinhart-Hart方程描述:
[ \frac{1}{T} = A + B \cdot \ln(R) + C \cdot (\ln R)^3 ]
这里的T是开尔文温度,R是当前阻值,A、B、C是三个系数。如果取三个精密温度点测出对应阻值,就能解出A、B、C。查表法的本质就是这个方程的离散化。
但实际用NTC做产品时,很多人直接分压电路接ADC,这里有个隐藏问题:分压电阻的精度直接影响温度精度。我用过一个方案,分压电阻用0.1%精度低温漂的金属膜电阻,然后把ADC参考电压用TL431稳压,再加上NTC本身的B值精度,整体精度能做到±0.3℃。而如果分压电阻用1%的普通电阻,整个链路误差直接拉到±1℃以上。
所以在NTC校准项目上,我强烈建议:先选高分压电阻和高精度ADC参考电压,再做两点校准修正软件偏差。硬件底子不达标,软件怎么校都拉不回来。
另外,NTC的自热效应很容易被忽略。流过NTC的电流会在电阻上产生焦耳热,导致测量的温度比实际环境温度高。一般要求NTC的功耗低于0.1mW,比如10K NTC在3.3V分压下,串联电阻不要太小,最好保证流过NTC的电流在几十微安级别。我用过经验值:3.3V供电,NTC和分压电阻各10K,流过NTC的电流约0.165mA,功耗约0.27mW,这已经偏高,建议把分压电阻增大到100K量级,或者用脉冲式激励降低自热。
2.2 热电偶:冷端补偿与放大电路
热电偶的原理是塞贝克效应,两种不同金属材料接触时产生热电势,电势大小跟测量端和参考端的温差有关。注意,热电偶测的是温差,不是绝对温度。所以想得到测量端的绝对温度,必须知道参考端(冷端)的温度,这就是冷端补偿。
热电偶的热电势非常小,K型热电偶只有约41uV/℃,所以必须经过精密放大电路才能进ADC。经典方案是AD8495或者AD8497这类自带冷端补偿的热电偶放大器,接上K型热电偶,输出直接是10mV/℃,单片机读ADC再换算即可。自己做放大器的话,需要仪表放大器INA128加冷端补偿电路,电路复杂度高不少,需要仔细调零。
我自己搭过一款K型热电偶采集模块,用的是仪表放大器加NTC冷端补偿方案。冷端补偿的做法是:在热电偶连接器的冷端位置紧贴一个NTC,用NTC测冷端温度,然后在软件里把热电偶的热电势加上冷端对应热电势。K型热电偶的热电势-温度关系有标准分度表,查表就能算出冷端温度对应的热电势E_cold,总热电势E_total = E_measured + E_cold,再反查分度表得到测量端温度。
这里如果NTC测的冷端温度不准,整个测量就会偏。所以我习惯在冷端放一个DS18B20,比NTC线性好,校准也简单。还有个细节:冷端补偿传感器必须和热电偶冷端有良好的热接触,不能隔太远,否则两者温度不一致,补偿就是空中楼阁。
热电偶还有一个常见问题是引线电阻。热电偶引线本身有阻值,尤其是细长的铠装热电偶,引线电阻可能几十欧。如果用放大器输入阻抗不够高,这部分电阻就会引入误差。解决办法是选高输入阻抗的仪表放大器,或者用三线制接法抵消引线影响。
2.3 铂电阻PT100/PT1000:三线四线制与ADS1220
铂电阻是工业测温里的“高级货”,PT100在0℃时100Ω,灵敏度约0.385Ω/℃,线性度远好于NTC,宽量程精度高。但铂电阻也有坑——引线电阻。
铂电阻自己只有几欧到几百欧,而连接导线如果有个2欧的接触电阻,反映到温度上就是5℃左右的误差。所以精密场合必须用三线制或四线制接线。三线制通过恒流源加差分测量抵消引线电阻,四线制直接用开尔文接法,精度最高,但线缆成本高。
ADC这里推荐用ADS1220或者ADS1248这类24位Δ-Σ ADC加内置恒流源和PGA的方案。ADS1220内部有一个200uA到1500uA可调的恒流源和可编程增益放大器,直接可以激励铂电阻并测量电压。用三线制PT100时,我在代码里这样处理:
- 配置恒流源I=500uA激励PT100。
- 使能PGA,增益设为8,测量PT100两端电压V_pt。
- 同时测量一个精密参考电阻(比如3K,0.1%)上的电压V_ref,用比例法算出PT100阻值: R_pt = (V_pt / V_ref) × R_ref。
- 根据阻值查PT100分度表或调用ITS-90公式得到温度。
比例法好处是把ADC参考电压的漂移抵消掉了,V_ref和V_pt用同一个ADC参考源,比例计算时参考源的影响互相抵消,只剩下精密参考电阻的精度决定整体精度。所以我从来不直接用ADS1220的参考电压算电阻,而是走比例法,这是实测下来最稳的方案。
ADS1220的校准也很直观:芯片手册里有自校准命令,可以校准偏移和增益误差。上电后先读一次校准寄存器,如果偏差大,就按手册流程写入校准命令。不过稍微提醒一句:光靠ADC自校准还不够,模拟前端的分压电阻、恒流源误差、PCB漏电流都会引入误差。真正的系统级校准还是得放到产品整机上做,用标准信号源整体标一遍。
2.4 数字传感器DS18B20与ESP32的实战搭配
DS18B20应该是单片机和嵌入式玩家最先接触的数字温度传感器。单总线协议、独一无二的64位序列号、12位分辨率可配,理论上精度±0.5℃。很多人直接用默认配置读数,没做过任何校准。但DS18B20出厂精度是有局限的,而且12位模式下一次转换最长750ms,软件时序不对还会收到全0或全1的假数据。
用DS18B20和ESP32配合时,有几个关键细节:
第一,上拉电阻。单总线需要4.7K上拉到3.3V,如果总线长了或者挂的设备多了,上拉电阻要相应调整。ESP32的GPIO内部上拉强度通常不够,建议外部加。
第二,时序。DS18B20对时序要求苛刻,ESP32跑FreeRTOS时任务调度可能打断位级时序,导致读数为85℃(这是复位后的默认值)。解决办法:用ESP32的硬件单总线外设,或者关中断操作时序,或者用一个低速I/O操作库保证时序连续性。
第三,校准。DS18B20内部其实有用户可写的EEPROM,可以保存温度校准偏移值。但这个偏移值是全局的,如果你只关心特定温度范围的精度,可以做单点校准。做法是先测出实际偏差,然后把这个偏差值写进DS18B20的字节TH和TL,再用内部标志开启用户补偿。不过说实话,这个机制用起来有点绕,我一般更推荐在应用层做校准补偿表,不折腾芯片内部存储。
第四,自热。DS18B20的寄生供电模式功耗受限,如果要长期连续采集,建议用外部供电,而不是走寄生供电。外部供电还能避免总线弱上拉时的电压跌落导致的温度读数偏高。
用ESP32采集DS18B20的代码结构很简单,搜一下就能抄到。核心是1-Wire时序函数、ROM搜索、温度转换和读取。温度转换结果放在16位寄存器里,高5位是符号位,低4位是小数位,需要右移4位再乘以0.0625才是真实温度。很多人的错误就在这里,数据没移位就拿来显示,小数位全乱了。
3. 补偿不仅仅限于温度:从环路补偿到重力补偿
3.1 硬件补偿:RC零点与环路补偿的关系
聊完温度,我想把话题稍微拉开一点。因为“补偿”这个概念在电子和控制领域其实是通用的,理解了它,你再看温度补偿的很多做法会有触类旁通的感觉。
先说环路补偿。电源设计、运放电路、电机驱动里经常提到环路补偿,最基础的一种是给误差放大器加RC串联网络到地或者反馈支路。RC串联网络会引入一个零点,频率由fz=1/(2πRC)决定。零点的作用是提升环路的相位裕度,让系统避免振荡。
为什么RC串联能提升相位并改善增益?简单说,在零点频率附近,环路增益的斜率从-20dB/dec变为0dB/dec,同时相位从-90°开始回升。很多控制效果不佳的系统,本质上就是相位裕度不足,输出有振铃甚至自激振荡。这时候加入RC补偿网络,相当于给系统“打一针稳定剂”。
这里面的思维方式和温度校准非常像:系统存在一个我们不想要的偏差来源(相位滞后、温度漂移),我们设计一个修正环节(零点、冷端补偿),让它在适当的频率或温度区间起作用。温度传感器校准中的软件偏移修正,本质也是往闭环里加了一个“改进环节”。
3.2 软件动态补偿:滤波与预测
温度传感器的动态响应也是补偿的范畴。比如你测一个快速变化的温度场,传感器有热容量,读数会滞后实际温度,响应慢。热容量相当于一个低通滤波器,时间常数是τ。如果知道传感器的热时间常数,可以通过软件做动态补偿,反推真实温度变化趋势。
方法是在软件里对温度做一阶微分补偿:
[ T_{comp} = T_{measured} + \tau \cdot \frac{dT_{measured}}{dt} ]
实测中,把传感器从室温丢进热水,记录升温水线,再反推热时间常数τ。这样在快速温度变化场景(比如火警探测、发酵过程监控)能明显减小滞后误差。当然,微分会放大噪声,所以一般搭配低通滤波使用,先滤波再求导补偿。
温度传感器常见的软件处理手段还包括一阶低通滤波、滑窗平均、卡尔曼滤波。每个方法都有适用场景。滑窗平均适合缓慢变化的环境温湿度监控,卡尔曼滤波适合在噪声和响应速度之间做最优权衡,但不适合对单片机计算能力要求苛刻的场景。
3.3 死区补偿、重力补偿等跨领域方法论的启发
很多人接触到“补偿”这个词,可能是在机械臂重力补偿、电机死区补偿等机器人领域。这些乍一看和温度传感器校准无关,但底层逻辑是相通的:先建模,再辨识参数,最后通过前馈或反馈把系统误差抵消掉。
重力补偿,本质是建立机械臂连杆质量和重心的模型,计算出每个关节因重力产生的力矩,然后在控制指令里提前加一个反向力矩抵消它。死区补偿,则是测量出执行器在正向和反向运动时的死区大小,在控制信号里额外补上比死区稍大的一个偏置,让指令和实际运动之间保持线性。
这和温度传感器的校准如出一辙:NTC的温度-电阻模型是Steinhart-Hart方程,热电偶的热电势-温度模型是分度表,机械臂的重力模型是动力学方程,死区模型是执行器性能曲线。所有的“补偿”都围绕同一个公式展开:最终输出 = 原始测量/指令 + 修正量,而修正量来自对误差源的理解和建模。
所以如果你的项目里恰好涉及触摸屏校准、波特率校准、TRL校准件设计、机器学习校准集这些概念,也不用觉得陌生。触摸屏校准用的就是两点线性映射,波特率校准是对时钟误差的归一化修正,TRL校准件是射频系统里用标准件反推误差项,机器学习校准集则是在模型概率输出上再做一次单调映射。所有这些都是“用已知标准修正系统性偏差”这一思想的不同形态。理解了温度传感器校准,你迁移到这些领域的速度会快很多。
4. 校准与补偿的常见问题排查实录
4.1 数据跳变,读数乱飘
温度读数不稳定,先别急着怀疑算法,依次排查:
- 电源噪声。ADC的参考电压如果有纹波,读数必然抖。示波器看VREF和VDD,纹波超过10mV就要加滤波电容(0.1uF并联10uF)或者换LDO。
- 信号线距离。传感器到ADC的走线过长且没有屏蔽,容易耦合工频干扰和射频噪声。解决方法是用双绞线、加屏蔽层、或者在ADC输入端加RC低通滤波。
- 软件滤波。如果硬件排查完了还是飘,上滤波算法。温度信号变化慢,加一个截止频率0.5Hz的一阶低通滤波,就能把大部分噪声干掉。
4.2 两点校准后仍然偏低或偏高
最常见的原因是标准源的温度不标准。冰水混合物如果冰块太多水太少,或者冰块融化不充分,实际温度可能不是0℃,而是-1℃到1℃。沸水的温度受气压影响,在高海拔地区100℃是不存在的,昆明大约是96℃左右。标准源不准,校准结果必然歪。
校正的办法是:用标准温度计(比如精密水银温度计或者二等标准铂电阻)实测标准源温度,拿实测值当T_std,而不是默认理论的0和100。生产线上批量校准的话,强烈建议买带计量证书的恒温槽,这个钱不能省。
4.3 热电偶冷端补偿失效
故障现象:室温下热电偶读数比实际温度高或低好几度,且温度一变读数就跟着明显漂。
排查路径:
- 先确认冷端补偿传感器还在正常工作。用万用表量NTC或者DS18B20的读数,看是不是偏离室温很多。冷端传感器如果贴在不合适的散热路径上,比如贴在金属外壳上,读数会被外壳温度带走。
- 确认冷端补偿代码的位置。有人把冷端补偿写在了主循环里,但用的是上次转换的旧值,冷端温度变化快时就会滞后。改成每次转换后立即读取冷端温度并参与计算。
- 确认放大器的零点漂移。自己没有调零的电路,温度漂移会直接叠加进测量。高端解法是用带自校零的仪表放大器,或者上电后先测量并记录零点偏移,在软件里扣除。
4.4 补偿反而让系统变差
这种情况很多见。给传感器加动态补偿后,噪声被微分放大器放大了,读数反而更难看。这时候需要检查你的微分时间常数是不是算大了,或者原始信号有没有先做平滑。
更普遍的教训是:补偿参数不能照抄别人的。同一个型号的传感器,在不同的PCB布局、不同的散热条件、不同的供电电压下,补偿参数可能完全不同。正确的做法是在目标产品上重新标定,而不是直接搬参考设计的数据。我见过不少项目,代码是网上抄的,校准参数也是网上抄的,结果精度一团糟,最后只能逐台重校。
4.5 常见问题速查表
| 故障现象 | 可能原因 | 排查顺序 |
|---|---|---|
| 读数跳变、乱飘 | 电源纹波、ADC基准不稳、信号线干扰 | 示波器查VDD和VREF,加滤波,再上软件滤波 |
| 整体偏高或偏低 | 传感器分散性、偏置未校准、标准源不准 | 先做两点校准,校准前用标准温度计验证标准源 |
| 只在某个温度区间准 | 线性映射无法覆盖非线性段 | 改用多点校准、多项式拟合或者分段插值 |
| 热电偶低温端误差大 | 冷端补偿传感器温度不准、放大器零点漂移 | 查冷端传感器读数,查放大器零漂 |
| 快速升温时读数滞后 | 传感器热时间常数大 | 做动态补偿,一阶微分前向预测 |
| 补偿后噪声变大 | 微分放大噪声 | 先滤波再补偿,限制微分增益 |
| 两台产品读数差异大 | 器件分散性未逐台校准 | 批量生产时逐台写入校准系数,别用统一参数 |
5. 实操心得与一些建议
做温度传感器校准和补偿这么多年,我的体会有三点。
第一,先校准再补偿,顺序不能反。校准解决的是静态偏差,补偿解决的是动态误差。如果校准没做就使劲调补偿参数,就像没对准焦距就拼命修色差,越修越乱。稳妥的做法是:先保证标准源可靠,完成静态校准,确认全量程误差在可接受范围,再考虑动态补偿。
第二,校准的本质是缩小“传感器读数”和“真实世界”之间的差距,但校准并不能解决所有问题。一个NTC如果线性度天生就差,你如果只做两个点校准,中间就是弯的,做十个点校准才能把它掰直。所以关键是要理解传感器的特性曲线,选择正确的校准策略,而不是盲目追求校准点的数量。
第三,整个过程里最容易被忽视的是“标准源的可信度”。你用一个没有溯源的标准温度计去校传感器,校出来的结果就是“对着错误答案改答案”。有条件的话,校准用的标准源要定期送检,而且要保留记录。这不是应付ISO审核的流程,而是让你的校准结果可追溯、可复现。
最后说一个容易踩的小坑:很多嵌入式工程师喜欢把校准系数写死在代码里,产品升级一次固件,校准就丢了。我建议校准参数单独存Flash或者EEPROM,出厂之前在测试工装里烧录进去。这样固件升级不影响校准数据,也方便后续在用户现场重新校准。这个小设计,能省掉很多售后麻烦。