非线性校正与温度补偿.txt
来自「本研究设计的智能压力传感器系统具有成本低、可靠性好、响应速度快、智能化程度高等特」· 文本 代码 · 共 58 行
TXT
58 行
#include"user.h"
sbit
AdjPort=P1^6;
#define ZERO_VAL 0
struct LINE{
float k;
float b;
};
#define TEMP_DEPTH 7 //温度级数
struct LINE code
L[TEMP_DEPTH]={{2.6867,0},{2.8169,0},{2.9580,0},{2.9726,0},{3.0788,0},{3.2063,0},{3.3220,0}};
float code t[TEMP_DEPTH]={-10,0,10,20,30,40,50};
float f[TEMP_DEPTH];
float AA[TEMP_DEPTH];
int
Offset=0;
//零点校准
void AdjOffset(int val){
if(AdjPort==0){
Offset=ZERO_VAL-val;
}
}
int PRS(WORD AdcVal,int TempVal){
BYTE index,JcIdx;
float Prs,tmp;
//计算不同温度对应压强值
for(index=0;index<TEMP_DEPTH;index++){
f[index]=L[index].k;
display();
}
//牛顿插值计算
AA[0]=f[0];
for(index=1;index<TEMP_DEPTH;index++){
for(JcIdx=index;JcIdx<TEMP_DEPTH;JcIdx++){
AA[JcIdx]=(f[JcIdx]-f[JcIdx-1])/(t[JcIdx]-t[JcIdx-index]);
display();
}
for(JcIdx=index;JcIdx<TEMP_DEPTH;JcIdx++){
f[JcIdx]=AA[JcIdx];display();
}
}
Prs=0;
for(index=0;index<TEMP_DEPTH;index++){
tmp=AA[index];
for(JcIdx=0;JcIdx<index;JcIdx++){
tmp*=(TempVal-t[JcIdx]);display();
}
Prs+=tmp;
}
//计算去掉零点的压强值
AA[0]=Prs;
Prs=AA[0]*(float)AdcVal;
AdjOffset((int)Prs);
Prs+=Offset;
if(Prs<0)Prs=0;
return (int)Prs;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?