直接找张表,用matlab拟合,一般三阶方程就很准确了,想再精确点就用更高阶的。
给一个我之前做过的电路
测量电路:
(原文件名:111.JPG)
-30C---110C
140个点的matlab拟合函数
ydata=[-30:110];
rdata=[116.8,110.8,105.2,99.83,94.81,90.07,85.59,81.37,77.37,73.60,70.03,66.66,63.47,60.45,57.60,54.89,52.33,49.90,47.60,45.42,43.35,41.38,39.52,37.75,36.07,34.48,32.96,31.52,30.16,28.85,27.62,26.44,25.32,24.25,23.23,22.27,21.34,20.46,19.63,18.83,18.07,17.34,16.65,15.98,15.35,14.75,14.17,13.62,13.09,12.59,12.11,11.65,11.21,10.79,10.39,10.00,9.631,9.277,8.938,8.613,8.302,8.004,7.718,7.444,7.180,6.928,6.683,6.454,6.230,6.016,5.810,5.613,5.423,5.240,5.065,4.897,4.734,4.578,4.429,4.284,4.145,4.012,3.883,3.759,3.640,3.525,3.415,3.308,3.205,3.106,3.011,2.919,2.830,2.744,2.662,2.582,2.505,2.431,2.359,2.290,2.223,2.158,2.096,2.036,1.978,1.921,1.867,1.814,1.764,1.714,1.667,1.621,1.576,1.533,1.492,1.451,1.412,1.374,1.338,1.302,1.268,1.235,1.203,1.171,1.141,1.112,1.083,1.056,1.029,1.003,0.9777,0.9533,0.9296,0.9066,0.8843,0.8626,0.8416,0.8212,0.8014,0.7821,0.7634];
xdata=5*rdata./(4.21+rdata);
a=polyfit(xdata,ydata,3)
y=polyval(a,xdata);
plot(xdata,ydata,xdata,y);
只做了三阶拟合,但是拟合出来的曲线已经很好了
(原文件名:222.JPG)
得到参数之后就可以很方便的写个转换函数了
/******************电压温度转换子程序******************/
//功能:实现将AD转换得到的电压值转换成为温度值;
//类型要求:传入数据与返回值都为float类型;
float tempchange(float adc)
{
float ctemp,v;
v=adc/255*5;
ctemp=-2.5514*v*v*v+21.3556*v*v-81.7976*v+159.7719;
if(ctemp>40)ctemp+=3;
return ctemp;
}
如果嫌精度不够,可以加到五阶方程,就已经很精确了~ |