PSOC4的程序时发现,将ADC值转换为毫伏电压时
 
- UID
- 856476
|
PSOC4的程序时发现,将ADC值转换为毫伏电压时
在调试PSOC4的程序时发现,将ADC值转换为毫伏电压时,调用了这个函数int16 ADC_SAR_SEQ_CountsTo_mVolts(uint32 chan, int16 adcCounts),具体的计算公式为:
mVolts = (int16)((((int32)adcCounts * ADC_SAR_SEQ_10MV_COUNTS) + ( (adcCounts > 0) ?
(ADC_SAR_SEQ_countsPer10Volt[chan] / 2) : (-(ADC_SAR_SEQ_countsPer10Volt[chan] / 2)) ))
/ ADC_SAR_SEQ_countsPer10Volt[chan]);
进而去查找ADC_SAR_SEQ_countsPer10Volt 的数值,发现在初始化ADC函数内,具体为
/* Calculate gain in counts per 10 volts with rounding */
ADC_countsPer10Volt[chNum] = (int16)(((counts * ADC_10MV_COUNTS) +
ADC_DEFAULT_VREF_MV_VALUE) / (ADC_DEFAULT_VREF_MV_VALUE * 2));
其中counts在12位精度是4096,ADC_10MV_COUNTS=10000; ADC_DEFAULT_VREF_MV_VALUE按Vref取1024或者2500;
如果采用1.024V的Vref,则没有问题;若在3.3v系统电压下,采用VDDA/2的Vref,系统认为是2.5V,实际是1.65V,则结果有偏差。
上面的公式为什么这样计算呢?有没有朋友研究过?
求指点! |
|
|
|
|
|