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