【原创】TI C2833x介绍---系统自带的ADC(10)
0赞【原创】TI C2833x介绍---系统自带的ADC(10)
说了半天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。