各位老师好,我再使用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一样,测量范围很窄,感觉还不是很准确