paradoxfx

【原创】TI C2833x介绍---系统自带的ADC(10)

0
阅读(2957)

【原创】TI C2833x介绍---系统自带的ADC10

说了半天ADC的处理过程,那ADC的转换结果是最终如何处理的呢?因为F28x的ADC有16个模拟量输入管脚,所以对应的结果寄存器也有16个,即AdcRegs.ADCRESULTx,x的值从0到15。F28x片上自带的AD是12位精度,但是结果寄存器是16位的,这就涉及到存储的问题:器件手册规定,12位的转换结果保存在结果寄存器的高12位,即bit15是MSB,bit4是LSB,而低4位是无效的位,其存储示意如图1所示:

图1 ADC结果寄存器的位说明

再考虑到ADC模拟量输入管脚ADCINA0-7、ADCINB0-7的电压范围为0-3V,去除低4位之后ADC结果寄存器的表示范围为二进制的0000 0000 0000 0000 -1111 1111 1111 0000,即十进制的0 – 65536,有下面的对应关系:

ADC管脚输入

的模拟电压

16进制数组转换结果

ADC结果寄存器

对应的10进制

3

FFF0h

1111|1111|1111|0000

65520

1.5

7FF0h

0111|1111|1111|0000

32752

0.00073

1h

0000|0000|0001|0000

1

0

0h

0000|0000|0000|0000

0

所以,对于一个ADC结果寄存器中的值,其对应的ADC模拟量输入管脚的电压值的直接计算方法为(前提是ADCLO管脚接到了模拟地):

ADC输入电压=AdcResult*3.0/65520

在完全采用定点数或者IQmath格式进行处理的时候,为了所以数值的范围以便使用更大的Q值从而提高计算的精度,也可以使用下面的方法

ADC输入电压=(AdcResult>>4)*3.0/4095

因为ADC转换结果寄存器的低4位是无效位,所以将高12位右移4位并不损失任何数值,而且右移这样的操作在C语言实现时是极其高效的;此时3V对应的最大结果寄存器值FFF0h变为FFFh,对应了10进制的4095。

Baidu
map