STM32F407 ADC_DMA 三通道配置与采样率计算

1. 采样率计算原理
  • ADC 时钟频率:由 APB2 时钟分频得到,STM32F407 最大支持 36 MHz
    若 APB2 时钟为 84 MHz,需分频至 ≤36 MHz(例如 4 分频 → $f_{\text{ADC}} = 84 \text{ MHz}/4 = 21 \text{ MHz}$)。
  • 单通道转换时间
    $$T_{\text{conv}} = T_{\text{sampling}} + 12.5 \text{ 周期}$$
    其中 $T_{\text{sampling}}$ 为采样周期(可配置为 3~480 周期),12.5 周期为固定转换时间。
  • 三通道总转换时间
    $$T_{\text{total}} = 3 \times (T_{\text{sampling}} + 12.5) \text{ 周期}$$
  • 单通道采样率
    $$f_{\text{sample}} = \frac{f_{\text{ADC}}}{T_{\text{total}}} = \frac{f_{\text{ADC}}}{3 \times (T_{\text{sampling}} + 12.5)}$$
2. CubeMX 配置步骤
  1. 时钟配置

    • Clock Configuration 中设置 APB2 时钟(默认 84 MHz)。
    • 在 ADC 预分频器选择 PCLK2 divided by 4(确保 $f_{\text{ADC}} = 21 \text{ MHz} ≤ 36 \text{ MHz}$)。
  2. ADC 设置

    • 模式:Independent mode
    • 扫描模式:Enabled(多通道扫描)
    • 连续转换:Enabled
    • DMA 连续请求:Enabled
    • 数据对齐:Right alignment
    • 通道数:Number of Conversion = 3
  3. 通道配置(Rank 选项卡):

    Rank Channel Sample Time
    1 CH0 84 Cycles
    2 CH1 84 Cycles
    3 CH2 84 Cycles
  4. DMA 配置

    • 添加 DMA 请求 → ADCx
    • 模式:Circular(循环模式)
    • 数据宽度:Half Word(16 位)
    • 内存地址自增:Enabled
3. 采样率计算示例
  • 参数
    $f_{\text{ADC}} = 21 \text{ MHz}$, $T_{\text{sampling}} = 84 \text{ cycles}$
  • 计算
    $$T_{\text{total}} = 3 \times (84 + 12.5) = 289.5 \text{ 周期}$$
    $$f_{\text{sample}} = \frac{21 \times 10^6}{289.5} \approx 72.5 \text{ kHz(每通道)}$$
    即每通道采样率约 72.5 kSPS
4. 关键代码实现
// 定义缓冲区(存储三通道数据)
uint16_t adc_buffer[3];

// 启动ADC+DMA
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, 3);

// DMA传输完成回调函数(中断模式)
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
  // 此处读取adc_buffer[0], [1], [2] 获取三通道数据
}

5. 注意事项
  1. 采样时间选择
    • 较高采样时间(如 480 周期)可提高精度但降低采样率。
    • 最小采样时间(3 周期)时,需确保输入信号阻抗 ≤10 kΩ。
  2. DMA 缓冲区
    • 缓冲区大小需匹配通道数(本例为 3)。
    • 内存地址自增必须开启,以存储多通道数据。
  3. 时钟验证
    在生成的代码中检查 hadc1.Init.ClockPrescaler 是否为 ADC_CLOCK_SYNC_PCLK_DIV4
  4. 性能限制
    三通道总采样率上限为 $f_{\text{ADC}} / 12.5 \approx 1.68 \text{ MSPS}$(当 $T_{\text{sampling}}=3$ 时)。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐