你好,CH582單片機(jī)的ADC無法測(cè)量0-3.3V范圍電壓,只能測(cè)量0-2v的電壓。 在0-2v的輸入時(shí),ADC的轉(zhuǎn)換值為0-4080,超過2v后一直為4080.
ADC的PGA增益無論是配置成ADC_PGA_1_4 (-12db)或者ADC_PGA_0 (0db),結(jié)果都一樣。不知哪里出了問題。
我的應(yīng)用場(chǎng)景為測(cè)量電位器旋鈕的位置,不需要精確,能粗略達(dá)到0-3.3v對(duì)應(yīng)ADC值為0-4095轉(zhuǎn)換值即可。下面為我的代碼
//PA5 AIN1 - 光
#define GPIO_Pin_Light? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GPIO_Pin_5
#define ADC_Channel_Light? ? ? ? ? ? ? ? ? ? ? ? ? ?1
//PA0 AIN9 - 旋鈕
#define GPIO_Pin_Knob? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GPIO_Pin_0
#define ADC_Channel_Knob? ? ? ? ? ? ? ? ? ? ? ? ? ? 9
//PA4 AIN0 - 火焰離子
#define GPIO_Pin_Ion? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GPIO_Pin_4
#define ADC_Channel_Ion? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0
void adc_init(void)
{
? ? uint8_t pga = ADC_PGA_1_4;
? ? GPIOA_ModeCfg(GPIO_Pin_Knob, GPIO_ModeIN_Floating);
? ? GPIOA_ModeCfg(GPIO_Pin_Light, GPIO_ModeIN_Floating);
? ? GPIOA_ModeCfg(GPIO_Pin_Ion, GPIO_ModeIN_Floating);
? ? DelayMs(20);
? ? ADC_ExtSingleChSampInit(SampleFreq_3_2, pga); //
? ? ADC_PGACfg(pga);
? ? RoughCalib_Value = ADC_DataCalib_Rough(); // 用于計(jì)算ADC內(nèi)部偏差,記錄到全局變量 RoughCalib_Value中
? ? PRINT("#adcInit, ADC_PGA:%d, Calib_Value = %d \n", pga,RoughCalib_Value);
}
// 執(zhí)行ADC轉(zhuǎn)換 - 旋鈕,每隔100ms調(diào)用一次
void excuteAdcConver_knob(void)
{
? ? ADC_ChannelCfg(ADC_Channel_Knob);
? ? adcRaw_knob = ADC_ExcutSingleConver() + RoughCalib_Value;
? ? if(adcRaw_knob < 0){
? ? ? ? adcRaw_knob = 0;
? ? }
}
//獲取未做濾波處理的ADC值
uint16_t getAdcRaw_knob(void)
{
? ? return adcRaw_knob;
}
//下面為函數(shù)片段,每隔100ms調(diào)用一次
// 100ms周期,ADC轉(zhuǎn)換,光和旋鈕
? ? if(events & SENSOR_TASK_EVT_PERIOD_100MS){
? ? ? ? //adc檢測(cè)
? ? ? ? excuteAdcConver_knob();
? ? ? ? excuteAdcConver_light();
? ? ? ? return (events ^ SENSOR_TASK_EVT_PERIOD_100MS);
? ? }
電路情況:
電位器旋鈕為50k歐,三個(gè)管腳分別接GND,GPIO_Pin_Knob,3.3V。電位器中間抽頭經(jīng)過一個(gè)RC濾波(1k歐電阻+0.1u電容)接入單片機(jī)ADC引腳。
萬用表實(shí)測(cè)在旋鈕最小和最大之間旋轉(zhuǎn)時(shí),單片機(jī)的ADC管腳的電壓為0-3.3V變化。VINTA管腳的電壓為1.06V。單片機(jī) 不 啟用內(nèi)部DC-DC
項(xiàng)目被卡在這里,麻煩大神請(qǐng)幫忙分析下,萬分感激!?。。。。?/p>