### STM32 ADC采样频率的确定
#### 1. 确定ADC时钟来源与配置
在STM32微控制器中,ADC (Analog-to-Digital Converter) 模块用于将模拟信号转换为数字信号。为了确保ADC能够正确且高效地工作,合理设置ADC的采样频率至关重要。下面我们将详细介绍如何确定STM32 ADC的采样频率。
**(1)ADC时钟来源**
- **ADCCLK时钟与PCLK2的关系**:ADCCLK时钟与PCLK2时钟同步,且ADC时钟有一个专用的可编程预分频器。
- **PCLK2时钟配置**:通常情况下,PCLK2时钟与系统时钟保持一致。例如,在代码中通过以下方式设置:
```c
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
```
- **ADCCLK预分频器**:在RCC_CFGR寄存器中,有专门的位来控制ADCCLK的预分频比例。具体来说:
- `00`:PCLK2 / 2
- `01`:PCLK2 / 4
- `10`:PCLK2 / 6
- `11`:PCLK2 / 8
**示例配置**:
假设我们需要将PCLK2分频为4作为ADCCLK,可以这样设置:
```c
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
```
**(2)使能ADC时钟**
启用ADC时钟:
```c
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | RCC_APB2Periph_GPIOC, ENABLE);
```
#### 2. 可编程的通道采样时间
- **采样时间配置**:ADC使用一定数量的ADC_CLK周期对输入电压采样,可通过ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位设置不同的采样周期。
- **总转换时间计算**:TCONV = 采样时间 + 12.5个周期
- **采样时间选项**:
- `000`:1.5周期
- `001`:7.5周期
- `010`:13.5周期
- `011`:28.5周期
- `100`:41.5周期
- `101`:55.5周期
- `110`:71.5周期
- `111`:239.5周期
**示例**:如果ADCCLK为14MHz,选择1.5周期的采样时间,则总转换时间为14周期,即1μs。
#### 3. 确定系统时钟
**(1)系统时钟源**:本案例中,采用8MHz的外部晶振作为时钟源,并通过PLL倍频至72MHz。
- **PLL配置**:PLL倍频系数通常为2的整数倍,最大支持72MHz。为了提高计算效率,设定系统时钟为72MHz(PLL 9倍频)。
- **PCLK2与PCLK1**:此时PCLK2 = 72MHz,PCLK1 = 36MHz。
#### 4. 采样频率的确定
**(1)分析需求**:假设输入信号频率为50Hz(周期为20ms),目标是每周期采集200个采样点。
**(2)计算采样周期**:每两个采样点之间的时间间隔为20ms / 200 = 100us。若采样时间为1.5周期,则ADC采样周期为100us / 1.5 = 66.67us。因此,ADC时钟频率约为15kHz。
**(3)调整方案**:根据上述分析,可能存在采样频率与实际需求不匹配的问题。下面提供两种调整方案:
**方案一**:每周期采集2500个采样点,采样间隔为20ms / 2500 = 8us。若采样时间为71.5周期,则ADC采样周期为8us / 71.5 ≈ 111ns。此时,ADC时钟频率约为9MHz。通过将PCLK2分频为8得到ADCCLK,即可实现这一采样频率。
**方案二**:每周期采集1000个采样点,采样间隔为20ms / 1000 = 20us。若采样时间为239.5周期,则ADC采样周期为20us / 239.5 ≈ 83.5ns。此时,ADC时钟频率约为12MHz。通过将PCLK2分频为6得到ADCCLK,即可实现这一采样频率。
根据具体的输入信号频率及采样需求,可以通过合理配置ADCCLK预分频比以及采样时间来确定合适的采样频率。具体实现时需考虑实际应用场景的需求与限制,以达到最佳的性能平衡。