因为又要做和毕设相关的内容,发现答辩时候老师特别喜欢问采样频率,那么ADC的采样频率是多少呢?
因为做的压力传感器阻值变化的ADC采集 再通过标定公式转换成压力值。
首先补充一下: ADC的中转换时间是
Tconv = 采样时间 + 12 个周期
当然也有说是+12.5个周期的 ,但是大概是这个数,我的资料上12 所以暂时用12个周期。
那个采样时间 根据库函数发现一般有:
/** @defgroup ADC_sampling_times
* @{
*/
#define ADC_SampleTime_3Cycles ((uint8_t)0x00)
#define ADC_SampleTime_15Cycles ((uint8_t)0x01)
#define ADC_SampleTime_28Cycles ((uint8_t)0x02)
#define ADC_SampleTime_56Cycles ((uint8_t)0x03)
#define ADC_SampleTime_84Cycles ((uint8_t)0x04)
#define ADC_SampleTime_112Cycles ((uint8_t)0x05)
#define ADC_SampleTime_144Cycles ((uint8_t)0x06)
#define ADC_SampleTime_480Cycles ((uint8_t)0x07)
#define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_3Cycles) || \
((TIME) == ADC_SampleTime_15Cycles) || \
((TIME) == ADC_SampleTime_28Cycles) || \
((TIME) == ADC_SampleTime_56Cycles) || \
((TIME) == ADC_SampleTime_84Cycles) || \
((TIME) == ADC_SampleTime_112Cycles) || \
((TIME) == ADC_SampleTime_144Cycles) || \
((TIME) == ADC_SampleTime_480Cycles))
/**
* @}
*/
3个、15个、28个、56个、84个、112个、144个、480个。一般情况不单纯追求采样频率,采样周期越长,信息越真实,提高精确度。我发现之前的程序选的是480个采样周期
u16 Get_Adc2(u8 ch,u8 nb)
{
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC2, ch, 1, ADC_SampleTime_480Cycles ); //ADC1,ADC通道,480个周期,提高采样时间可以提高精确度
ADC_SoftwareStartConv(ADC2); //使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC ));//等待转换结束
return ADC_GetConversionValue(ADC2); //返回最近一次ADC1规则组的转换结果
}
ADC的时钟,是通过系统时钟 分频得来的 ,这里一般不超过36MHZ,所以四分频到21MHZ。
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
//ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz
在补充一下 外部晶振8MHZ的,在system_stm32f4xx.c文件里,通过PLL_M=8,PLL_N=336,PLL_P=4, 已经将系统时钟PCLK设置为84M。
言归正传,因此我的最小采样频率 : 21M/(480+12) = 42683HZ;
这样老师在提问的时候也特么能理直气壮忽悠个数了。
下一次讲一下用的九轴JY901怎么用32采集和设置采样频率,JY901有自己的数据产生频率,所以不太一样。头疼!