数学基础回顾:Clark变换与Park变换的推导、SVPWM原理

做FOC控制,说白了就是跟三个坐标系打交道。你想想看,电机里转的是磁场,可我们控制器能处理的只有三相电压电流。怎么把这两者联系起来?靠的就是坐标变换。

我刚开始接触FOC时,觉得这些变换公式就是一堆矩阵乘法,背下来就行。后来在项目里调试一台高速主轴电机,转速一上去电流波形就畸变,我才意识到——不理解变换的物理含义,你连问题出在哪都找不到。

Clark变换:从三相到两相

三相绕组在空间上相差120°,通入三相电流后会产生一个旋转磁动势。Clark变换要做的,就是把这三个轴上的分量,投影到两个正交的轴上去。

数学上很简单。假设三相电流为 ia、ib、ic,且满足 ia + ib + ic = 0(星形接法无中线),那么:

iα = ia
iβ = (ia + 2·ib) / √3

这是等幅值变换的常用形式。为什么α轴直接取ia?因为我习惯把A相绕组轴线作为α轴,这样变换矩阵最简单。

我的习惯:实际代码里我从来不用浮点除法算√3的倒数。我会预计算一个常量 INV_SQRT3 = 0.577350269f,乘法比除法快得多。在C2000或STM32上,这点差异在高频控制环里能省下不少CPU周期。

Park变换:从静止到旋转

Clark变换后我们得到了αβ坐标系下的分量,但它们还是交流量。对于PI控制器来说,跟踪交流信号会有稳态误差。Park变换就是来解决这个问题的——把αβ坐标系旋转到与转子磁场同步的dq坐标系。

变换公式:

id = iα·cosθ + iβ·sinθ
iq = -iα·sinθ + iβ·cosθ

其中θ是转子电角度。你看,经过Park变换后,id和iq就变成了直流量。PI控制器对付直流量,那叫一个轻松。

关键理解:id控制励磁分量,iq控制转矩分量。在表贴式永磁同步电机(SPMSM)中,我们通常让id=0,所有电流都用来产生转矩。但在内置式永磁同步电机(IPMSM)中,需要注入负的id来利用磁阻转矩——这就是MTPA(最大转矩电流比)控制的基础。

我曾经在一个项目里犯过低级错误:编码器安装时零位没对准,导致Park变换用的θ始终偏了30°电角度。结果电机能转,但电流很大,效率极低。查了两天才发现是角度偏了。嗯,从那以后我每次上电都会做一次角度校准。

SVPWM原理:不是简单的正弦波

很多人以为FOC最终输出的是三相正弦波电压。其实不是。我们输出的是PWM波,通过占空比组合来等效合成期望的电压矢量。SVPWM(空间矢量脉宽调制)比传统的SPWM(正弦脉宽调制)电压利用率更高——能高出约15.47%。

为什么?因为SVPWM不是单纯地调制三相正弦波,而是直接合成空间电压矢量。它利用了逆变器的6个开关管组成的8种开关状态(6个有效矢量 + 2个零矢量),在复平面上合成任意方向的电压矢量。

空间电压矢量合成

逆变器有6个开关管,上桥臂3个,下桥臂3个。同一桥臂上下不能同时导通。所以每个桥臂只有两种状态:上通下断(记为1)或上断下通(记为0)。

这样三相共有2³=8种组合。其中6种产生非零电压矢量(V1~V6),2种产生零矢量(V0和V7)。这6个非零矢量在空间上相隔60°,把复平面分成了6个扇区。

矢量 开关状态 (A,B,C) 幅值 角度
V0 000 0 -
V1 100 2/3·Vdc 0°
V2 110 2/3·Vdc 60°
V3 010 2/3·Vdc 120°
V4 011 2/3·Vdc 180°
V5 001 2/3·Vdc 240°
V6 101 2/3·Vdc 300°
V7 111 0 -

合成任意电压矢量的方法很简单:用相邻的两个有效矢量,加上零矢量,通过调整它们的作用时间来逼近目标矢量。这就是「伏秒平衡」原则。

假设目标矢量 Vref 落在扇区 I(0°~60°之间):
Vref · Ts = V1 · T1 + V2 · T2 + V0 · T0

其中 Ts 是PWM周期,T1、T2、T0 分别是V1、V2、V0的作用时间。
T1 = √3 · |Vref| / Vdc · Ts · sin(60° - θ)
T2 = √3 · |Vref| / Vdc · Ts · sin(θ)
T0 = Ts - T1 - T2
注意:当 |Vref| 超过 Vdc/√3 时,T1 + T2 会大于 Ts,这就是过调制区。此时必须进行等比例缩小处理,否则输出电压波形会畸变。我在做伺服驱动器时遇到过这个问题——电机高速运行时突然抖动,查了半天发现是过调制处理没做好。

下面这张图展示了SVPWM的核心逻辑:从目标电压矢量到扇区判断,再到作用时间计算,最后生成PWM比较值。

SVPWM 实现流程 Vα, Vβ 输入 扇区判断 (N=1~6) 计算 T1, T2, T0 T1+T2 > Ts ? 是 等比例缩小处理 否 生成PWM比较值 关键点 • 扇区由 Vα, Vβ 符号决定 • 过调制时需等比例缩小 • 七段式/五段式SVPWM选择

实际实现时,我通常用七段式SVPWM。为什么?因为七段式在每个PWM周期内只切换一次开关状态,开关损耗小,谐波含量也低。五段式虽然开关损耗更小,但谐波会大一些。嗯,具体用哪种,得看你的应用场景——如果母线电压紧张,五段式能多榨出一点电压利用率。

避坑指南:我曾经在调试一台大功率伺服时,发现SVPWM输出的电压矢量在扇区边界处有跳变。原因是扇区切换时,T1和T2的计算公式里用到了sin(60°-θ)和sin(θ),这两个值在边界处不连续。解决办法是在扇区切换时做平滑过渡,或者用查表法配合插值。后来我干脆把整个SVPWM改成了基于反正切直接计算占空比的方式,彻底解决了这个问题。

Clark变换、Park变换和SVPWM,这三块是FOC的数学基石。你把这些吃透了,后面的电流环、速度环设计才能得心应手。别急着往下赶,花点时间把变换的物理意义想明白——每个公式背后都有对应的物理过程,理解了这些,调试时你才能一眼看出问题出在哪个环节。