21ic电子技术开发论坛

标题: 实际温度值 [打印本页]

作者: llia    时间: 2018-1-6 22:27
标题: 实际温度值
165的AD是20位数据输出,但是程序中应该如何编写,得出实际温度值(热电偶)?

作者: wangpe    时间: 2018-1-6 22:35

直接运算除法?

作者: yufe    时间: 2018-1-6 22:37
那差的远呢

作者: langgq    时间: 2018-1-6 22:38

位数也太大了

作者: wangzsa    时间: 2018-1-6 22:40

用查表呢?

作者: llia    时间: 2018-1-6 22:43
应该如何做?

作者: llia    时间: 2018-1-6 22:45

之前没有高过搞位数的AD啊,不要见笑

作者: zhuww    时间: 2018-1-6 22:50
其实和低精度ADC没有太多区别

作者: zhanglli    时间: 2018-1-6 22:53

1.设置ADC模块:设置是否使用内部参考电压和采集速度;
2.设置AD通道,要注意部分AD通道与IO口共用,如果将IO口设置为AD通道,IO功能不能使用;

作者: zhanglli    时间: 2018-1-6 22:55


3.选择AD通道,同时只能采集一路;
4.设置ADON位为1,开始进行采集。可以开启AD中断,只要进入AD中断,就表示AD采集完成;

作者: zhanglli    时间: 2018-1-6 22:57
5.如果不用AD中断,可以通过判断ADCIF位,如检测到ADCIF位为1,表示采集完成,此时就可以去读取并保存AD_DATA了,注意要将ADCIF位清零;
6.读ADDH、ADDM、ADDL三个寄存器,这三个寄存器是存储AD采集到的数据的,ADDH为高8位,ADDM为中8位,ADDL为低4位。在ADCIF为0时,如果读取这三个寄存器,里面的值都是上一次采集的值。
作者: lium    时间: 2018-1-6 22:58
建一个对应AD值的温度表(即表格值为温度值,每个温度对应一个AD值,按所对应的AD值大小从低到高排列)
例:
        0x0000,0x0000,0x0000,0x0000,0x0001,0x0001,...............   ;对应AD值0x000000,0x000001,0x000002,0x000003,0x000004,0x000005.........
作者: zhanglli    时间: 2018-1-6 23:04
或者建一个对应温度值的AD表(即表格值为AD值,没有AD值对应一个温度,按所对应的温度值大小从低到高排列)
例:
        0x000000,0x000008,....................................                   ;对应温度温度-40C,-39.9C
        0x0100A0,0x0100A6,0x0100AC,0x0100A3,0x0100A4,0x0100A5,0x0100A6,0x0100A7,0x0100A8,0x0100A9,0x0100AA,0x0100AB,0x0100AC,0x0100AD,0x0100AE,0x0100AF,                                           ;对应温度 25.2C,25.3C,25.4C,25.5C,25.6C,25.7C,25.8C,25.9C,26.0C,26.1C,26.2C,26.3C........
        ............................0x0FFFF3,0x0FFFFF                              ;对应温度99.9C,对应温度100C
作者: llia    时间: 2018-1-6 23:07

这两种有什么特点?

作者: guoyt    时间: 2018-1-6 23:10

第一种优点:以温度为表格值,一个单位的值位数小,运算简单,直接查表就可以得出实际温度。

作者: zhanglli    时间: 2018-1-6 23:15
我说的优点:只需要根据最高精度,写从最低温度到最高温度所对应的AD值,假如最高温度为100,最低为-40,最高精度为0.1C,那么需要写1400个AD值。

作者: llia    时间: 2018-1-7 13:30
缺点呢?

作者: zhanglli    时间: 2018-1-7 13:32

需要写从最小AD值0x000000到最大AD值0x0FFFFF所对应的温度值,总共1048576个值

作者: yufe    时间: 2018-1-7 13:34

Rt= Ro(1 + AT + BT² + C(T-100)T³) 其中: R0=100欧姆 A = 3.9083 E-3 B = -5.775 E-7 C = -4.183 E-12 (低于0°C时)或0 (高于0°C时)。

作者: hanwe    时间: 2018-1-7 13:41

每次得到AD值后,需要与表格数值对比,运算速度会比较慢。

作者: llia    时间: 2018-1-7 13:43
适用范围呢

作者: yufe    时间: 2018-1-7 13:45
低位数的AD,且对运算速度高要求高;如用于高位数AD时,表格会很大。

作者: wangpe    时间: 2018-1-7 13:47
先用EXCEL算出每一度对应的AD数据,然后独到AD数据,就去查表

作者: llia    时间: 2018-1-7 13:50

算出每一度对应AD值后,值都是固定的
但是AD值不一定每次都获取到该值的啊
假设 0x1bc3    9度
        0x1ed8  10度
        0x21ee  11度

现在获取到的AD值是0x1bff  介于9度和10度之间

这样如何查表啊?
作者: langgq    时间: 2018-1-7 13:53
如果精度要求不高,可以当中用线性插值

作者: langgq    时间: 2018-1-7 13:54

例如:
AD的值为0x1c00,温度为9~10之间,用线性插值的方法
t=(1c00-1bc3)*(10-9)/(1ed9-1bd3)+9

作者: llia    时间: 2018-1-7 13:57
哦,我缕一缕

作者: yufe    时间: 2018-1-7 14:00

首先你要进行定标,然后得出电压和温度的数学表达式,才能进行计算。

作者: hanwe    时间: 2018-1-7 14:01

低位数的AD,且对运算速度高要求高;如用于高位数AD时,表格会很大

作者: wangpe    时间: 2018-1-7 14:03
查表法,测量出当前的AD结果,对应温度表

作者: llia    时间: 2018-1-7 14:06
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位





欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/) Powered by Discuz! X3.5