?? pt100.c
字號:
process_t() /*測量溫度求解函數(shù),已知R,VREF*/
{
data float vac,vab,rt,rt1,t;
vac=ad_pro(1);
vab=ad_pro(2); /*A/D轉(zhuǎn)換獲得VAB和VAC*/
rt1=r*(vac-2*vab)/(vref-vac);
/*計算出熱電阻當(dāng)前值*/
rt=lubo(rt1); /*滑動加權(quán)濾波*/
t=(rt-100)/0.36;
/*首先按照400度量程線性估計當(dāng)前溫度*/
do
/*采用試差法循環(huán)計算,剛才估計的t做初始值*/
{
if(rt<100) /*攝氏零度以下處理*/
{
rt1=100+t*(0.390802-0.0000580195*t-
0.000000000427351*(t-100)*t*t);
}
else /*攝氏零度以下處理*/
{
rt1=100+t*(0.390802-0.0000580195*t);
}
t=t+(rt-rt1)/0.36;
}
while(((rt-rt1)>0.005)||(rt1-rt)>0.005);
/*計算余差最終小于0.005歐*/
return(t) /*試差結(jié)束,返回浮點數(shù)溫度值*/
}
R及VREF的校準(zhǔn)
上面求解測量溫度的過程中是把R和VREF都作為已知參數(shù)來處理的,
表面上看,它們都是有標(biāo)稱值的,不過它們的標(biāo)稱值都是有誤差的。
其中R為高穩(wěn)定性的金屬膜電阻,它的精度為0.1%,VREF取自LM285,
它的出廠穩(wěn)定值范圍為1.235±0.01V,這樣的誤差對于高精度測量是不允許的,
解決的辦法就是對它們進行校準(zhǔn)。
解決這個校準(zhǔn)問題也不復(fù)雜,需要使用兩個不同電阻值的模擬電阻來進行兩次測量,
然后求解出R和VREF,模擬的電阻可以使用高精度電阻箱。
例如第一次接入R1=100W,第二次接入R2=200W,會得到如下的關(guān)系式4、5、6、7,
根據(jù)它們,可以求解出關(guān)系式8、9、10,從而獲得校準(zhǔn)后的R和VREF,然后把獲得
的校準(zhǔn)值存入系統(tǒng)的EEPROM,就可以作為正式測量RT時的已知參數(shù)了。
VAB1=VREF*RL/(R+R1+2*RL) (4)
VAC1=VREF*(R1+2*RL)/(R+R1+2*RL) (5)
VAB2=VREF*RL/(R+R2+2*RL) (6)
VAC2=VREF*(R2+2*RL)/(R+R2+2*RL) (7)
RL=VAB1*R1/(VAC1-2*VAB1) (8)
R=(VAB1*(R2+2*RL)*(R1+2*RL)-RL*VAC2*(R2+2*RL))/ (RL*VAC2-VAB1*(R2+2*RL)) (9)
VREF=VAC1*(R+R1+2*RL)/(R1+2*RL) (10)
下面是校準(zhǔn)過程的C51程序,系統(tǒng)通過串行口發(fā)送兩次校準(zhǔn)命令完成校準(zhǔn)。
void jiaozhun() /*R,VREF校準(zhǔn)函數(shù)*/
{
data float vac1,vab1,vac2,vab2,v,r,vref;
if(comm_flag==1) /*每收到一次命令處理一次*/
{
comm_flag=0; /*首先清除通訊標(biāo)志*/
switch(comm._dat) /*根據(jù)發(fā)來的命令具體操作*/
{
case 0:
/*校準(zhǔn)小量程,然后必須校準(zhǔn)大量程!!!*/
vac1=ad_pro(1);
/*R1=100;校準(zhǔn)電阻=100歐*/
v=ad_pro(1);
vac1=(vac1+v)/2; /*求兩次采樣平均值*/
vab1=ad_pro(2); /*導(dǎo)線壓降*/
v=ad_pro(2);
vab1=(vab1+v)/2;
rl=vab1*R1/(vac1-2*vab1);
break;
case 1:
/*校準(zhǔn)大量程,之前必須基準(zhǔn)小量程!!!*/
vac2=ad_pro(1);
/*R2=200;校準(zhǔn)電阻=200歐*/
v=ad_pro(1);
vac2=(vac2+v)/2;
vab2=ad_pro(2);
v=ad_pro(2);
vab2=(vab2+v)/2;
r=(vab1*(R2+2*rl)*(R1+2*rl)-
rl*vac2*(R2+2*rl))/(rl*vac2-vrl1*(R2+2*rl));
vref=vac1*(r+R1+2*rl)/(R1+2*rl);
eeprom(r,vref); /*寫入EEPROM*/
break;
default:
break;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -