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电流的完整流程,以及每一步的作用。
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变换把静止变旋转。两步合起来,就把交流量变成了直流量。你想想看,这就像把复杂的正弦波问题,简化成了直流控制问题。后面的电流环、速度环,都是在这个基础上搭建的。
我个人觉得,理解坐标变换的关键在于角度。角度对了,一切都对。角度错了,整个系统都是乱的。所以,每次调试前,先确认编码器的角度是不是正确的电角度。
好了,这一章就到这里。下一章我们聊聊电流环的设计,那才是真正考验功夫的地方。