标题: 关于单片机AD值转换成温度温度除了查表法还有其他方法吗? [打印本页]

作者: 杨天想    时间: 2021-8-9 11:13
标题: 关于单片机AD值转换成温度温度除了查表法还有其他方法吗?
请问各位大佬,ad值转换成温度处了查表法,还有其他的方法好用吗,

作者: DS12C887    时间: 2021-8-9 12:05
查表最快了,也可以用公式计算,51加减法还能对付,但还不太适合浮点数计算,调用库,还占用大量时间.如果对结果运算时间没要求,也无所谓了
作者: 黄youhui    时间: 2021-8-9 13:26
看单片机运算功能,如果运算功能OK,可以通过加减乘除快速得到结果,那就用运算,如果不能那就查表,以前的单片机运算能力差,老前辈自己算好了数据存储到单片机里,变成查表法,现在很多单片机都能进行多位数运算。
作者: robinsonlin    时间: 2021-8-9 13:34
直接用带转换的功能的芯片, 比如MAX6675
作者: bandaojun    时间: 2021-8-9 14:35
可以用多个AD分段平均处理
作者: 杨天想    时间: 2021-8-9 14:47
黄youhui 发表于 2021-8-9 13:26
看单片机运算功能,如果运算功能OK,可以通过加减乘除快速得到结果,那就用运算,如果不能那就查表,以前的 ...

大佬能给一个运算例程参考参考吗
作者: jizhongbiao    时间: 2021-8-9 16:01
查表是最优处理方式。
作者: Y_G_G    时间: 2021-8-9 16:31
如果是传感器,就是直接取换算就可以了
如果是NTC,最好是查表,虽然也有公式,但查表是最实用也是最准确的,所以,NTC的供应商会在NTC的数据手册中附上温度对应的电阻值
至于运算速度,基本不用考虑,不管你是用整型还是浮点型,又或者是查表,最多也就一千多条指令,以STC的1T单片机为例,运算总时间不超过100uS,你都用单片机来采样NTC了,这100uS就不算是占用时间了
如果你觉得100uS的运算时间都还有点长,直接上FPGA,300MHZ时钟......
作者: lkc8210    时间: 2021-8-9 16:33
杨天想 发表于 2021-8-9 14:47
大佬能给一个运算例程参考参考吗

就是计数啊~
如LM35:temp = (ADC/1024.0*5.0)/0.01;
如果是其它温度传感器如PT100,就要看数据手册有没有电压温度转换方程
如果没有就要从电压温度转换表入手
把转换表输入Excel 然后生成一个曲线方程再来运算
作者: Hephaestus    时间: 2021-8-9 16:59
问题是你的AD值是从哪里来的?我们都不是算命的。
作者: lishengaha    时间: 2021-8-10 06:02
ntc用查表是因为本身并不是全量程线性的,所以用查表查到一个范围之后再进行线性转换是最精确的。
作者: 杨天想    时间: 2021-8-10 09:04
Hephaestus 发表于 2021-8-9 16:59
问题是你的AD值是从哪里来的?我们都不是算命的。

adc转换过来的啊
作者: Y_G_G    时间: 2021-8-10 20:40
lishengaha 发表于 2021-8-10 06:02
ntc用查表是因为本身并不是全量程线性的,所以用查表查到一个范围之后再进行线性转换是最精确的。

查表本身就是为了精确,没有必要什么线性计算的
按大多NTC给的电阻温度对应数据,查表误差也就是1摄氏度而已,而且,NTC两个温度之间对应的电阻值本身就是有交叉的,并不是固定不变有,进行纯线性计算,精确到0.1摄氏度,那只不过是感觉上的精度高了而已NTC的精度本身就不可能多高,1%的精度,如果温度是200摄氏度,那么误差就是正负2摄氏度了

作者: wulin    时间: 2021-8-10 20:57
杨天想 发表于 2021-8-10 09:04
adc转换过来的啊

如果温度传感器特性在此设备的测量范围是线性变化当然用公式计算方式方便,否则用查表方式更好。
作者: 杨天想    时间: 2021-8-11 09:47
wulin 发表于 2021-8-10 20:57
如果温度传感器特性在此设备的测量范围是线性变化当然用公式计算方式方便,否则用查表方式更好。

我就是闲查表麻烦了点,问题已经解决了我用的是分段法,效果还行,勉强可以用
作者: 适得府君书    时间: 2021-8-11 11:51
查表跟计算的目的是一样的,不一样的是过程,查表需要把整张表存下来,代码量相对比较多。过程中能学到的只有查表的算法。要是赶时间用查表的方式比较快实现。
使用公式可以学到的东西比较多,基本上都是理论方面的东西。
计算公式就是:
RT=R*EXP(B*(1/T1-1/T2))
RT:就是通过ADC转换得来的热敏电阻的当时阻值:
计算公式就是:Vp=Vin*R2/(R1+R2)
R:热敏电阻的标称值,单位欧
B:热敏电阻的系数
T2:(273.15+25)(绝对温度+摄氏度)
T1:就是实际测量的温度
所以
T1=1/(ln(RT/R)/B+1/T2)

float Rt;
float temp;
float Ka= 273.15;
float T2=(273.15+25.0);  //T2
Rt =getNtcRt(adc,n);          //热敏电阻当前阻值
temp = Rt/Rp;
temp=log(temp);   //ln(Rt/Rp)
temp/=Bx;         //ln(Rt/Rp)/B
temp+=(1/T2);
temp = 1/(temp);
temp-=Ka;




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1