算法:AD转换值如从何热电阻表中 查询相应温度的公式?

vc8fans 2012-12-06 08:22:28
有个热电阻不全是线性,为保证精度从30到95度,每隔5度用标准温度计标定得出下表

温度值, AD值
30 1600
35 1779
40 1952
45 2112
50 2304
55 2512
60 2679
65 2874
70 2976
75 3104
80 3232
85 3392
90 3520
95 3654
问:咋弄个公式从上面表查询出相应的温度;
如AD = 2200, 咋样好方法得出相应温度,,低于30度??
谢谢!!
...全文
1255 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在还是人类 2012-12-07
  • 打赏
  • 举报
回复
从你的数据上看,虽然不是很平稳,但基本上还算线性的啦

所以应该用:
(3654-1600)/14 = 146.714286
(95-30)/14 = 4.642857

拿个AD值如
(2200-1600)/146.714286 = 4.089581
4.089581*4.642857 = 18.987340+30 = 48.987340 度
vc8fans 2012-12-07
  • 打赏
  • 举报
回复
谢谢楼上的,要精度高,两点标定是不够,何况都是计算机在算
vc8fans 2012-12-07
  • 打赏
  • 举报
回复
热惯性  热电偶作为一种测温传感元件,被广泛地应用在工业现场及实验室。由于热接点具有一定的热容量,热接点从介质中吸热量后,加热自身、使温度提高到稳定值需要一定的时间。即热接点的温度变化,在时间上总是滞后于被测介质的温度变化。热电偶的这种现象称为热惯性。 还要考虑热工测量延迟性。。。。 这次都碰到了。。。
现在还是人类 2012-12-07
  • 打赏
  • 举报
回复
要精度高就不单是软件的事情了,那还要靠硬件。就你的这个硬件来说,你的测试值是否是标准都还有待考量,比如:30度是不是1600?1600会不会是 30.5???度或30.3???度或29.8???度 而且理论上温度的变化是线性的,物质对热的反应也是线性的,即使非直线,也不会波形紊乱,根据你的器件取得的值,表示你的器件存在不稳定性的热反应现象,这样的东西本来就没有精度可言,难说同一理论温度都会让他有多次测量不同的结果。 要做精度高首先就要换个精度高的传感器,通常这种传感器就不单是AD采集的这么应用,这种东西通常还有通讯协议的,如I2C之类的东西,这样得到的数据是经过厂商规范测试的,从稳器件定性来说才能得到保障,也才有精度可言,不然这种热电阻就一个器件间的差异就会让你的精度高不到哪去。
傻X 2012-12-06
  • 打赏
  • 举报
回复
你这个只是个预估,你确定这个AD和温度是线性的? 你怎么做都是个估算值。
baoyz 2012-12-06
  • 打赏
  • 举报
回复
引用 2 楼 vc8fans 的回复:
我的土办法是: k = (val1 - val0) / (AD1 - AD0); 温度 AD值 90 3520 95 3654 k = (95- 90)/ (3654 - 3520); 这是k=0.0373; 如果AD=3590 查询在90-95段那么 温度 = 95 - (3664 - 3590)*k = 92.5读,, 看还有啥更快捷更好的办……
也就这样了。先一串if()...else if()... 再计算
vc8fans 2012-12-06
  • 打赏
  • 举报
回复
查询到这段: 不敢独享 相应 考虑到程序存储空间资源和实际的测量精度要求,并不需要每隔一摄氏度就取一个 标定点,根据精度要求选择适当的温度间隔。例如[5]在-200~650℃范围内每隔5℃标定 一个Pt100 的电阻值,即共171 个标定点,分别记作 R[i],对应的温度记作T[i],i 取0~170。 插值算法: 采用线性插值算法进行标度变换时,将检测值Rx 通过顺序查表,与标定点R[i]比较, 确定区间R[i] <Rx<R [i+1],然后进行线性插值算法求得温度值Tx: Tx = T[i] + ((Rx - R[i]) / (R[i+1] - R[i])) * (T[i+1] - T[i]) 因为是每隔5℃标定一个电阻值,所以T[i+1]- T[i]=5,即: Tx = T[i] + 5 * (Rx-R[i] / R[i+1]-R[i]) [举例]:现经A/D 采样和滤波得Pt100 的电阻值为Rx=112.68Ω,求此时实测对 象的温度Tx。解:已知查Rx=112.68Ω, 表得 R[46]<Rx<R[47], R[46]=111.67Ω,R[47]=113.61Ω, T[46]=30℃, 代入式2 得: Tx=T[46]+5*(Rx-R[46])/(R[47]-R[46])=30+5*(112.68-111.67)/(113.61-111.67)=32.60 答:此时实测对象的温度Tx 为32.60℃。
vc8fans 2012-12-06
  • 打赏
  • 举报
回复
我的土办法是: k = (val1 - val0) / (AD1 - AD0); 温度 AD值 90 3520 95 3654 k = (95- 90)/ (3654 - 3520); 这是k=0.0373; 如果AD=3590 查询在90-95段那么 温度 = 95 - (3664 - 3590)*k = 92.5读,, 看还有啥更快捷更好的办法???
傻X 2012-12-06
  • 打赏
  • 举报
回复
2200 我怎么看也是在45和50度之间啊。 可以自己建立个容器,容器存放数据区间 struct abc { int up //上限 int down //下限 int Temperature_Up; //温度上限 int Temperature_Down; //温度下限 } 30 1600 35 1779 确定一个区间abc 35 1779 40 1952 确定另一个区间abc 用STL中的Vector或者Clist保存。然后入参判断是否在每个abc的up和down之间就可以了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧