3、采样时序与PWM同步:为什么要在PWM中心点采样?采样窗口与死区时间的关系
做电流采样,最怕什么?
怕采到的值不是真实值,怕采样时刻正好赶上开关管切换,怕那一瞬间的尖峰把ADC烧了。
我刚开始做电机驱动那会儿,就踩过这个坑。板子调好了,电流波形看着也对,但一加负载就跳闸。查了三天,最后发现是采样点没选对——正好采在了开关管动作的瞬间。嗯,从那以后,我再也不敢随便选采样时刻了。
3.1 为什么是PWM中心点?
先问一个问题:一个PWM周期里,什么时候电流最“干净”?
答案是——中心点。
你想想看,PWM的开关管在周期开始和结束的时候动作最频繁。开通瞬间有米勒平台,关断瞬间有电压尖峰,这些都会耦合到电流采样回路里。而中心点呢?开关管要么全开,要么全关,状态稳定,没有跳变。
说白了,中心点就是整个PWM周期里噪声最小的那个窗口。
核心结论:在PWM中心点采样,可以避开开关管动作带来的共模干扰和尖峰噪声,获得最接近真实值的电流信号。
我个人习惯把采样点放在三角载波的波峰或波谷。为什么?因为这时候PWM比较器的输出刚好完成更新,三相占空比都稳定了,电流也进入了续流状态。你采到的值,就是这一拍的真实相电流。
3.2 采样窗口到底有多宽?
采样窗口不是你想多宽就多宽的。它受两个东西限制:
- PWM周期——周期越长,窗口越宽
- 死区时间——死区越大,窗口被吃掉得越多
我画了一张图,帮你理清这个关系:
从图上你能看到:每个PWM周期有两个采样窗口——波峰和波谷。死区时间分布在开关管切换的边沿,正好和采样窗口错开。这就是为什么中心点采样能“天然避让”死区。
3.3 死区时间怎么吃掉采样窗口?
死区时间,说白了就是上下管同时关断的那段“真空期”。为了防止直通短路,你必须留出这个时间。
但死区不是免费的。它会把采样窗口往中间挤。
| PWM频率 | 周期 | 死区时间 | 可用采样窗口 | 窗口占比 |
|---|---|---|---|---|
| 10 kHz | 100 μs | 1 μs | 约 48 μs | 48% |
| 20 kHz | 50 μs | 1 μs | 约 23 μs | 46% |
| 40 kHz | 25 μs | 1 μs | 约 10.5 μs | 42% |
| 100 kHz | 10 μs | 0.5 μs | 约 4 μs | 40% |
看到没?频率越高,窗口越窄。到了100 kHz,你只有4微秒的采样窗口。ADC的采样保持时间如果超过这个数,那就采不完了。
注意:采样窗口必须大于ADC采样保持时间 + 信号建立时间。如果窗口不够宽,要么降低PWM频率,要么换更快的ADC,要么改用多相采样策略。我曾经在一个项目里硬扛100 kHz,结果ADC根本来不及建立,采出来的值全是错的。
3.4 实际项目中的采样策略
我总结了几种常见的做法,你可以根据项目需求选:
- 单次中心点采样——最简单,每个PWM周期只采一次。适合对成本敏感、对纹波要求不高的场合。
- 双次对称采样——波峰和波谷各采一次,然后取平均。能抵消一部分纹波,适合中端驱动器。
- 多拍过采样——在窗口内连续采多次,然后做数字滤波。适合高精度场合,但计算量大。
- 同步触发采样——用PWM的硬件触发信号直接启动ADC,延时最小。我建议能用硬件触发就别用软件触发,省一个中断开销。
我的经验:如果你用的是STM32或TI的C2000系列,它们都有PWM触发ADC的硬件机制。把采样点配置成“三角载波计数等于0”或“等于周期值”,就能自动对齐中心点。我一般还会加一个小的延时(比如100 ns),让采样时刻稍微避开开关管关断的尾巴。
3.5 避坑指南
最后,分享几个我踩过的坑:
- 别在死区里采样——死区期间电流走体二极管续流,采样值会偏低。我曾经因为这个把电流环增益调大了三倍,结果一跑就振荡。
- 注意采样保持电容的建立时间——尤其是高阻抗输入时,RC常数可能很大。我建议在ADC输入端加一个缓冲器,或者至少把采样时间设到最大。
- 多相电流采样要错开——如果你用三个ADC同时采三相电流,要确保它们的采样窗口不重叠,否则电源会瞬间被拉垮。
- 死区补偿和采样是两回事——死区补偿修正的是电压误差,采样时序解决的是电流真实性。别混为一谈。
嗯,采样时序这件事,说难不难,说简单也不简单。关键是你得理解PWM和ADC之间的“默契”——什么时候该动,什么时候该等。中心点采样就是这个默契的起点。