新唐MCU技术
直播中

李欢

8年用户 1144经验值
私信 关注
[问答]

如何使用多个 EADC 采样模块对一个 EADC 通道进行采样,以实现最大采样频率?


  • 使用多个 EADC 采样模块对一个 EADC 通道进行采样,以实现最大采样频率。

回帖(1)

rosa

2025-8-25 17:34:48

要实现多个 EADC(增强型模数转换器)采样模块对一个通道进行高速采样,需采用 时间交织采样 技术,通过多模块并行交替采样将总采样率提升为单模块的 N 倍(N 为模块数)。以下是关键步骤及注意事项:




实现步骤




  1. 配置硬件资源  



    • 连接模拟通道:将同一个模拟输入信号(如 CH0)分配给所有 EADC 模块的采样输入。

    • 时钟相位偏移:为每个模块配置时间偏移的采样触发时钟:

      • 使用定时器或外部时钟生成器产生主触发信号(频率 (f_s))。

      • 通过硬件分频器/延迟单元为每个 EADC 模块分配相位差为 (360°/N) 的时钟((N = text{模块数}))。

        示例(两个模块):  

      • 模块 0:相位 0°(主时钟)  

      • 模块 1:相位 180°(延迟半周期)





  2. 设置采样模式  



    • 单次触发模式:每个 EADC 模块响应独立的触发信号。

    • 连续采样模式:使所有模块自动轮询转换。




  3. 配置数据采集逻辑  



    • DMA 传输:为每个 EADC 分配独立的 DMA 通道,将数据直接写入内存数组,避免 CPU 中断延迟。

      • 数组结构:Buffer[0] → 模块 0 数据, Buffer[1] → 模块 1 数据,以此类推。


    • 数据重组:按时间顺序交错合并数据:

      最终序列 = [模块0_采样1, 模块1_采样1, 模块0_采样2, 模块1_采样2, ...]




  4. 校准与同步  



    • 启动同步触发:发送全局软件触发信号,确保所有模块同时开始采样。

    • 校准失配(关键):

      • 增益/偏移校准:测量各模块的 DC 误差,在软件中对数据应用补偿系数。

      • 时序校准:测量时钟相位误差,调整延迟参数(部分芯片支持硬件校准)。







性能优化要点




  1. 时钟精度  



    • 使用高精度时钟源,抖动(Jitter)需满足:

      (text{抖动} < frac{1}{2^{ENOB} cdot pi cdot f{text{max}}})

      ((ENOB):有效位数,(f
      {text{max}}):输入信号最高频率)

    • 例:(ENOB=10), (f_{text{max}}=50,text{MHz}) → 抖动 < 3 ps。




  2. 通道一致性  



    • PCB 设计确保所有采样路径阻抗匹配,避免信号失真。




  3. 资源限制  



    • 总采样率上限 = 单模块最大速率 × 模块数。

    • 检查芯片规格:如单个 EADC 模块最大采样率 = 5 MSPS,则 4 模块交织可达 20 MSPS。




  4. 实时处理  



    • 使用双缓冲区 DMA 技术,避免数据覆盖。






伪代码示例(2 模块交织)


// 配置阶段
void EADC_MultiChannel_Init() {
  // 1. 模拟通道配置
  EADC_Module0_Config(CH0);
  EADC_Module1_Config(CH0); // 共享同一输入通道

  // 2. 时钟与触发设置
  Timer_Config(base_freq);       // 主触发频率 = f_s
  set_phase_offset(Module0, 0°);
  set_phase_offset(Module1, 180°);

  // 3. DMA 设置
  EADC_Setup_DMA(Module0, buffer0, BUFFER_SIZE);
  EADC_Setup_DMA(Module1, buffer1, BUFFER_SIZE);
}

// 主循环
while (1) {
  // 4. 启动同步采样
  EADC_SoftwareTrigger_All();

  // 5. 等待数据就绪(DMA 中断或轮询)
  if (data_ready) {
    // 6. 重组数据:交拼两个缓冲区
    for (int i = 0; i < BUFFER_SIZE; i++) {
      combined[2*i]   = buffer0[i]; // 模块0 的数据点
      combined[2*i+1] = buffer1[i]; // 模块1 的数据点
    }
    // 总采样率 = 2 * 单模块速率
  }
}



注意事项




  1. 非线性误差  



    • 增益/偏置失配 → 产生谐波失真。

    • 解决方案:出厂校准或在运行时插入参考信号实时校准。




  2. 时钟偏斜(Skew)  



    • 各模块采样时刻未严格对齐 → 高频信号失真。

    • 解决方案:使用片上延迟锁相环(DLL)或 FPGA 调整相位。




  3. 软件开销  



    • 重组数据需 CPU 参与时,高采样率可能导致瓶颈。

    • 优化:用 DMA 链直接生成交织数据(部分 MCU 支持)。






通过以上步骤,可利用多个 EADC 模块将采样率提升至理论最大值,适用于高速数据采集系统(如超声、通信信号处理)。实际需结合芯片手册调整细节(如寄存器配置、时钟源选择)。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分