要实现多个 EADC(增强型模数转换器)采样模块对一个通道进行高速采样,需采用 时间交织采样 技术,通过多模块并行交替采样将总采样率提升为单模块的 N 倍(N 为模块数)。以下是关键步骤及注意事项:
实现步骤
配置硬件资源
- 连接模拟通道:将同一个模拟输入信号(如
CH0)分配给所有 EADC 模块的采样输入。
- 时钟相位偏移:为每个模块配置时间偏移的采样触发时钟:
- 使用定时器或外部时钟生成器产生主触发信号(频率 (f_s))。
- 通过硬件分频器/延迟单元为每个 EADC 模块分配相位差为 (360°/N) 的时钟((N = text{模块数}))。
示例(两个模块):
- 模块 0:相位 0°(主时钟)
- 模块 1:相位 180°(延迟半周期)
设置采样模式
- 单次触发模式:每个 EADC 模块响应独立的触发信号。
- 连续采样模式:使所有模块自动轮询转换。
配置数据采集逻辑
- DMA 传输:为每个 EADC 分配独立的 DMA 通道,将数据直接写入内存数组,避免 CPU 中断延迟。
- 数组结构:
Buffer[0] → 模块 0 数据, Buffer[1] → 模块 1 数据,以此类推。
- 数据重组:按时间顺序交错合并数据:
最终序列 = [模块0_采样1, 模块1_采样1, 模块0_采样2, 模块1_采样2, ...]
校准与同步
- 启动同步触发:发送全局软件触发信号,确保所有模块同时开始采样。
- 校准失配(关键):
- 增益/偏移校准:测量各模块的 DC 误差,在软件中对数据应用补偿系数。
- 时序校准:测量时钟相位误差,调整延迟参数(部分芯片支持硬件校准)。
性能优化要点
时钟精度
- 使用高精度时钟源,抖动(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。
通道一致性
- PCB 设计确保所有采样路径阻抗匹配,避免信号失真。
资源限制
- 总采样率上限 = 单模块最大速率 × 模块数。
- 检查芯片规格:如单个 EADC 模块最大采样率 = 5 MSPS,则 4 模块交织可达 20 MSPS。
实时处理
伪代码示例(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 * 单模块速率
}
}
注意事项
非线性误差
- 增益/偏置失配 → 产生谐波失真。
- 解决方案:出厂校准或在运行时插入参考信号实时校准。
时钟偏斜(Skew)
- 各模块采样时刻未严格对齐 → 高频信号失真。
- 解决方案:使用片上延迟锁相环(DLL)或 FPGA 调整相位。
软件开销
- 重组数据需 CPU 参与时,高采样率可能导致瓶颈。
- 优化:用 DMA 链直接生成交织数据(部分 MCU 支持)。
通过以上步骤,可利用多个 EADC 模块将采样率提升至理论最大值,适用于高速数据采集系统(如超声、通信信号处理)。实际需结合芯片手册调整细节(如寄存器配置、时钟源选择)。
要实现多个 EADC(增强型模数转换器)采样模块对一个通道进行高速采样,需采用 时间交织采样 技术,通过多模块并行交替采样将总采样率提升为单模块的 N 倍(N 为模块数)。以下是关键步骤及注意事项:
实现步骤
配置硬件资源
- 连接模拟通道:将同一个模拟输入信号(如
CH0)分配给所有 EADC 模块的采样输入。
- 时钟相位偏移:为每个模块配置时间偏移的采样触发时钟:
- 使用定时器或外部时钟生成器产生主触发信号(频率 (f_s))。
- 通过硬件分频器/延迟单元为每个 EADC 模块分配相位差为 (360°/N) 的时钟((N = text{模块数}))。
示例(两个模块):
- 模块 0:相位 0°(主时钟)
- 模块 1:相位 180°(延迟半周期)
设置采样模式
- 单次触发模式:每个 EADC 模块响应独立的触发信号。
- 连续采样模式:使所有模块自动轮询转换。
配置数据采集逻辑
- DMA 传输:为每个 EADC 分配独立的 DMA 通道,将数据直接写入内存数组,避免 CPU 中断延迟。
- 数组结构:
Buffer[0] → 模块 0 数据, Buffer[1] → 模块 1 数据,以此类推。
- 数据重组:按时间顺序交错合并数据:
最终序列 = [模块0_采样1, 模块1_采样1, 模块0_采样2, 模块1_采样2, ...]
校准与同步
- 启动同步触发:发送全局软件触发信号,确保所有模块同时开始采样。
- 校准失配(关键):
- 增益/偏移校准:测量各模块的 DC 误差,在软件中对数据应用补偿系数。
- 时序校准:测量时钟相位误差,调整延迟参数(部分芯片支持硬件校准)。
性能优化要点
时钟精度
- 使用高精度时钟源,抖动(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。
通道一致性
- PCB 设计确保所有采样路径阻抗匹配,避免信号失真。
资源限制
- 总采样率上限 = 单模块最大速率 × 模块数。
- 检查芯片规格:如单个 EADC 模块最大采样率 = 5 MSPS,则 4 模块交织可达 20 MSPS。
实时处理
伪代码示例(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 * 单模块速率
}
}
注意事项
非线性误差
- 增益/偏置失配 → 产生谐波失真。
- 解决方案:出厂校准或在运行时插入参考信号实时校准。
时钟偏斜(Skew)
- 各模块采样时刻未严格对齐 → 高频信号失真。
- 解决方案:使用片上延迟锁相环(DLL)或 FPGA 调整相位。
软件开销
- 重组数据需 CPU 参与时,高采样率可能导致瓶颈。
- 优化:用 DMA 链直接生成交织数据(部分 MCU 支持)。
通过以上步骤,可利用多个 EADC 模块将采样率提升至理论最大值,适用于高速数据采集系统(如超声、通信信号处理)。实际需结合芯片手册调整细节(如寄存器配置、时钟源选择)。
举报