3、Clark变换与Park变换:三相静止坐标系到两相静止坐标系、两相静止坐标系到两相旋转坐标系
好,咱们进入矢量控制的核心环节了。
前面我们聊了电机数学模型,那都是在三相静止坐标系下看的。但实际控制中,你想想看,三相交流量是随时间变化的,PID控制器直接去追正弦波,那效果肯定不行。所以我们需要做坐标变换,把交流量变成直流量。这就是Clark变换和Park变换要干的事。
3.1 为什么非变不可?
说白了,三相电机里,电流、电压都是正弦波。你让控制器去跟踪一个正弦波,稳态误差永远存在。但如果我们换个角度看——站在转子上看,这些量其实都是恒定的直流。
我刚开始做电机控制时,就犯过这个错。直接拿三相电流做PI调节,结果震荡得一塌糊涂。后来师傅跟我说:「你得换个坐标系看问题。」嗯,从那以后,我再也没用过三相直接控制了。
核心思想:通过坐标变换,把时变的交流量转化为时不变的直流量,从而可以用经典的PI控制器实现无静差跟踪。
3.2 Clark变换:三相→两相静止
Clark变换,也叫3s/2s变换。就是把三相静止坐标系(A、B、C)下的量,投影到两相静止坐标系(α、β)上。
数学上很简单,就是矩阵乘法:
// Clark变换公式
[ iα ] [ 1 -1/2 -1/2 ] [ iA ]
[ ] = [ ] [ ]
[ iβ ] [ 0 √3/2 -√3/2 ] [ iB ]
[ iC ]
注意,这里用的是等幅值变换。还有一种等功率变换,系数会不同。我个人习惯用等幅值变换,因为调试时看波形更直观——α轴幅值和A相幅值一样大。
小技巧:实际代码中,三相电流满足 iA + iB + iC = 0,所以可以简化成两相采样。我一般只采两相电流,第三相用公式算出来。省一个ADC通道,还少一个采样误差源。
3.3 Park变换:两相静止→两相旋转
Clark变换完了,得到的是αβ坐标系下的正弦量。还是交流,不行。得再转一次,转到旋转坐标系(d、q)下。
Park变换,也叫2s/2r变换。需要用到转子位置角 θ:
// Park变换公式
[ id ] [ cosθ sinθ ] [ iα ]
[ ] = [ ] [ ]
[ iq ] [ -sinθ cosθ ] [ iβ ]
你看,经过这一步,id和iq就变成直流了。id是励磁分量,iq是转矩分量。这下PI控制器就能大显身手了。
我曾经在一个项目里,编码器安装有偏差,导致Park变换的角度θ不准。结果id和iq里一直有交流分量,电机嗡嗡响,电流还限幅。查了两天才发现是角度校准没做。嗯,这里要注意:角度精度直接决定变换质量。
3.4 逆变换:从旋转回到静止
控制器算完d、q轴的电压给定值,还得变回三相电压才能驱动逆变器。所以需要逆Park变换和逆Clark变换。
逆Park变换:
[ uα ] [ cosθ -sinθ ] [ ud ]
[ ] = [ ] [ ]
[ uβ ] [ sinθ cosθ ] [ uq ]
逆Clark变换:
[ uA ] [ 1 0 ] [ uα ]
[ ] [ ] [ ]
[ uB ] = [ -1/2 √3/2 ] [ uβ ]
[ ] [ ] [ ]
[ uC ] [ -1/2 -√3/2 ] [ uβ ]
避坑指南:我曾经在逆变换时,把正变换的矩阵直接拿来用了,结果电压波形完全反了。记住:正变换和逆变换的矩阵不是同一个,需要单独推导或查表确认。
3.5 代码实现要点
实际工程中,这些变换都是在一个PWM周期内完成的。我建议用定点数或浮点数,看你的MCU有没有FPU。没有FPU的话,用查表法算sin/cos,能省不少时间。
下面是一个简化的C代码片段:
// Clark变换
void clark_transform(float iA, float iB, float iC,
float *iAlpha, float *iBeta) {
*iAlpha = iA;
*iBeta = (iA + 2.0f * iB) / 1.7320508f; // 利用 iC = -iA - iB
}
// Park变换
void park_transform(float iAlpha, float iBeta, float theta,
float *id, float *iq) {
float sinVal = sinf(theta);
float cosVal = cosf(theta);
*id = iAlpha * cosVal + iBeta * sinVal;
*iq = -iAlpha * sinVal + iBeta * cosVal;
}
性能优化:如果MCU算力紧张,可以把sin/cos做成256点的查找表。角度用Q15格式,查表后线性插值。精度够用,速度飞快。
3.6 变换前后的物理意义
| 坐标系 | 物理量特点 | 控制难度 |
|---|---|---|
| 三相静止(ABC) | 正弦交流,幅值变化 | 高,需跟踪正弦波 |
| 两相静止(αβ) | 正交正弦交流 | 中,仍为交流 |
| 两相旋转(dq) | 直流,稳态恒定 | 低,PI轻松搞定 |
你看,经过两次变换,控制问题从「追正弦」变成了「稳直流」。这就是矢量控制的精髓所在。
我个人觉得,理解坐标变换的关键不在于背公式,而在于理解「观察者视角」的变化。你站在定子上看,电流是正弦;你站在转子上看,电流就是直流。就这么简单。
总结一下:Clark变换把三相变两相,Park变换把静止变旋转。两者结合,把交流控制问题转化为直流控制问题。这是矢量控制的基石,也是TCU软件里跑得最频繁的代码段之一。