本帖最后由 neyo.zhong 于 2011-6-13 11:41 编辑
其实和低精度ADC没有太多区别,带差分的我没有用过,我就说说中颖一般ADC模块的使用方法吧:
1.设置ADC模块:设置是否使用内部参考电压和采集速度;
2.设置AD通道,要注意部分AD通道与IO口共用,如果将IO口设置为AD通道,IO功能不能使用;
3.选择AD通道,同时只能采集一路;
4.设置ADON位为1,开始进行采集。可以开启AD中断,只要进入AD中断,就表示AD采集完成;
5.如果不用AD中断,可以通过判断ADCIF位,如检测到ADCIF位为1,表示采集完成,此时就可以去读取并保存AD_DATA了,注意要将ADCIF位清零;
6.读ADDH、ADDM、ADDL三个寄存器,这三个寄存器是存储AD采集到的数据的,ADDH为高8位,ADDM为中8位,ADDL为低4位。在ADCIF为0时,如果读取这三个寄存器,里面的值都是上一次采集的值。
如何得出实际的温度值,我之前都是用查表的方式来做的,查表有两种方法:
(1)建一个对应AD值的温度表(即表格值为温度值,每个温度对应一个AD值,按所对应的AD值大小从低到高排列)
例:
0x0000,0x0000,0x0000,0x0000,0x0001,0x0001,............... ;对应AD值0x000000,0x000001,0x000002,0x000003,0x000004,0x000005.........
(2)建一个对应温度值的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
这两种表,各有各的特点:
(1)第一种:
优点:以温度为表格值,一个单位的值位数小,运算简单,直接查表就可以得出实际温度。
缺点:需要写从最小AD值0x000000到最大AD值0x0FFFFF所对应的温度值,总共1048576个值
适用范围:低位数的AD,且对运算速度高要求高;如用于高位数AD时,表格会很大。
(2)第二种:
优点:只需要根据最高精度,写从最低温度到最高温度所对应的AD值,假如最高温度为100,最低为-40,最高精度为0.1C,那么需要写1400个AD值。
缺点:每次得到AD值后,需要与表格数值对比,运算速度会比较慢。
楼主根据产品的要求自行选择使用哪种表,当然我的这种方法是比较笨的,如果有其他好方法欢迎其他大侠指正拍砖。 |