本帖最后由 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个最小单位的波动?不知道是不是我硬件的电路的地不好?
真奇怪?
|