大家在使用ADC采样的时候是否计算过ADC的采样率,这个问题非常关键! 以下为GD32F303系列MCU中有关ADC的参数,其中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函数实现。 C
/*!
\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时钟计算好后,根据不同的分辨率就可以计算采样率了,如下图所示,不同的分辨率对应的采样转换时间是不同的,比如12位分辨率,采样转换就需要14个ADCCLK。 综上举例:如果系统时钟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、若采样定时触发ADC采样的话,定时触发的周期要大于多通道ADC采样时间之和。
教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462
|