4. 同步旋转坐标系下的DFIG模型:dq轴解耦模型

说实话,刚接触双馈风机那会儿,我最头疼的就是这个dq变换。三相交流量来回变,控制起来跟抓泥鳅似的。后来老工程师跟我说了一句话,我到现在还记得——「把交流变成直流,你就赢了」。

嗯,dq变换干的就是这个事。

4.1 为什么要搞同步旋转坐标系?

咱们先想想,三相静止坐标系下的DFIG模型长什么样?

  • 电压、电流、磁链都是时变的交流量
  • 电感矩阵里全是转子位置角θ的函数
  • 耦合严重,你动一个变量,其他跟着乱跳

说白了,就是没法直接设计控制器。你想想看,一个PI控制器面对50Hz的交流量,相位滞后、稳态误差全来了,根本玩不转。

我在项目里遇到过这种情况:现场调试时,用三相静止坐标系下的模型做电流环,调了三天三夜,电流波形还是歪的。后来换成dq坐标系,半天搞定。

核心思想: 通过坐标变换,把基波交流量变成直流量。直流量用PI控制,零稳态误差,完美。

4.2 坐标变换的数学基础

从三相静止abc坐标系到两相同步旋转dq坐标系,需要两步走:

  1. Clark变换:abc → αβ(两相静止坐标系)
  2. Park变换:αβ → dq(两相旋转坐标系)

我习惯把Clark变换叫做「降维打击」——把三个变量变成两个,但信息不丢。Park变换则是「跟着转」——让坐标系和转子磁场同步旋转。

变换矩阵长这样:

// Clark变换(等幅值变换)
[ f_α ]   [ 1    -1/2   -1/2 ] [ f_a ]
[ f_β ] = [ 0   √3/2  -√3/2 ] [ f_b ]
[ f_0 ]   [ 1/2   1/2    1/2 ] [ f_c ]

// Park变换
[ f_d ]   [ cosθ   sinθ ] [ f_α ]
[ f_q ] = [ -sinθ  cosθ ] [ f_β ]

我的小习惯: 实际编程时,我从来不用矩阵形式,太占内存。直接写标量运算,速度能快30%。后面代码示例里我会展示。

4.3 DFIG在dq坐标系下的数学模型

好,现在咱们把DFIG的电压方程、磁链方程统统搬到dq坐标系下。记住一个前提:dq坐标系以同步速ω₁旋转,d轴定向在定子磁链方向上

4.3.1 电压方程

绕组 d轴方程 q轴方程
定子 usd = Rsisd + dψsd/dt - ω₁ψsq usq = Rsisq + dψsq/dt + ω₁ψsd
转子 urd = Rrird + dψrd/dt - ωslipψrq urq = Rrirq + dψrq/dt + ωslipψrd

注意看,这里出现了ω₁和ωslip。ω₁是同步角速度,ωslip = ω₁ - ωr是转差角速度。这两个耦合项,就是后面解耦控制要处理的对象。

4.3.2 磁链方程

定子磁链:
ψsd = Ls·isd + Lm·ird
ψsq = Ls·isq + Lm·irq

转子磁链:
ψrd = Lr·ird + Lm·isd
ψrq = Lr·irq + Lm·isq

其中:
Ls = Lsσ + Lm  (定子自感)
Lr = Lrσ + Lm  (转子自感)
Lm = 3/2·Lms (互感)

这里有个关键点:互感Lm是原来的1.5倍。为什么?因为Clark变换时用了等幅值变换,把三相绕组的互感效应折算到两相了。我刚开始学的时候老忘这个系数,仿真结果对不上,查了三天才发现是这里的问题。

避坑指南: 我曾经在项目里直接用电机铭牌上的Lm值代入模型,结果转矩计算全错。记住,铭牌给的是三相静止坐标系下的值,进dq模型前要乘以1.5。除非你用等功率变换,那系数又不一样了。

4.4 dq轴解耦模型

现在咱们把电压方程和磁链方程联立,就能得到完整的dq解耦模型。我直接给最终形式:

定子电压(忽略定子磁链动态,即dψs/dt ≈ 0):
usd = Rs·isd - ω₁·(Ls·isq + Lm·irq)
usq = Rs·isq + ω₁·(Ls·isd + Lm·ird)

转子电压(保留动态):
urd = Rr·ird + (Lr·dird/dt) - ωslip·(Lr·irq + Lm·isq)
urq = Rr·irq + (Lr·dirq/dt) + ωslip·(Lr·ird + Lm·isd)

你仔细看,d轴和q轴之间是不是有交叉项?比如urd方程里出现了irq和isq,urq方程里出现了ird和isd。这就是耦合。

解耦的思路很简单:把交叉项当作前馈补偿掉

解耦后的控制方程:

// 以转子电流控制为例
urd_ref = (Rr·ird + Lr·dird/dt) - ωslip·(Lr·irq + Lm·isq)
urq_ref = (Rr·irq + Lr·dirq/dt) + ωslip·(Lr·ird + Lm·isd)

// 括号内是PI控制器的输出,括号外是前馈补偿项

4.5 知识体系结构图

下面这张图,是我做培训时必画的。它把整个dq解耦模型的脉络理清楚了:

DFIG dq轴解耦模型知识体系 三相静止abc坐标系 Clark变换 两相静止αβ坐标系 Park变换(θ=ω₁t) 同步旋转dq坐标系(d轴定向于定子磁链) 电压方程 u = Ri + dψ/dt + jωψ 含耦合项 jωψ 磁链方程 ψ = L·i Lm需×1.5(等幅值变换) dq轴解耦模型(前馈补偿交叉项)

4.6 实际应用中的注意事项

模型搭好了,但实际用起来还有几个坑。我一个个说:

  • 角度精度:Park变换需要的θ角,必须用锁相环(PLL)实时跟踪电网电压。角度差1度,控制精度就掉2%。我见过有人直接用编码器角度,结果并网时电流冲击巨大。
  • 滤波器延时:采样回来的电压电流信号,过ADC和滤波器会有延时。这个延时在高转速下会引入相位误差。我的做法是在软件里做相位补偿,具体补偿量根据转速查表。
  • 饱和处理:前馈补偿项算出来可能很大,超过变流器输出电压能力。一定要加限幅,不然PI积分器会饱和,动态响应变差。

调试小技巧: 刚开始调dq轴电流环时,先把前馈补偿项置零,只调PI参数。等电流能稳住跟踪了,再把前馈加上。这样出问题容易定位。我每次带新人都是这么教的。

4.7 代码实现片段

最后,给一段我实际项目里用的C代码。这是转子电流环的核心部分:

// 转子电流PI控制 + 前馈解耦
void rotor_current_control(float ird_ref, float irq_ref,
                           float ird, float irq,
                           float isd, float isq,
                           float wr, float *urd, float *urq)
{
    // PI参数(工程整定法)
    float Kp = 0.85;
    float Ki = 12.5;
    
    // 静态变量存储积分值
    static float integral_d = 0.0f;
    static float integral_q = 0.0f;
    
    // 误差计算
    float err_d = ird_ref - ird;
    float err_q = irq_ref - irq;
    
    // 积分限幅(防饱和)
    integral_d += Ki * err_d * Ts;
    integral_q += Ki * err_q * Ts;
    
    if(integral_d > 150.0f) integral_d = 150.0f;
    if(integral_d < -150.0f) integral_d = -150.0f;
    if(integral_q > 150.0f) integral_q = 150.0f;
    if(integral_q < -150.0f) integral_q = -150.0f;
    
    // PI输出
    float pi_d = Kp * err_d + integral_d;
    float pi_q = Kp * err_q + integral_q;
    
    // 前馈解耦项
    float w_slip = 2.0f * PI * 50.0f - wr;  // 同步速-转子速
    float feedforward_d = -w_slip * (Lr * irq + Lm * isq);
    float feedforward_q =  w_slip * (Lr * ird + Lm * isd);
    
    // 最终输出电压
    *urd = pi_d + feedforward_d;
    *urq = pi_q + feedforward_q;
    
    // 输出电压限幅
    float amp = sqrtf((*urd)*(*urd) + (*urq)*(*urq));
    if(amp > VDC_MAX) {
        *urd = *urd * VDC_MAX / amp;
        *urq = *urq * VDC_MAX / amp;
    }
}

这段代码我用了好几年,从2MW到5MW的机型都跑过。核心就两点:PI输出加前馈补偿,再加上积分和输出电压的双重限幅。做到这步,电流环基本就稳了。


好了,dq解耦模型就讲到这里。说白了,就是把三相交流量变成两个直流量,然后该用PI用PI,该前馈前馈。下一节咱们会基于这个模型,搭完整的矢量控制系统。到时候你会发现,前面这些数学推导,全都能变成一行行代码跑起来。