4. 坐标变换:Clark变换与Park变换的数学推导,以及数字实现中的归一化处理技巧

坐标变换,说白了就是换个角度看问题。

做电机控制这些年,我见过不少新手一上来就盯着三相电流的波形看,越看越迷糊。其实你换个坐标系,事情就简单多了。Clark变换和Park变换,就是帮我们把电机模型从「三相静止」搬到「两相旋转」的数学工具。

4.1 为什么需要坐标变换?

先问个问题:三相电机里,A、B、C三相电流是耦合的,你动一相,另外两相也跟着变。这就像三个人抬轿子,步调不一致就很难控制。

我们想要的是——像控制直流电机那样,一个量控制转矩,一个量控制磁通。坐标变换就是干这个的。

核心思想:把三相交流量,变成两相直流量。这样PID控制器就能直接上手了。

4.2 Clark变换:从三相到两相静止

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

数学上很简单,就是投影。假设三相电流为 iA、iB、iC,那么:

iα = iA
iβ = (iA + 2*iB) / √3

等等,这里有个坑。我刚开始做项目时,直接套用了这个公式,结果算出来的转矩总不对。后来才发现——等幅值变换等功率变换的系数不一样。

变换类型 α轴系数 β轴系数 适用场景
等幅值变换 1 1/√3 电流环控制(常用)
等功率变换 √(2/3) √(2/3) 功率计算

我的习惯:做电流环控制时,一律用等幅值变换。因为这样电流的幅值不变,调试起来直观。等功率变换留给功率计算用。

4.3 Park变换:从静止到旋转

Clark变换完了,我们得到了α-β坐标系下的正弦量。还是交流,不好控。

Park变换就是再转一下,把α-β坐标系旋转起来,变成d-q旋转坐标系。旋转速度跟电机转子同步,这样d、q轴上的量就变成直流了。

公式也不复杂:

id = iα * cos(θ) + iβ * sin(θ)
iq = -iα * sin(θ) + iβ * cos(θ)

这里的θ是转子位置角,一般用编码器或者观测器得到。

注意:θ的零点定义很关键。我见过有人把θ的零点搞反了,结果电机正转时q轴电流是负的,转矩方向全反了。建议统一用「A相轴线对齐转子d轴」作为零点。

4.4 数字实现中的归一化处理

好了,数学推导讲完了。但真正写代码时,你会发现一个问题——三角函数计算太慢了

在STM32或者DSP上,每次算sin、cos都要几十个时钟周期。如果电流环频率是10kHz,那CPU时间全花在坐标变换上了。

怎么办?归一化处理。

说白了,就是把角度θ映射到0~1或者0~N-1的整数范围,然后用查表法代替实时计算。

// 归一化角度:0~65535 对应 0~2π
#define ANGLE_MAX 65536

// 查表法计算sin
int16_t sin_table[ANGLE_MAX];
int16_t sin_lut(uint16_t theta) {
    return sin_table[theta];
}

// Park变换的归一化实现
void park_transform(int16_t i_alpha, int16_t i_beta, 
                    uint16_t theta, 
                    int16_t *i_d, int16_t *i_q) {
    int16_t sin_theta = sin_lut(theta);
    int16_t cos_theta = cos_lut(theta);
    
    *i_d = (i_alpha * cos_theta + i_beta * sin_theta) >> 15;
    *i_q = (-i_alpha * sin_theta + i_beta * cos_theta) >> 15;
}

归一化的好处:

  • 查表代替计算,速度快10倍以上
  • 定点运算,没有浮点误差
  • 角度用整数表示,方便累加和取模

我曾经在一个项目里,用浮点直接算Park变换,电流环频率只能跑到2kHz。改成归一化查表后,直接干到10kHz。嗯,差距就是这么大。

4.5 避坑指南

做归一化处理时,有几个坑我踩过,分享给你:

  • 表的大小:我建议用1024点或者4096点。太小了精度不够,太大了浪费内存。1024点对于大多数电机控制足够了。
  • 溢出处理:乘法结果可能超过16位,记得用32位中间变量。我刚开始用16位直接乘,结果溢出后波形全是毛刺。
  • 角度对齐:归一化后的角度0点,一定要跟Clark变换的α轴对齐。否则d、q轴会耦合,调参调到怀疑人生。

一个小技巧:如果你用STM32,它的硬件除法器很快。可以把归一化角度直接乘2π再除65536,用硬件除法算,精度比查表还高。不过查表法胜在稳定,没有抖动。

4.6 本章小结

坐标变换是电机控制的基石。Clark变换把三相变两相,Park变换把静止变旋转。数字实现时,归一化处理是提升性能的关键。

我个人建议:先理解数学原理,再动手写代码。不要一上来就抄库函数,否则出了问题你都不知道怎么排查。

下一章我们会讲SVPWM,到时候你会发现,坐标变换的精度直接影响SVPWM的输出质量。嗯,环环相扣。


公众号:蓝海资料掘金营,微信deep3321