1. 序 本項(xiàng)目使用ADC2+多通道進(jìn)行ADC溫度傳感器采集,由于ADC2沒有緩存模式,只能一次一次去讀取采集的數(shù)據(jù),即讀取“ADC數(shù)據(jù)低位寄存器(ADC_DRL)和ADC數(shù)據(jù)高位寄存器(ADC_DRH)”,在使用多通道連續(xù)采集的時(shí)候,只能按照先后順序去采集+讀取數(shù)據(jù)并做響應(yīng)處理。 初始化配置的代碼如下: void bsp_AdcInit() { ADC_CR2_ALIGN = 1; //右對齊數(shù)據(jù) ADC_CR1_CONT = 1; //連續(xù)轉(zhuǎn)換模式 ADC_CR1_SPSEL = 4; //8分頻時(shí)鐘 } void bsp_Channel9Init()//PE6->溫度1 { ADC_CR1_ADON = 1; //啟動轉(zhuǎn)換 ADC_CSR &= (uint8_t)(~0x0F); // Clear the ADC2 channels ADC_CSR |= 0X09; ADC_CR1_ADON = 1; //啟動轉(zhuǎn)換
} void bsp_Channel8Init()//PE7->溫度2 { ADC_CR1_ADON = 1; //啟動轉(zhuǎn)換 ADC_CSR &= (uint8_t)(~0x0F); // Clear the ADC2 channels ADC_CSR |= 0X08; ADC_CR1_ADON = 1; //啟動轉(zhuǎn)換 } 需要采集哪個(gè)通道的數(shù)據(jù)就調(diào)用哪個(gè)通道的配置函數(shù), //--------------------溫度采集------------------- bsp_AdcVoltageToTemp8(); bsp_AdcVoltageToTemp9(); 2. 問題 采集過程中需要頻繁切換選中的通道,這時(shí)候就會出現(xiàn)通道之間的干擾,產(chǎn)生一個(gè)明顯的影響。例如,室溫為27°時(shí),采集到的溫度只有23/24℃。 3. 原理 搜索51hei上的相關(guān)問題,我找到一個(gè)本論壇大神比較合理的解釋。
4. 解決方案 在調(diào)用切換通道的配置函數(shù)之后,加一個(gè)延時(shí),等電容電壓穩(wěn)定過后,再去采集和處理數(shù)據(jù) |