查看: 2960|回复: 1

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

[复制链接]
  • TA的每日心情
    奋斗
    2014-1-10 13:14
  • 签到天数: 53 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-12-4 11:48:07 | 显示全部楼层 |阅读模式
    分享到:
    在调试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:}
    回复

    使用道具 举报

    该用户从未签到

    发表于 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 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 10:51 , Processed in 0.123809 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.