1. 同步误差的根源:PWM更新时刻与ADC采样时刻的错位分析
做FOC的人,十有八九都遇到过电流波形上莫名其妙多出来的毛刺。示波器一抓,电流正弦波上像长了刺一样。很多人第一反应是硬件滤波没做好,或者传感器噪声太大。但我告诉你,大部分情况下,问题出在采样时刻和PWM更新时刻没对齐。
说白了,就是ADC采样的那一瞬间,和PWM占空比更新的那一瞬间,没对上。这个错位,就是同步误差的根源。
1.1 为什么PWM更新和ADC采样会错位?
先看一个典型的FOC时序。PWM定时器在计数到零或者计数到峰值时,会触发一次更新事件。这个事件会把影子寄存器的值搬到比较寄存器里,PWM波形才会真正改变。而ADC采样,要么靠软件手动触发,要么靠硬件事件触发。
问题来了——这两个事件的时间点,天然就不一样。
核心矛盾:PWM更新发生在载波周期的边界(零或峰值),而ADC采样如果也放在边界,采到的恰恰是开关动作带来的噪声尖峰。所以很多人会把ADC采样放在载波的中间位置,避开噪声。但这样一来,采样时刻和更新时刻就错开了。
我刚开始做FOC时,就踩过这个坑。当时用的是STM32F4,PWM频率20kHz,ADC采样放在定时器上溢中断里手动触发。结果电流波形怎么调都不对,谐波特别大。后来用示波器抓了PWM输出和ADC采样触发信号,才发现采样点正好落在PWM跳变的边沿上。那噪声,简直没法看。
1.2 硬件触发 vs 软件触发:两种方式的本质区别
ADC采样触发方式,主要分两种:硬件触发和软件触发。很多人觉得不就是触发方式不同嘛,能有多大区别?区别大了去了。
| 对比项 | 硬件触发 | 软件触发 |
|---|---|---|
| 触发源 | 定时器事件(PWM计数器匹配) | CPU执行指令(中断或轮询) |
| 延迟抖动 | 固定,纳秒级 | 不确定,微秒级甚至更大 |
| CPU占用 | 几乎不占用 | 需要进入中断或轮询 |
| 采样时刻精度 | 高,与PWM时钟同步 | 低,受中断响应延迟影响 |
| 适用场景 | 高频FOC、对时序敏感 | 低频、调试阶段、资源紧张 |
硬件触发,说白了就是让定时器自己决定什么时候采样。你只需要配置好触发条件,比如计数器计数到某个特定值时,自动触发ADC。这个时刻是确定的,和PWM时钟完全同步,抖动几乎可以忽略。
软件触发呢?你得在中断服务函数里手动调用ADC启动函数。但中断响应本身就有延迟——CPU正在处理其他任务、中断优先级嵌套、总线仲裁……这些都会让采样时刻飘移。我实测过,在STM32G4上,软件触发的抖动大概在0.5~2微秒之间。对于20kHz的PWM(周期50微秒),这个抖动已经能造成明显的电流畸变了。
我的建议:只要芯片支持,FOC项目一律用硬件触发。软件触发只适合做原型验证或者低速电机控制。别问我怎么知道的——我有个项目为了省一个定时器通道,硬用软件触发,结果调试了整整两周才把电流纹波压下去。
1.3 同步误差的量化分析
同步误差到底会造成什么影响?我们来算一笔账。
假设PWM频率20kHz,周期50微秒。ADC采样点放在载波中心,也就是25微秒处。PWM更新发生在0微秒(计数器归零)。那么采样时刻和更新时刻的偏差就是25微秒。
这25微秒意味着什么?
- 电机转速3000rpm,极对数4对,电频率200Hz。25微秒对应的电角度偏移 = 200 × 360 × 25e-6 = 1.8度。
- 电机转速6000rpm,电频率400Hz。同样的25微秒,角度偏移 = 3.6度。
你想想看,3.6度的角度误差,在FOC的Park变换里,会让电流环的d轴和q轴分量互相串扰。本来应该完全解耦的,现在d轴电流里混进了q轴分量,q轴电流里混进了d轴分量。结果就是转矩波动、效率下降、发热增加。
注意:这个误差是固定的,不是随机的。固定误差意味着它不会因为平均滤波而消除。你加再多软件滤波,也滤不掉这个系统性的偏差。
1.4 同步误差的典型场景
我整理了几种常见的同步误差场景,你可以对照自己的项目看看属于哪一种:
- 场景一:ADC采样在PWM更新之后
- 采样到的电流是上一个周期的值,但PWM已经更新了
- 结果:电流环控制滞后一个周期,动态响应变差
- 场景二:ADC采样在PWM更新之前
- 采样到的电流是当前周期的值,但PWM还没更新
- 结果:控制量计算正确,但执行延迟一个周期
- 场景三:ADC采样正好在PWM更新时刻
- 采到开关噪声,电流波形出现毛刺
- 结果:电流环输入信号信噪比下降,控制精度降低
我曾经在一个高速BLDC项目里遇到过场景一。电机跑到15000rpm时,电流波形开始剧烈抖动。一开始以为是机械共振,后来用示波器抓了PWM和ADC触发信号,发现采样点比PWM更新晚了整整12微秒。对于15000rpm的电机,12微秒对应的角度偏移已经超过10度了。这个误差直接导致电流环失稳。
1.5 知识体系总览
下面这张图,把同步误差的根源、触发方式、影响和补偿思路串起来了。你可以把它当作本章的知识地图。
1.6 小结:理解错位,才能补偿
同步误差不是玄学,它有明确的物理根源和量化指标。PWM更新时刻和ADC采样时刻的错位,是FOC系统中最容易被忽视但又影响最大的问题之一。
硬件触发和软件触发的选择,直接决定了你的采样时刻精度。我个人强烈建议:能用硬件触发,就别用软件触发。这不仅是性能问题,更是稳定性的问题。