2. Clark变换与Park变换:三相坐标系与两相坐标系

好,咱们进入FOC算法里最核心的数学基础——坐标变换。说实话,很多初学者一看到这些矩阵公式就头大,觉得抽象。但我想告诉你,坐标变换的本质,就是换个角度看问题。

你想想看,电机里实际流的是三相正弦电流,可我们控制的时候,最想要的是像直流电机那样,直接控制转矩和磁通。怎么办?那就把三相静止坐标系下的东西,先变到两相静止坐标系,再旋转到跟转子同步的两相旋转坐标系。这就是Clark和Park干的事。

一句话总结:Clark变换把三相(abc)变两相(αβ),Park变换把静止两相(αβ)变旋转两相(dq)。逆变换就是反过来走。

2.1 为什么非要从三相变两相?

我刚开始做FOC时也有这个疑问:三相好好的,为什么要折腾?

原因其实很简单——三相耦合太强了。三相电流ia、ib、ic不是独立的,它们满足ia+ib+ic=0。你控制其中一相,另外两相跟着变。这就像三个人抬一个东西,你一个人使劲,另外两个人也得配合,控制起来很麻烦。

而两相坐标系下,两个轴是正交的(相差90°),互相解耦。你可以独立控制一个轴产生转矩,另一个轴产生磁通,互不干扰。这就是FOC的精髓——解耦控制。

我记得第一次调FOC参数时,在dq坐标系下调PID,感觉就像在调直流电机,非常直观。这就是变换带来的好处。

2.2 Clark变换:从abc到αβ

Clark变换,也叫3→2变换。它把三相静止坐标系(a、b、c轴互差120°)映射到两相静止坐标系(α轴和β轴正交)。

这里有个关键点:变换前后功率不变还是幅值不变?这是工程里最容易踩的坑。

  • 等幅值变换:变换前后电流/电压的幅值保持不变。工程上最常用,因为PI调节器的输出直接对应实际物理量。
  • 等功率变换:变换前后功率保持不变。理论推导常用,但工程实现时系数不同。

我个人习惯用等幅值变换,因为调试时更直观。下面给出等幅值Clark变换公式:

// 等幅值Clark变换
iα = ia
iβ = (ia + 2*ib) / √3

// 矩阵形式
| iα |   | 1       -1/2      -1/2   | | ia |
| iβ | = | 0       √3/2     -√3/2  | | ib |
| i0 |   | 1/2      1/2       1/2   | | ic |

注意那个i0分量,它叫零序分量。对于星形连接且中线不接的电机,ia+ib+ic=0,所以i0=0,可以忽略。但如果是三角形连接或者有中线,i0就不能丢。

我的经验:在代码实现时,不要直接套矩阵乘法,那样计算量大。用简化公式:iα = ia,iβ = (ia + 2*ib) * 0.57735(1/√3的近似值)。这样只需要两次乘法和一次加法,效率高很多。

2.3 Park变换:从αβ到dq

Clark变换后,我们得到了两相静止坐标系下的电流iα、iβ。但它们还是正弦波,没法直接控制。怎么办?让坐标系跟着转子转。

Park变换就是干这个的。它把静止的αβ坐标系,旋转到与转子磁极同步的dq坐标系。d轴(直轴)对准转子磁极方向,q轴(交轴)超前d轴90°。

变换公式如下:

// Park变换
id =  iα * cos(θ) + iβ * sin(θ)
iq = -iα * sin(θ) + iβ * cos(θ)

// 矩阵形式
| id |   |  cos(θ)   sin(θ) | | iα |
| iq | = | -sin(θ)   cos(θ) | | iβ |

这里的θ是转子电角度,由编码器或霍尔传感器提供。变换之后,id和iq就变成了直流量。你可以直接给它们设定目标值,用PI调节器控制。

我曾经踩过的坑:θ的零点校准。如果编码器安装时零点没对准,Park变换后的dq轴电流会耦合。表现为:你给iq设定值,id也跟着变。后来我养成了习惯——每次上电先做一次角度校准,确保d轴对准转子磁极。

2.4 逆变换:从dq回到abc

控制算法在dq坐标系下算出了目标电压ud、uq,但最终要加到电机三相绕组上。所以得变回去。

先做逆Park变换(dq→αβ):

// 逆Park变换
uα = ud * cos(θ) - uq * sin(θ)
uβ = ud * sin(θ) + uq * cos(θ)

再做逆Clark变换(αβ→abc):

// 等幅值逆Clark变换
ua = uα
ub = -0.5 * uα + (√3/2) * uβ
uc = -0.5 * uα - (√3/2) * uβ

最后得到的ua、ub、uc就是三相电压的给定值,送到SVPWM模块生成PWM波。

2.5 工程实现中的关键细节

理论讲完了,咱们聊聊实际写代码时要注意什么。

2.5.1 三角函数计算

Park变换里要用到sin和cos。如果每次都在中断里实时计算,CPU扛不住。我一般用两种方法:

  • 查表法:提前算好一个周期的sin值,存成数组。运行时根据θ查表,线性插值。速度快,精度够用。
  • CORDIC算法:只用移位和加减法算三角函数,适合没有FPU的MCU。

2.5.2 角度处理

θ的范围是0~2π,但编码器计数可能超过这个范围。我习惯把θ归一化到[0, 1)或[0, 2π),用取模运算处理。注意浮点数取模效率低,用定点数或整数实现更好。

2.5.3 变换顺序

FOC控制周期里,变换的顺序是固定的:

  1. 采样三相电流ia、ib、ic
  2. Clark变换:abc → αβ
  3. Park变换:αβ → dq
  4. PI调节器计算ud、uq
  5. 逆Park变换:dq → αβ
  6. 逆Clark变换:αβ → abc
  7. SVPWM输出

这个顺序不能乱,尤其是Park和逆Park用的θ必须是同一个时刻的角度。

核心要点:整个FOC的精度,很大程度上取决于坐标变换的精度。角度不准、系数不对、时序错乱,都会导致控制效果变差。我建议你在调试时,先把变换前后的波形打印出来,确认正弦波变直流量、直流量变正弦波都正确,再往下走。

2.6 知识体系总览

下面这张图把整个坐标变换的流程和关系画清楚了,你可以对照着看:

FOC坐标变换知识体系 三相静止坐标系 a, b, c 轴 互差120° Clark变换 两相静止坐标系 α, β 轴 正交(90°) Park变换 两相旋转坐标系 d, q 轴 与转子同步旋转 逆Park 逆Clark 关键参数说明 • θ(电角度):由编码器/霍尔传感器获取,决定Park变换的旋转角度 • 变换系数:等幅值(常用) vs 等功率(理论),工程实现时注意区分 • 零序分量i0:星形无中线时可忽略,三角形连接需保留 工程实现要点 1. 三角函数用查表法或CORDIC,避免实时计算 2. 角度θ归一化到[0, 2π),用取模运算处理 3. 变换顺序固定:采样→Clark→Park→PI→逆Park→逆Clark→SVPWM

2.7 常见问题与避坑

问题 现象 原因 解决方法
dq轴电流耦合 调iq时id跟着变 角度零点未校准 上电做角度校准,确保d轴对准转子磁极
电流波形畸变 三相电流不是正弦波 变换系数用错(等幅值vs等功率) 确认变换系数一致,逆变换用对应系数
高频噪声大 电流采样值跳动 角度更新与电流采样不同步 确保Park和逆Park用同一时刻的θ
电机转矩波动 低速时抖动明显 三角函数精度不够 提高查表点数或改用CORDIC

我的调试习惯:先在开环模式下验证坐标变换。给一个固定的ud和uq,看三相电流是不是正弦波,频率对不对。确认变换无误后,再闭环调PI。这样能快速定位问题是出在变换还是出在控制。