关于CH582内部ADC测量电压不准的问题请教

各位老师好,我再使用CH582测量电池电压,使用了两个49.9K的电阻分压后接入到ADCIN8,测试时候发现得到的数值大概在3979左右,也就是说测量到引脚的电压大概是 3.1V左右,外部电池电压根据分压原理达到了6.3V左右,这当然是错误的。于是我直接将测量引脚对地短接,测量到电压为0。直接对3.3V短接,测量到电压为3.3V,数值大概在4089左右。说明ADC正常工作的再测量分压,发现数值还是3979左右,也比较稳定, 实测此时我的ADC8引脚电压为2.14V左右,我的ADC初始化很简单如下:

void adc_init(void)
{
    /* 单通道采样:选择adc通道0做采样,对应 PA4引脚, 带数据校准功能 */
       GPIOA_ModeCfg(GPIO_Pin_1, GPIO_ModeIN_Floating);
       ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_0);
       RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中
       ADC_ChannelCfg(8);

}

因此我觉得是不是由于MCU的ADC其内阻太大导致的,或者是其他原因我没理解?

请问各位老师,我这个问题该怎么解决?需要减小分压电阻吗?还是其他原因?


再次修改程序,将ADC8的引脚修改为下拉,而不是浮空,数值又发生了改变,此时测量外部实际电压1.1V左右,测量到的数值为2053,换算过来电压值为1.65V左右。

void adc_init(void)
{
    /* 单通道采样:选择adc通道0做采样,对应 PA4引脚, 带数据校准功能 */
       GPIOA_ModeCfg(GPIO_Pin_1, GPIO_ModeIN_PD);
       ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_0);
       RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中
       ADC_ChannelCfg(8);

}

再次更新:

大致搞明白了,原来还不跟通用的ADC一样,测量范围很窄,感觉还不是很准确

测量范围可以根据相应的电压做调整,一般根据实际可用测量电压范围调整,如果需要测量电压范围过大,在误差可接受情况下,也可以根据理论可测电压范围做调整。

1.png


只有登录才能回复,可以选择微信账号登录