各位老師好,我再使用CH582測量電池電壓,使用了兩個49.9K的電阻分壓后接入到ADCIN8,測試時候發(fā)現(xiàn)得到的數(shù)值大概在3979左右,也就是說測量到引腳的電壓大概是 3.1V左右,外部電池電壓根據(jù)分壓原理達到了6.3V左右,這當然是錯誤的。于是我直接將測量引腳對地短接,測量到電壓為0。直接對3.3V短接,測量到電壓為3.3V,數(shù)值大概在4089左右。說明ADC正常工作的再測量分壓,發(fā)現(xiàn)數(shù)值還是3979左右,也比較穩(wěn)定, 實測此時我的ADC8引腳電壓為2.14V左右,我的ADC初始化很簡單如下:
void?adc_init(void) { ????/*?單通道采樣:選擇adc通道0做采樣,對應?PA4引腳,?帶數(shù)據(jù)校準功能?*/ ???????GPIOA_ModeCfg(GPIO_Pin_1,?GPIO_ModeIN_Floating); ???????ADC_ExtSingleChSampInit(SampleFreq_3_2,?ADC_PGA_0); ???????RoughCalib_Value?=?ADC_DataCalib_Rough();?//?用于計算ADC內(nèi)部偏差,記錄到全局變量?RoughCalib_Value中 ???????ADC_ChannelCfg(8); }
因此我覺得是不是由于MCU的ADC其內(nèi)阻太大導致的,或者是其他原因我沒理解?
請問各位老師,我這個問題該怎么解決?需要減小分壓電阻嗎?還是其他原因?
再次修改程序,將ADC8的引腳修改為下拉,而不是浮空,數(shù)值又發(fā)生了改變,此時測量外部實際電壓1.1V左右,測量到的數(shù)值為2053,換算過來電壓值為1.65V左右。
void?adc_init(void) { ????/*?單通道采樣:選擇adc通道0做采樣,對應?PA4引腳,?帶數(shù)據(jù)校準功能?*/ ???????GPIOA_ModeCfg(GPIO_Pin_1,?GPIO_ModeIN_PD); ???????ADC_ExtSingleChSampInit(SampleFreq_3_2,?ADC_PGA_0); ???????RoughCalib_Value?=?ADC_DataCalib_Rough();?//?用于計算ADC內(nèi)部偏差,記錄到全局變量?RoughCalib_Value中 ???????ADC_ChannelCfg(8); }
再次更新:
大致搞明白了,原來還不跟通用的ADC一樣,測量范圍很窄,感覺還不是很準確