1回答

0收藏

[求助] PSOC4的ADC值转化为毫伏的公式该怎么解释

英飞凌 英飞凌 3776 人阅读 | 1 人回复 | 2013-12-04

在调试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,则结果有偏差。
上面的公式为什么这样计算呢?有没有朋友研究过?
求指点!{:soso_e154:}
在永远蔚蓝的天空下,等待着相会的那一天!
分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

夏醒醒

发表于 2015-10-25 21:52:29 | 只看该作者

psoc 5 CY8CKIT-050开发板,

t1=ADC_GetResult16();
t2=ADC_CountsTo_mVolts(t1);
LCD_Position(0,0);
LCD_PrintNumber(t1);
LCD_Position(1,0);
LCD_PrintNumber(t2);
LCD显示的结果为:
255(ADC的分辨率是8位)
5089

请问,通过滑动变阻器,我的模拟输入明明是0~3.3V,为什么会得出5089mv(5.089V),而不是3300mV呢?在线等,请各位高手帮忙分析一下。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条