热敏电阻的应用
热敏电阻的应用 MF52D1-103F-3950 软件中的算法解释如下:
const uchar tmprange[14]={0,11,25,39,52,66,84,144,165,183,201,221,244,255};
//临界温度值×2
const uchar adrange[13]={ 51,64,79,97,112,128,143,129,112,97,80,63,57}; //对应D
值的分段B值
const uint
advalue[14]={ 30930,30415,29519,28415,27151,25583,23279,14688,11984,9968,8224,6624,5168,4544}; //临界点D值
最终结果:
sendbuf1(number+mi*8)=((advalue[j]-tmpbuf1(number))/adrange[j])+tmprange[j];
温度热敏在整个温度范围内不具有良好的线性,因此采取分段取值的做法,我们
需要的范围在0-125度之间就能满足工程的应用,我们根据需要分为13段,
根据我们的电路:
负温度系数热敏电阻温度与阻值对应关系表
1
2
查表,当温度为0时,热敏电阻=33。62K (5000/(2+33。62))*33。62==》4719.26mV;
用11位采样:32767/5000=XXX/4719.26===》XXX=30927 LSB ,上表中有13个红色的数据,
具有代表性,于是得到线段tmprange[14]={0,11,25,39,52,66,84,144,165,183,201,221,244,255},都可以除以2,得到临界温度点;如果需要精度更高,可以分成更多的小线段,
advalue[14]={ 30927,30415,29519,28415,27151,25583,23279,14688,11984,9968,8224,6624,5168,4544}; //临界点D值
adrange[13]={ 51,64,79,97,112,128,143,129,112,97,80,63,57}为各线段的K值,即(30927-30415)/(11-0)=50.9 约等于51,其他K值依次计算得到:adrange[13]={ 51,64,79,97,112,128,143,129,112,97,80,63,57};
对于力神提出的温度精度到0.1的问题,需要修改通讯协议,把原来一个字节的表示方法改为2字节,
最终结果:改为两字节表示:
sendbuf1(number+mi*8)=(((advalue[j]-tmpbuf1(number))*10)/adrange[j])+tmprange[j]*10;
上为机除以2改为除以20;
3