有个热电阻不全是线性,为保证精度从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度??
谢谢!!

解决方案 »

  1.   

    2200 我怎么看也是在45和50度之间啊。可以自己建立个容器,容器存放数据区间struct abc
    {
       int up  //上限
       int down  //下限
       int Temperature_Up; //温度上限
       int Temperature_Down; //温度下限
    }30 1600
    35 1779  确定一个区间abc35 1779
    40 1952  确定另一个区间abc用STL中的Vector或者Clist保存。然后入参判断是否在每个abc的up和down之间就可以了
      

  2.   

    我的土办法是:k =  (val1 - val0) / (AD1 - AD0);温度  AD值
    90    3520
    95    3654k = (95- 90)/ (3654 - 3520);
    这是k=0.0373;
    如果AD=3590 查询在90-95段那么温度 = 95 - (3664 - 3590)*k
    = 92.5读,,
    看还有啥更快捷更好的办法???
      

  3.   

    查询到这段: 不敢独享相应  考虑到程序存储空间资源和实际的测量精度要求,并不需要每隔一摄氏度就取一个
    标定点,根据精度要求选择适当的温度间隔。例如[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℃。
      

  4.   


    也就这样了。先一串if()...else if()...
    再计算
      

  5.   

    要精度高就不单是软件的事情了,那还要靠硬件。就你的这个硬件来说,你的测试值是否是标准都还有待考量,比如:30度是不是1600?1600会不会是 30.5???度或30.3???度或29.8???度
    而且理论上温度的变化是线性的,物质对热的反应也是线性的,即使非直线,也不会波形紊乱,根据你的器件取得的值,表示你的器件存在不稳定性的热反应现象,这样的东西本来就没有精度可言,难说同一理论温度都会让他有多次测量不同的结果。
    要做精度高首先就要换个精度高的传感器,通常这种传感器就不单是AD采集的这么应用,这种东西通常还有通讯协议的,如I2C之类的东西,这样得到的数据是经过厂商规范测试的,从稳器件定性来说才能得到保障,也才有精度可言,不然这种热电阻就一个器件间的差异就会让你的精度高不到哪去。