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变化,产生共模噪声。这个噪声会通过寄生电容耦合到采样电路。如果你采样窗口刚好覆盖了这个噪声区间,那采到的电流值就是错的。
我一般会这样设计采样时序:
- 确定PWM开关时刻:记录PWM上升沿和下降沿的时间点。
- 计算噪声衰减时间:一般需要等待100-200ns,等振铃衰减。
- 设置采样窗口:在噪声衰减后的“平坦区”开始采样。
- 预留保护间隔:采样窗口结束前,留出至少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 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你一看就明白:
这张图把四个核心知识点串起来了。你从中心出发,沿着箭头走一遍,就能理解它们之间的关系。同步采样是基础,过采样是精度提升,采样窗口同步是时序保障,抖动抑制是稳定性关键。缺一个,整个采样系统都会出问题。