Featured image of post AD7606B 调试问题及解决方案总结

AD7606B 调试问题及解决方案总结

AD7606B 在多通道采样及 FFT 调试过程中遇到的问题及解决方案总结

最近在调试STM32F429和AD7606B通过FMC并口进行数据通讯,并将采集到的数据存储到循环队列中,当队列中数据达到512个点时开始进行FFT计算,计算幅值,频率及相位。现在将调试过程中遇到的问题总结如下。

1. FFT 计算中信号幅值偶尔为 0 的问题

问题描述:

在调试 8 通道交流采样及 FFT 计算时,偶尔会出现计算出的信号幅值为 0 的异常情况。

原因分析:

  • BUSY 下降沿中断 中读取 AD7606B 通道数据后,直接进行浮点数转换,导致中断处理时间过长。
  • 中断处理时间延长会影响后续数据采样的及时性,进而导致 FFT 计算错误。

解决方案:

  • 优化中断处理流程:
    在 BUSY 下降沿中断中,仅进行数据读取和存储到队列的操作,不做浮点数转换。
  • 数据处理调整:
    将数据转换为浮点数的操作放到 主任务中,在进行 FFT 计算前完成
  • 效果:
    解决了信号幅值偶尔为 0 的问题,FFT 计算结果稳定。

2. 多通道 FFT 队列溢出问题

问题描述:

在实现 4 通道实时采样的 FFT 时没有问题,但当扩展到 6 通道同时进行 FFT 时,出现 数据队列溢出的现象。

原因分析:

  • 数据量增大导致 主任务处理速度跟不上数据采样速度。
  • 队列长度不足,未及时处理的数据导致溢出。

解决方案:

  • 优化队列处理机制:
    增加队列长度,调整数据处理优先级,确保主任务能及时处理数据。
  • 提高数据处理效率:
    精简主任务中与数据处理无关的操作,减少数据处理延迟
  • 效果:
    队列溢出问题明显改善,6 通道同时 FFT 运行稳定。

3. 定时器中断频繁导致系统性能下降

问题描述:

使用定时器中断控制 CONVST 引脚 触发 AD7606B 进行数据采样时,定时器中断过于频繁,导致主任务频繁被打断,影响系统性能。

原因分析:

  • 定时器中断频率高,占用大量 CPU 时间,降低了系统的整体响应速度。
  • 中断嵌套过多,影响数据处理的实时性。

解决方案:

  • 改用 PWM 方式生成 CONVST 采样信号:
    利用 定时器的 PWM 输出功能 控制 CONVST 引脚,代替频繁的中断触发方式。
  • 优化中断使用:
    仅在必要时使用中断,避免高频率的定时器中断干扰主任务。
  • 效果:
    显著降低了系统中断频率,提高了系统性能和实时数据处理能力

总结

  • 中断优化: 降低中断处理的复杂度,将数据处理任务尽量放到主任务中。
  • 数据处理效率: 合理使用队列和缓冲区,确保数据流的实时性。
  • 系统性能提升: 使用硬件 PWM 替代软件中断,减少系统负担。

以上是 AD7606B 调试过程中遇到的主要问题及解决方案总结。

使用 Hugo 构建
主题 StackJimmy 设计