4. ADC采样策略:同步采样与过采样技术,采样窗口与PWM同步,采样抖动抑制

ADC采样,说白了就是MCU的“眼睛”。眼睛不好使,后面算法再牛也白搭。尤其在无感启动这种大电流、强干扰的场景下,采样不准,过流保护就是摆设。

我见过不少工程师,花大价钱买高性能MCU,结果采样策略一塌糊涂。电流波形都畸变了,还在那调PI参数。嗯,咱们先把底子打好。

4.1 同步采样:跟PWM步调一致

什么叫同步采样?就是ADC的采样时刻,必须跟PWM的开关动作对齐。为什么?因为电机电流在PWM开关瞬间会有巨大的尖峰和振铃。你如果在那个时刻采样,采到的全是噪声。

我个人习惯的做法是:在PWM载波周期的波谷或波峰处触发采样。这时候开关管已经稳定导通或关断,电流纹波最小。

核心原则:采样窗口必须避开PWM开关瞬态。一般建议在PWM计数器的峰值或谷值处触发ADC。

具体怎么实现?以STM32G4为例,它的HRTIM可以产生同步信号给ADC。我一般这么配:

// 伪代码:PWM与ADC同步配置
// 设置PWM定时器,载波频率20kHz
PWM_Frequency = 20000;  // 50us周期
PWM_Period = 7200;      // 假设主频144MHz,7200个时钟周期

// 配置ADC触发源为PWM定时器的TRGO事件
// 选择在PWM计数器上溢(峰值)时触发
ADC_Trigger_Source = TIMx_TRGO_Update;

// 设置采样时间
ADC_Sample_Time = 12;   // 12个ADC时钟周期,约83ns(ADC时钟36MHz)

// 启动连续转换
ADC_Start_Conversion();

这里有个坑:触发延迟。从PWM触发信号发出,到ADC真正开始采样,中间有硬件延迟。我曾在项目里吃过这个亏,采样窗口刚好落在开关噪声的尾巴上。后来加了几个时钟周期的延时补偿,问题才解决。

4.2 过采样技术:用时间换精度

MCU的ADC分辨率通常是12位。对于过流保护,12位够不够?说实话,勉强够。但如果你想要更精细的电流检测,比如检测5mA级别的变化,12位就不太行了。

过采样技术,说白了就是用多次采样取平均,等效提高分辨率。每过采样4次,等效增加1位分辨率。想要14位效果?那就采16次。

目标分辨率 过采样次数 数据右移位数 噪声抑制效果
12位(原生) 1 0 无
13位 4 2 6dB
14位 16 4 12dB
15位 64 6 18dB
16位 256 8 24dB

你想想看,过采样256次才能到16位。但代价是什么?采样时间。如果每次采样需要1us,256次就是256us。对于20kHz的PWM周期(50us),你根本采不完。

注意:过采样不是万能的。它只能抑制白噪声,对周期性噪声(比如开关噪声)效果有限。而且过采样次数太多,会引入相位延迟,影响电流环的响应速度。

我建议的做法是:在低速或稳态运行时,用过采样提高精度;在高速或动态响应时,降低过采样次数,保证实时性。

4.3 采样窗口与PWM同步:精确到纳秒级

采样窗口,就是ADC实际采样的那段时间窗口。它必须精确地落在PWM周期的“安静区”。

为什么会这样?因为电机相电流在PWM开关瞬间会有剧烈的di/dt变化,产生共模噪声。这个噪声会通过寄生电容耦合到采样电路。如果你采样窗口刚好覆盖了这个噪声区间,那采到的电流值就是错的。

我一般会这样设计采样时序:

  1. 确定PWM开关时刻:记录PWM上升沿和下降沿的时间点。
  2. 计算噪声衰减时间:一般需要等待100-200ns,等振铃衰减。
  3. 设置采样窗口:在噪声衰减后的“平坦区”开始采样。
  4. 预留保护间隔:采样窗口结束前,留出至少50ns的余量。

小技巧:如果你用的MCU支持ADC注入组,可以把过流保护的采样配置为注入组,优先级高于规则组。这样即使主程序在忙,过流采样也能准时触发。

我曾经在一个项目中,采样窗口只偏移了30ns,结果过流保护误动作率从0.1%飙升到5%。后来用示波器一量,发现采样窗口刚好落在开关噪声的尖峰上。调整了触发相位后,误动作率降到了0.01%以下。

4.4 采样抖动抑制:让采样时刻稳如磐石

采样抖动,就是ADC触发时刻的随机偏差。抖动来源很多:时钟抖动、中断延迟、总线仲裁、DMA传输延迟……

抖动大了会怎样?你想想看,本来应该在PWM波谷采样的,结果因为抖动,有时候采到了波谷,有时候采到了斜坡上。采到的电流值忽大忽小,电流环跟着乱抖。

抑制抖动,我总结了几个实用方法:

  • 硬件触发优先:用PWM定时器的硬件事件直接触发ADC,不要经过软件中断。硬件触发延迟是固定的,软件中断有不确定性。
  • DMA传输:ADC转换结果用DMA搬运,不要用CPU轮询。CPU轮询会受中断优先级影响,产生抖动。
  • 时钟源选择:ADC的时钟尽量用独立的、低抖动的时钟源。不要跟CPU共用PLL,PLL的抖动会耦合到ADC。
  • 采样保持时间:适当延长采样保持时间,可以降低输入信号抖动的影响。但别太长,否则会限制采样率。

嗯,这里要注意:抖动是随机的,你无法完全消除,但可以把它控制在可接受范围内。对于过流保护,我一般要求采样时刻的抖动不超过PWM周期的1%。20kHz的PWM,抖动要控制在500ns以内。

4.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你一看就明白:

ADC采样策略知识体系 ADC采样策略 同步采样 过采样技术 采样窗口同步 采样抖动抑制 PWM波谷触发 避开开关瞬态 多次采样平均 等效提高分辨率 噪声衰减后采样 预留保护间隔 硬件触发优先 DMA传输 独立时钟源 延长采样保持时间

这张图把四个核心知识点串起来了。你从中心出发,沿着箭头走一遍,就能理解它们之间的关系。同步采样是基础,过采样是精度提升,采样窗口同步是时序保障,抖动抑制是稳定性关键。缺一个,整个采样系统都会出问题。