跳转到内容

ADC DMA 采样与滤波调试提示词范例

请直接帮我定位并修复当前 STM32 工程中 ADC DMA 连续采样数据跳变、滤波后仍不稳定的问题。
你可以检查和修改当前工程代码,执行构建、烧录和调试;请以寄存器配置、DMA 缓冲区、运行日志和可获得的硬件测量为证据完成验证。没有示波器或真实输入源数据时,不要宣称模拟信号质量已经改善,应明确软件侧已验证范围和待测硬件项。
1. 项目背景
目标 MCU:STM32G4 系列。
采样对象:电流/电压传感器模拟输出,ADC1 扫描 3 个通道。
触发方式:TIM1 更新事件触发 ADC;DMA 循环模式将每次扫描结果写入双缓冲区;控制任务以 20kHz 读取最新完整样本。
当前现象:偶发出现单个通道跳变到满量程或 0,移动平均滤波后控制量仍有明显毛刺。请以工程真实的 ADC 时钟、采样时间、触发源、DMA 配置和通道顺序为准。
2. 请完成以下工作
- 找到时钟树、TIM1 触发、ADC 初始化/校准、规则组序列、DMA 配置、缓存定义、DMA 半传输/全传输中断、滤波和控制任务代码;
- 核对 ADC 内核时钟、分辨率、采样时间、转换序列、外部触发边沿、连续/扫描模式、overrun 策略、DMA 数据宽度与循环模式;确认每个通道的采样时间满足源阻抗和 ADC 输入建立时间要求;
- 核对 DMA 缓冲区长度、对齐、元素类型、双缓冲索引切换和 CPU/DMA 并发访问。控制任务只能消费已完成的半缓冲或全缓冲,不能读取 DMA 正在写入的区域;
- 检查 ADC overrun、DMA transfer error、半传输/全传输回调和缓存边界错误;对异常计数、最大/最小原始值、完成序号和缓冲区索引增加轻量可观测日志;
- 检查偏置校准、量程换算和滤波器实现。明确滤波窗口、截止特性、群延迟及其对 20kHz 控制环的影响,避免用加大窗口掩盖数据一致性错误;
- 通过调试会话和 RTT/UART 观察真实配置、DMA 缓冲区切换、原始值及异常计数。若现场有示波器或信号源,请同步验证定时器触发点、模拟输入稳定性与采样窗口;
- 以最小修改修复确认的问题,重新构建、烧录并在稳定输入和阶跃输入下各采集至少 60 秒;统计丢失/过载/DMA 错误次数、单点异常次数、原始值峰峰值、滤波后峰峰值与阶跃响应时间。
验收标准:DMA 不再读取未完成缓冲区,ADC overrun 与 DMA 错误计数为零或有明确可恢复策略;稳定输入时滤波后噪声达到项目目标且不以不可接受的控制延迟为代价;最终说明根因、修改文件、配置/运行证据和测试统计。