首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

PSOC4的程序时发现,将ADC值转换为毫伏电压时

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,则结果有偏差。
上面的公式为什么这样计算呢?有没有朋友研究过?
求指点!
返回列表