一包要 25 个转换,ADC 规则组只有 16:双 ADC 并行采样

某测量仪器的高速帧,一个包里装 25 个采样:1 个电压 + 24 个电流。要采满这一包,ADC 得做 25 次转换。但 ADC 规则组一次最多放 16 个,25 个转换怎么凑出来,就是采样结构设计的核心取舍。结论是双 ADC 双 DMA 并行,绕开规则组上限。

一包要 25 个转换

高速帧是 64 字节,载荷里 25 个采样:sample[0] 是电压(每帧 1 次),sample[1..24] 是电流(每帧 24 次),帧率约 400 帧/秒。

两路信号一个包传输,靠帧内位置区分,9 字节通道头再标注 24 个电流各自属于哪个档位。

ADC 规则组一次最多 16 个

常见 MCU 的 ADC 规则组(regular group)决定一次扫描按顺序转哪些通道,上限有限。这块芯片的规则组最多 16 个转换(SQ1~SQ16)。

25 个转换一次扫不完。要么拆成多个规则组,要么反复触发,要么用多个 ADC。怎么凑这 25 个,决定了采样时序和电流流的连续性。

单 ADC 得来回切规则组,会有时序和死区

如果只用同一个 ADC,要兼顾电压和电流,就得来回切换规则组:切到电压组转 1 次,切到电流组转若干次,再切回电压组。每次切换都要重配 ADC 的转换序列,重配期间 ADC 不干活,电流流里就出现死区。

更麻烦的是 25 超出 16:一个规则组塞不下全部转换,得拆成两个组(16 + 9),中间还要切换。切换的时序抖动和死区,对要抓瞬态的电流测量很不友好。

双 ADC 让每个规则组都够小

用两个 ADC 各管一路,问题就没了:每个 ADC 只管自己的信号,规则组只需要 1 个通道。电流 ADC 连续采电流(24 次/帧),电压 ADC 采电压(1 次/帧),两路并行,不用切规则组,电流流没有死区。

采样结构对比

两个 ADC 对应两个 DMA 控制器,各自把采样搬进帧缓冲,电压写 sample[0],电流写 sample[1..24],合成一帧。

考虑过其他可能:反复触发单个 ADC 也能凑 25 个,但要精确控制电压和电流的穿插时序,和规则组切换一样容易出死区;外部 mux 切输入也要卡时序。双 ADC 的方案最干净:固件里能找到两个 ADC 基址和两个 DMA 控制器的引用,两路各扫各的,互不干扰。

比起单 ADC 来回切规则组,双 ADC 用两个转换器的代价,换来了电流的完整带宽和干净的时序。

推断边界

双 ADC 双 DMA 是最可能的结构,但来自反编译代码的片段推断。固件用 HAL 抽象层藏了大量细节,具体寄存器映射、两个 ADC 是否真正并行(还是共享时钟),未 100% 确认。这套结论不来自厂商文档,可能有错。