完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
第一:前言
用STM32 采集数据必须依据信号源设置采样频率。根据奈奎斯特定律,采样率必须是信号源最大频率的2倍以上,但是在实际的需求当中,采样率应该是Fs》3Fmax 。 采样周期=转换时间+读取时间 。 转换时间=采样时间+12个时钟周期(STM32F4)或者 转换时间=采样时间+12.5个时钟周期(STM32F1) 采样时间是STM32采集模拟量的时间,采集的时间越长越精。对于每个要转换的通道,采样时间建议尽量长一点,以获得较高的准确度,但是这样会降低ADC的转换速率。 第二:方法 以STM32F407ZGT6为例, AHB 域的最大频率为168MHz。高速 APB2 域的最大允许频率为168MHz。低速 APB1 域的最大允许频 率为 42 MHz。 /** * @brief ADC Common Init structure definition */ typedef struct { uint32_t ADC_Mode; /*!《 Configures the ADC to operate in independent or multi mode. This parameter can be a value of @ref ADC_Common_mode */ uint32_t ADC_Prescaler; /*!《 Select the frequency of the clock to the ADC. The clock is common for all the ADCs. This parameter can be a value of @ref ADC_Prescaler */ uint32_t ADC_DMAAccessMode; /*!《 Configures the Direct memory access mode for multi ADC mode. This parameter can be a value of @ref ADC_Direct_memory_access_mode_for_multi_mode */ uint32_t ADC_TwoSamplingDelay; /*!《 Configures the Delay between 2 sampling phases. This parameter can be a value of @ref ADC_delay_between_2_sampling_phases */ }ADC_CommonInitTypeDef; ADC_Prescaler : 设置ADC 的时钟频率,一共有4个选项,2分频,4分频和8分频。 #define ADC_Prescaler_Div2 ((uint32_t)0x00000000) #define ADC_Prescaler_Div4 ((uint32_t)0x00010000) #define ADC_Prescaler_Div6 ((uint32_t)0x00020000) #define ADC_Prescaler_Div8 ((uint32_t)0x00030000) 因此我们需要找到被分频的时钟频率是多少? 来自于时钟树的APB2(高速总线),APB1(低速总线) 。 APB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM #define RCC_APB2Periph_ADC ((uint32_t)0x00000100) #define RCC_APB2Periph_ADC1 ((uint32_t)0x00000100) #define RCC_APB2Periph_ADC2 ((uint32_t)0x00000200) #define RCC_APB2Periph_ADC3 ((uint32_t)0x00000400) ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_480Cycles );//采样时间 采样时间是很重要的指标: #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)) 对于STM32F407 主频时钟是168Mhz ADC 采样率最高的是时钟是:最大采样率: 168/((12+3)*(2*2))=2.8Mhz 最小采样率: 168((12+480)*(2*8))=21341Hz 总结12 是不变的,480 和3 是变化的,2 是不变的属于APB2 时钟,但是 DIV8 和DIV2 是可变的。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
556浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 18:31 , Processed in 0.675499 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号