qjp1988113 发表于 2020-9-18 14:25

关于HC32L130 单通道ADC采样的一个小小疑问?

本帖最后由 qjp1988113 于 2020-9-18 14:27 编辑

最近做个项目,选用的HC32L130。在调试官方的ADC DEMO,串口打印出结果观察。程序ADC配置:
void AIN0_AdcInit(void)
{
    stc_adc_cfg_t            stcAdcCfg;

    DDL_ZERO_STRUCT(stcAdcCfg);
   
    ///< 开启ADC/BGR 外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
   
    Bgr_BgrEnable();      ///< 开启BGR
   
    ///< ADC 初始化配置
    stcAdcCfg.enAdcMode         = AdcSglMode;               ///<采样模式-单次
    stcAdcCfg.enAdcClkDiv       = AdcMskClkDiv1;            ///<采样分频-1
    stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle12Clk;   ///<采样周期数-12
    stcAdcCfg.enAdcRefVolSel    = AdcMskRefVolSelInBgr2p5;///<参考电压选择-内部2.5V
    stcAdcCfg.enAdcOpBuf      = AdcMskBufDisable;         ///<OP BUF配置-关
    stcAdcCfg.enInRef         = AdcMskInRefEnable;      ///<内部参考电压使能-开
    stcAdcCfg.enAdcAlign      = AdcAlignRight;            ///<转换结果对齐方式-右
    Adc_Init(&stcAdcCfg);
}

///< ADC 单次扫描模式 配置
void AIN0_AdcSglCfg(void)
{
    ///< ADC 采样通道配置
    Adc_CfgSglChannel(AdcExInputCH0);
   
    ///< ADC 中断使能
    Adc_EnableIrq();
    EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
   
    ///< 启动单次转换采样
    //Adc_SGL_Start();   

}
main里面一直输出结果,把AIN0引脚接GND时,偶尔会出来个3mv,好奇怪这个3.6MV是如何来的。
读出的ADC值u32AdcRestult 转换成mv: u32AdcRestult*1000*2.5/4095
即便 u32AdcRestult为1 ,那换算出的电压为 0.61mv,即最大1个单位的精度为0.61mv。
那偶尔出现的3.6mv,也就是有6个最小单位的波动?不知道是不是我硬件的电路的地不好?
真奇怪?



amychen1234 发表于 2020-9-19 16:25

我司有FAE可以协助处理,可以加VX 13631694446

martinhu 发表于 2020-9-21 10:29

stcAdcCfg.enAdcClkDiv       = AdcMskClkDiv1;            ///<采样分频-1
这个分频改大一点试试
页: [1]
查看完整版本: 关于HC32L130 单通道ADC采样的一个小小疑问?