欢迎来到天天文库
浏览记录
ID:57311042
大小:89.50 KB
页数:3页
时间:2020-08-11
《额温枪查表算法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、额温枪查表算法目前额温枪这个东西特别火,所以大家都在搞这个事情,那我也来蹭个热度吧。大概的工作原理:热电堆传感器->ADC->MCU->LCD显示。其实原理很简单,那比较麻烦的事情就是温度补偿和校准的事情了。这个需要太多专业仪器,繁琐,这里不多说。那其实简而言之,就是传感器,ADC采集出来之后运算,就得到了温度。那从传感器采集到的数据是什么呢?现在大部分用的都是热电堆传感器,这种传感器检测到红外热射信号后,会将该信号转换成模拟数据传出来。传出的信号有2种信号,一种是热敏电阻NTC,另一种是热电堆电压。只要有这两个数据,就能推算出温度。这
2、里可以推算出来的温度一共有两种,一种是环境温度,一种是物体表面温度。环境温度主要通过热敏电阻NTC的值来算,表面温度主要根据环境温度和热电堆电压来算。那怎么算呢?首先,ADC采集到热敏电阻NTC的值后,这时候需要去查V-T表。这个表一般是传感器厂家提供的。就是热敏电阻值和温度的对照表。如下左边是温度,对应右边热电堆的电阻值。所以ADC采集到热电堆电阻值后可以根据这个表来反推到温度,这个温度就是环境温度。当如,采集出来的电阻不可能说刚好是表上的值,比如23度对应106.9320,24度对应104.5436.那如果采集出来的值在这个之间,那
3、肯定不能近似等于23度或24度。这里需要根据这4个值做一个计算。这个热电堆电阻的变化曲线随温度变化近似为一次函数,如下:可以简单理解为一次函数,2个点的坐标就能求出这两个点上的所有点。这就是算法需要做的。这个算法在文章会附上。那只要我们得到热电堆电阻,然后查表查出在哪个区间,保留这个区间的4个数值,就可以计算到热电堆值对应的具体温度。当然,精度根据算法来。本算法只保留小数点后1位,也就是说只精确到0.1。热电堆查表算法如下:uint16_tgst_algorithm_get_T_from_R_T(uint16_tinput_r){
4、uint8_txdatai=0; uint16_txdatarst=0,temp1=0,temp2=0;if(input_r>temp_form_R_T[0]) //不在区间{ returnOVERFLOW_RETURN_L;} elseif(input_r5、ni*10; } elseif(input_r==temp_form_R_T[43]) { return43*10; }elseif((input_rtemp_form_R_T[i+1])) {//找到对应区间rst=(((i+1+32)*temp_form_R_T[i]-(i+32)*temp_form_R_T[i+1]-input_r)*10)/(temp_form_R_T[i]-temp_form_R_T[i+1]); 6、 returnrst; } } return0;}这里只测量温度从0-43度之间,超过该范围则认为是异常值,不做处理。temp_form_R_T数组就是存储的热电堆的电阻值,从0-43,共44个数。这里所有的电阻值扩大了100倍,方便计算。毕竟MCU最好不要运算浮点,比较慢。同样的,热电堆电压值也根据同样的方式计算,就能得到目标的温度。
5、ni*10; } elseif(input_r==temp_form_R_T[43]) { return43*10; }elseif((input_rtemp_form_R_T[i+1])) {//找到对应区间rst=(((i+1+32)*temp_form_R_T[i]-(i+32)*temp_form_R_T[i+1]-input_r)*10)/(temp_form_R_T[i]-temp_form_R_T[i+1]);
6、 returnrst; } } return0;}这里只测量温度从0-43度之间,超过该范围则认为是异常值,不做处理。temp_form_R_T数组就是存储的热电堆的电阻值,从0-43,共44个数。这里所有的电阻值扩大了100倍,方便计算。毕竟MCU最好不要运算浮点,比较慢。同样的,热电堆电压值也根据同样的方式计算,就能得到目标的温度。
此文档下载收益归作者所有