大家在使用ADC采樣的時候是否計算過ADC的采樣率,這個問題非常關鍵!
以下為GD32F303系列MCU中有關ADC的參數(shù),其中ADC時鐘最大值為40MHz,12位分辨率下最大采樣率為2.86MSPS.如果ADC時鐘超頻的話,可能會造成ADC采樣異常,因而對于ADC時鐘以及采樣率的計算很重要。
首先給大家介紹下ADC時鐘如何配置,如下為RCU時鐘樹中有關ADC時鐘的說明,通過ADCPSC控制位可以選擇ADC時鐘來自于AHB還是APB2分頻,若ADCPSC配置為0,ADC時鐘為APB2時鐘2/4/6/8/12/16分頻,若ADCPSC配置為1,ADC時鐘為AHB時鐘5/6/10/20分頻。
ADC時鐘配置可通過以下rcu_adc_clock_config函數(shù)實現(xiàn)。
/*! \brief configure the ADC prescaler factor \param[in] adc_psc: ADC prescaler factor only one parameter can be selected which is shown as below: \arg RCU_CKADC_CKAPB2_DIV2: ADC prescaler select CK_APB2 / 2 \arg RCU_CKADC_CKAPB2_DIV4: ADC prescaler select CK_APB2 / 4 \arg RCU_CKADC_CKAPB2_DIV6: ADC prescaler select CK_APB2 / 6 \arg RCU_CKADC_CKAPB2_DIV8: ADC prescaler select CK_APB2 / 8 \arg RCU_CKADC_CKAPB2_DIV12: ADC prescaler select CK_APB2 / 12 \arg RCU_CKADC_CKAPB2_DIV16: ADC prescaler select CK_APB2 / 16 \arg RCU_CKADC_CKAHB_DIV5: ADC prescaler select CK_AHB / 5 \arg RCU_CKADC_CKAHB_DIV6: ADC prescaler select CK_AHB / 6 \arg RCU_CKADC_CKAHB_DIV10: ADC prescaler select CK_AHB / 10 \arg RCU_CKADC_CKAHB_DIV20: ADC prescaler select CK_AHB / 20 \param[out] none \retval none */ void rcu_adc_clock_config(uint32_t adc_psc)
ADC時鐘計算好后,根據(jù)不同的分辨率就可以計算采樣率了,如下圖所示,不同的分辨率對應的采樣轉換時間是不同的,比如12位分辨率,采樣轉換就需要14個ADCCLK。
綜上舉例:如果系統(tǒng)時鐘AHBCLK為120M,APB2時鐘為60M,如果ADC時鐘配置為rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV6),那么ADCCLK的時鐘為60M/6=10M,若ADC配置為12位分辨率,則ADC采樣轉換時間為14/10M=1400ns,采樣率為10M/14=714KSPS.
畫兩個重點:1、ADC采樣時鐘一定不要超過手冊標注的最大值;2、若采樣定時觸發(fā)ADC采樣的話,定時觸發(fā)的周期要大于多通道ADC采樣時間之和。
-
單片機
+關注
關注
6035文章
44554瀏覽量
634653 -
mcu
+關注
關注
146文章
17123瀏覽量
350992 -
嵌入式
+關注
關注
5082文章
19104瀏覽量
304816 -
GD32
+關注
關注
7文章
403瀏覽量
24328
發(fā)布評論請先 登錄
相關推薦
評論