4. 坐标变换详解:从三相静止到两相旋转

坐标变换,说白了就是换一个角度看问题。你想想看,电机里那三相绕组缠得密密麻麻,电流电压都是正弦波,控制起来多麻烦。但如果我们换个坐标系,把这些交流量变成直流量,那PID调节器就能直接上了。这就是坐标变换的核心价值。

我个人习惯把坐标变换分成两步走:Clark变换Park变换。前者把三相变两相静止,后者把两相静止变两相旋转。咱们一个一个来拆解。

4.1 为什么要做坐标变换?

先问个问题:三相电机里,A、B、C三相电流是耦合的。你调A相,B相和C相也跟着变。这就像三个人同时拉一根绳子,谁使劲了都影响别人。控制起来非常头疼。

但如果我们把这三个量投影到两个正交的轴上,情况就不同了。两个轴互相垂直,互不影响。这就是解耦。再进一步,让这两个轴跟着转子一起转,那电流就变成了直流。直流多好控啊,一个PI环就搞定了。

核心思想: 坐标变换的本质是线性变换,用矩阵乘法把一组变量映射到另一组变量。变换前后,系统的功率和磁动势保持不变。

4.2 Clark变换:三相静止 → 两相静止

Clark变换,也叫3s/2s变换。它的任务是把A、B、C三相坐标系下的量,映射到α-β两相静止坐标系。

我刚开始学的时候,总觉得这步有点抽象。后来在项目里调试电流环,发现Clark变换其实就是个投影。你想象一下,三相绕组在空间上相差120度,α轴和A轴重合,β轴超前α轴90度。那么A相电流在α轴上的投影就是它自己,在β轴上的投影是0。B相和C相呢?投影到α和β轴上就行了。

推导过程其实不复杂。我们假设变换前后磁动势相等,可以得到变换矩阵。这里直接给结论:

等幅值变换(最常用):

| iα |   | 1    -1/2    -1/2 | | iA |
|    | = |                     | |    |
| iβ |   | 0    √3/2   -√3/2 | | iB |
                                | iC |

注意,这里有个系数2/3。为什么?因为要保证变换前后电流幅值不变。我在项目中遇到过一个问题:用等功率变换算出来的电流幅值不对,查了半天才发现是系数搞混了。嗯,这里要注意:等幅值变换用2/3,等功率变换用√(2/3)。我个人习惯用等幅值,因为调试时看波形更直观。

我的经验: 实际代码里,Clark变换通常只算两相。因为三相电流之和为零(星形连接),所以iC = -iA - iB。这样能省一次乘法和一次加法。别小看这点优化,在中断里跑的时候,每少一条指令都是好的。

4.3 Park变换:两相静止 → 两相旋转

Park变换,也叫2s/2r变换。它把α-β静止坐标系下的量,映射到d-q旋转坐标系。d轴和转子磁极对齐,q轴超前d轴90度。

说白了,Park变换就是个旋转。你想想看,α-β坐标系是静止的,但转子在转。如果我们站在转子上看,电流就是静止的。这个旋转的角度θ,就是转子的电角度。

推导也很直接。假设α轴和d轴的夹角是θ,那么:

| id |   |  cosθ   sinθ | | iα |
|    | = |              | |    |
| iq |   | -sinθ   cosθ | | iβ |

反过来,逆Park变换(从d-q到α-β)就是:

| iα |   |  cosθ  -sinθ | | id |
|    | = |              | |    |
| iβ |   |  sinθ   cosθ | | iq |

这个θ怎么来的?从编码器或者霍尔传感器读到的。我建议你每次更新θ时,先做一下角度补偿。因为采样、计算都有延迟,角度会滞后。我曾经因为没做补偿,导致高速时电流环震荡,折腾了两天才找到原因。

避坑指南: Park变换里的θ是电角度,不是机械角度。对于一对极的电机,两者相等。但对于多对极电机,电角度 = 机械角度 × 极对数。我见过有人直接把机械角度扔进Park变换,结果电流波形完全不对。

4.4 仿真实现:从公式到代码

光讲理论不过瘾,咱们看看仿真里怎么实现。我用的是Simulink,但思路适用于任何平台。

Clark变换的Simulink实现:

function [i_alpha, i_beta] = clark_transform(i_a, i_b, i_c)
    % 等幅值Clark变换
    i_alpha = (2/3) * (i_a - 0.5*i_b - 0.5*i_c);
    i_beta  = (2/3) * (0*sqrt(3)/2*i_b - sqrt(3)/2*i_c);
    
    % 如果三相平衡,可以简化为:
    % i_alpha = i_a;
    % i_beta  = (1/sqrt(3)) * (i_a + 2*i_b);
end

Park变换的Simulink实现:

function [i_d, i_q] = park_transform(i_alpha, i_beta, theta)
    % Park变换
    i_d =  i_alpha * cos(theta) + i_beta * sin(theta);
    i_q = -i_alpha * sin(theta) + i_beta * cos(theta);
end

你看,代码就这么几行。但实际仿真时,我建议你加上饱和限幅抗积分饱和。因为仿真里一切完美,但实际硬件有电压电流限制。不加限幅,仿真跑得欢,一上硬件就炸。

4.5 知识体系总览

为了让你更直观地理解整个坐标变换的脉络,我画了一张图。这张图展示了从三相电流到d-q电流的完整流程,以及每一步的作用。

坐标变换知识体系 三相静止坐标系 A-B-C Clark变换 两相静止坐标系 α-β Park变换 两相旋转坐标系 d-q 关键说明: • 三相静止(A-B-C):物理绕组实际位置,相差120° • 两相静止(α-β):α轴与A轴重合,β轴超前90° • 两相旋转(d-q):d轴与转子磁极对齐,q轴超前90° • 变换核心:保持磁动势不变,实现交流量到直流量的转换 • 注意:θ是电角度 = 机械角度 × 极对数

4.6 仿真验证:看看波形对不对

理论讲完了,代码也写了,怎么验证对不对?我的做法是:给一组三相正弦电流,看看变换后的d-q电流是不是直流。

假设三相电流为:

iA = Im * sin(ωt)
iB = Im * sin(ωt - 120°)
iC = Im * sin(ωt + 120°)

经过Clark变换后,α-β电流应该是:

iα = Im * sin(ωt)
iβ = Im * cos(ωt)

再经过Park变换(θ = ωt),得到:

id = 0
iq = Im

你看,d轴电流为0,q轴电流等于幅值。这就是我们想要的结果。如果仿真出来id不为0,那就要检查角度θ是不是对的,或者变换矩阵有没有写错。

我的调试技巧: 在仿真里加一个Scope,同时显示三相电流、α-β电流和d-q电流。如果d-q电流是平滑的直线,说明变换正确。如果还有波动,大概率是角度同步出了问题。

4.7 总结

坐标变换是PMSM矢量控制的基石。Clark变换把三相变两相,Park变换把静止变旋转。两步合起来,就把交流量变成了直流量。你想想看,这就像把复杂的正弦波问题,简化成了直流控制问题。后面的电流环、速度环,都是在这个基础上搭建的。

我个人觉得,理解坐标变换的关键在于角度。角度对了,一切都对。角度错了,整个系统都是乱的。所以,每次调试前,先确认编码器的角度是不是正确的电角度。

好了,这一章就到这里。下一章我们聊聊电流环的设计,那才是真正考验功夫的地方。


专注资料整理