1. 采样同步问题概述:FOC 的“心跳”乱了吗?

做 FOC 控制,说白了就是跟电流、速度、位置这三个家伙打交道。你想想看,每次控制周期,DSP 或者 MCU 都要先采样电流,然后扔进 Clark/Park 变换,算 PI,再发 SVPWM。这一套流程,就像人的心跳——得有个稳定的节拍。

但问题来了:采样时刻和 PWM 更新时刻,真的能完美对齐吗?

我在项目里遇到过好几次,电机低速时转得好好的,一加速就开始“嗡嗡”叫,电流波形像锯齿。查了半天,不是 PI 参数的问题,是采样点踩在了 PWM 开关噪声上。嗯,这就是典型的采样同步问题。

什么是 FOC 采样同步问题?

简单说,就是 ADC 采样电流的时刻,没有落在 PWM 载波的“干净窗口”里。FOC 依赖电流反馈,如果采到的电流里混入了开关噪声、死区毛刺,那算出来的电压矢量就是错的。

理想情况下,我们希望每次都在 PWM 载波的波峰或波谷——也就是开关管动作结束、电流最平稳的时刻——触发 ADC。但实际工程中,PWM 频率、载波模式、死区时间、甚至代码执行时间,都会让这个“理想时刻”偏移。

核心矛盾: PWM 开关动作产生噪声,而 ADC 采样需要避开噪声;但控制算法又必须在每个 PWM 周期内完成采样、计算、更新。

为什么它如此重要?

我直接说结论:采样不同步,FOC 就是“盲人摸象”。

  • 电流畸变: 采到噪声,电流环 PI 输出抖动,转矩脉动增大。
  • 速度波动: 电流环不稳,速度环跟着晃,低速时尤其明显。
  • 效率下降: 谐波电流增加铜耗,电机发热。
  • 极限工况失效: 弱磁区或重载时,一个错误的采样值可能触发过流保护。

我记得有一次调试 48V 低压伺服,客户要求零速带载 200% 不抖动。我花了三天调 PI,纹波始终降不下来。最后用示波器一看,ADC 触发点正好落在 PWM 死区结束后的振铃上。把采样点往后挪了 1μs,问题直接解决。你看,同步问题不解决,参数调得再好也白搭。

它如何影响电机控制性能?

咱们从三个维度来看:

性能维度 同步良好 同步不良
电流 THD <3% 5%~15%
转矩脉动 <1% 额定转矩 3%~8% 额定转矩
速度环带宽 可达 200Hz+ 通常<100Hz
零速带载能力 稳定 抖动甚至失控

你想想看,电流 THD 从 3% 涨到 15%,电机能不烫吗?转矩脉动大了,位置控制精度直接报废。我见过一个做协作机器人的朋友,他的关节电机空载跑 FOC 没问题,一装上负载就“嘎嘎”响。最后发现是采样窗口没对准,电流反馈里混入了 200kHz 的开关毛刺。滤波器加狠了,相位滞后又太大,速度环振荡。这就是典型的“同步问题引发连锁反应”。

采样同步问题的根源在哪?

我个人习惯把原因归为三类:

  1. PWM 载波模式选择: 中心对齐还是边沿对齐?对称 PWM 还是不对称 PWM?不同模式下的“干净窗口”位置不同。
  2. 死区与开关暂态: 死区时间内的续流过程会产生电压尖峰和振铃,如果采样点落在这个区间,噪声直接进入 ADC。
  3. 代码执行时间抖动: 中断响应延迟、条件分支耗时不同,导致 ADC 触发时刻在每个周期内漂移。
避坑提醒: 我曾经在 STM32G4 上用过连续转换模式,以为硬件自动触发就万事大吉。结果发现 DMA 传输完成中断和 PWM 更新中断有竞争,偶尔会丢一次采样。后来改成注入组同步触发,才彻底解决。所以,不要完全相信硬件默认配置,一定要用示波器确认采样点位置。

一张图看懂采样同步问题

下面这张图展示了 FOC 控制周期内,PWM 载波、ADC 采样、算法计算、PWM 更新之间的时序关系。红色区域就是“危险区”——开关噪声高发地带;绿色区域是“安全窗口”——理想的采样触发区间。

FOC 采样同步时序图 FOC 控制周期采样同步时序 PWM 载波(三角波) T₀ T₁ T₂ T₃ 安全窗口 开关噪声区 ADC 采样 计算 PWM 更新 错误采样点 正确采样点 采样点必须避开开关噪声区 落在安全窗口内
我的经验: 调试初期,先用示波器探头测 PWM 输出和 ADC 触发信号,确认采样点位置。别急着调 PI,先保证“眼睛”没瞎。我习惯在代码里留一个 GPIO 翻转脚,每次 ADC 采样完成时拉高,这样用示波器一看就知道采样点落在哪。

小结

采样同步问题,是 FOC 工程化的第一道坎。它不复杂,但容易被忽略。很多新手把精力全花在 PI 参数整定上,却不知道反馈信号本身就是脏的。后面的章节,我会带你一步步拆解:如何选择 PWM 模式、如何配置 ADC 触发、如何处理死区影响、如何用硬件和软件方法实现精确同步。

嗯,先把基础打牢,后面才能跑得快。