传感器温度补偿算法分析
从数学上来看,压力传感器的输出u(正比于传感器的AD码)可当作相关的环境温度T和被测压力P的二元函数
前言:
首先我们对传感器线性化之后,进行温度补偿,如图我们在T0时刻对传感器进行了线性化。我们接下来进行一个温度点,两个压力点的标定,当标定压力为P1(外挂了P1的砝码),此时处于A状态点,然后升温至T0,达到状态点B(XB,YB,T1),由XB和之前的线性化关系求的标定前的压力值为YC,得到虚拟点C(XC,YC,T0),至此完成一个压力点,一个E(XE,YE,T0)温度点的标定。然后更改标定压力为P2(外挂了P1的砝码),到达状态点D(XD,YD,T1),可求虚拟点E(XE,YE,T0)。至此标定工作完成。
T0时刻为传感器标定曲线,是一条基准曲线,其他温度时的曲线存在但是不知道形式,但是其上的标定点是已知的,当处于BCED区域内任意点F(XF,YF,T)状态点时,T为温度传感器AD码,XF为压力传感器AD码,YF为此时的被测压力,如果不补偿此时显示压力为YH(也就是一个基准值),我们要求YF和YH之间的增量,YG到YH,温度变化了T0-T1,作比值即得每温度变化了多少压力(变化率),而H到F变化T-T0,所以压力增加(YG-YH)/(T1–T0)*(T-T0)。但是G点未知,我们需要通过已知点D点B去得到G的逼近点M,同理得H的逼近点N,
正文:
设y=f(x,T)函数图像如图
分析一个温度点,两个压力点的标定。
现在T0时,对传感器进行线性化(找到被测压力和传感器AD码的曲线)
选择标定值PI(被测值也就是所挂的砝码重),也就是在图中A点,然后升温至T1,根据此时传感器值XB和之前的线性化关系求出YC也就是温度补偿前压力值,得到B(XB,YB,T1) C(XC,YC,T0)。
更换择标定值P2(被测值也更改所挂的砝码重),也就是D点,根据此时传感器值XD和之前的线性化关系求出YE也就是温度补偿前压力值,得到D(XD,YD,T1) E(XE,YE,T0)
补偿后,当温度改变压力改变至F点,我们想根据该点的传感器的AD码求出此时的被测压力,如果未补偿则为YH,(YM-YN)/(T1–T0)为此传感器值下每温度变化压力值,通过此传感器值下温度变化量(T-T0)求出N到F的压力变化量(YM-YN)/(T1–T0)*(T-T0)在加上YN即此时要求的YF。
下面介绍的求法YMYN
先保持T不变,沿DB,EC对x进行插值,分别求得H的逼近点N,G的逼近点M,
YM=YD+(YB-YD)/(XB-XD)*(XM-XD)
YN=YE+(YC-YE)/(XC-XE)*(XN-XE)
保持X不变沿NM对T进行插值
YF=YN+(YM-YN)/(T1–T0)*(T-T0) …………………………………………………….. (※ )
以上为两点标定压力的算法,当标定三点时通过二次插值(三个点带入二次插值算式)求得对应的YMYN,当标定点为一点时,即标定压力即YM,计算对应的补偿前压力即YN.根据实际温度处于哪一个温度区间选择对应的标定点去求YMYN。
附录:
拉格朗日一次插值
二次插值
牛顿插值
Newton
? Ln(x),只是形式不同牛顿插值 具有递归的特点,形式更适合编程
插值多项式的次数是随插值节点的增加而升高的,一般总以为插值多项式的次数越高对f(x)逼近的程度越好,但实际并非完全如此。n 越大,端点附近抖动越大,称为Runge 现象。
所以根据实际温度选定温度区间再进行插值(对温度进行分段线性插值)
|