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 同步误差的典型场景

我整理了几种常见的同步误差场景,你可以对照自己的项目看看属于哪一种:

  1. 场景一:ADC采样在PWM更新之后
    • 采样到的电流是上一个周期的值,但PWM已经更新了
    • 结果:电流环控制滞后一个周期,动态响应变差
  2. 场景二:ADC采样在PWM更新之前
    • 采样到的电流是当前周期的值,但PWM还没更新
    • 结果:控制量计算正确,但执行延迟一个周期
  3. 场景三:ADC采样正好在PWM更新时刻
    • 采到开关噪声,电流波形出现毛刺
    • 结果:电流环输入信号信噪比下降,控制精度降低

我曾经在一个高速BLDC项目里遇到过场景一。电机跑到15000rpm时,电流波形开始剧烈抖动。一开始以为是机械共振,后来用示波器抓了PWM和ADC触发信号,发现采样点比PWM更新晚了整整12微秒。对于15000rpm的电机,12微秒对应的角度偏移已经超过10度了。这个误差直接导致电流环失稳。

1.5 知识体系总览

下面这张图,把同步误差的根源、触发方式、影响和补偿思路串起来了。你可以把它当作本章的知识地图。

同步误差知识体系 同步误差根源 PWM更新时刻 ADC采样时刻 硬件触发(定时器) 软件触发(中断/轮询) 采样在更新之后 采样在更新之前 采样在更新时刻 影响:角度偏移 → dq轴串扰 → 转矩波动 → 效率下降 补偿思路:软件角度修正 + 采样时刻调整 本章重点:理解错位机理 → 后续章节将展开软件补偿的具体实现

1.6 小结:理解错位,才能补偿

同步误差不是玄学,它有明确的物理根源和量化指标。PWM更新时刻和ADC采样时刻的错位,是FOC系统中最容易被忽视但又影响最大的问题之一。

硬件触发和软件触发的选择,直接决定了你的采样时刻精度。我个人强烈建议:能用硬件触发,就别用软件触发。这不仅是性能问题,更是稳定性的问题。