双馈风力发电系统的Simulink仿真,是我这些年被问得最多的问题之一。很多人真正卡住的点,往往不是"Simulink怎么用",而是面对一整套dq坐标变换、转子侧和网侧两套变流器控制、几十个机组参数时,根本不知道从哪儿下手。我最早做这个课题的时候也一样——从网上下了一个别人分享的模型,模型能跑,但每隔几十毫秒就出一堆警告,波形也看不懂,更别提把风速从恒定风改成湍流风、再观察功率变化了。后来一步步把模型拆开重搭,才逐渐搞清楚每个模块背后到底在算什么。
这篇文章我会按照实际搭建和调试的思路来讲:先弄明白双馈机组(DFIG)的物理运行逻辑,再把Simulink里的风力机、发电机、变流器模型搭起来,接着实现转子侧和网侧的两套闭环控制,最后讲仿真参数配置和结果判读。整个过程会穿插参数选取和踩坑经验,适合刚接触风电仿真的电气专业学生、做并网研究的工程师,也包括想把控制策略跑起来验证的算法研究者。只要耐心跟着思路走一遍,你手上会有一套自己能改、能解释、能出结果的完整仿真平台,而不是一个黑箱模型。
1. 仿真的第一步:双馈机组这几个物理概念必须先落地
1.1 为什么是"变速恒频":双馈机组的运行逻辑
双馈感应发电机的"双馈"两个字,指的是定子绕组和转子绕组都接了电网。定子直接并网,转子则通过一个背靠背变流器接入电网。变流器的作用,简单说就是用一个可控的交流励磁源,去调节转子电流的频率和相位,进而控制电磁转矩和定子输出功率。
这样做的核心价值在于"变速恒频"。风力机在不同风速下有各自的最优转速,只有按最优转速运行,才能把风能利用系数C_p保持在最大值附近。但传统恒速恒频机组(比如普通异步发电机)转速被电网频率锁死,变不了速。双馈机组允许转子转速在一定范围内偏离同步转速,同时通过转子励磁补偿掉转差频率,让定子并网频率始终保持在50Hz。这就是它和直驱永磁机组的本质区别——直驱是"把变频器做满",双馈是"只处理转差功率,变流器容量小、成本低"。
具体看转差率s=(n_s-n)/n_s,其中n_s是同步转速,n是转子实际转速。当转速低于同步转速时,机组处于次同步状态,转子从电网吸收转差功率,变流器工作在整流状态;当转速高于同步转速时,机组处于超同步状态,转子把转差功率回馈给电网,变流器工作在逆变状态。变流器容量只需覆盖转差功率范围,工程上通常取额定功率的30%左右。这个特点决定了仿真里变流器参数的选取逻辑。
1.2 dq坐标变换:仿真里你只需要记住两个坐标系
双馈系统本质上是一个三相交流系统,直接在三相静止坐标系下建PI控制器很麻烦——交流量本身就是正弦波,误差也在周期性变化,PI很难做到无静差。所以业界普遍的做法是,把三相量投影到与某个空间矢量同步旋转的dq坐标系下。旋转坐标系下,稳态的三相正弦量变成了两个直流量,PI控制器这才有了用武之地。
仿真中你会遇到两套常用的定向方式。转子侧变流器用定子电压矢量定向,网侧变流器用电网电压矢量定向。之所以这么定向,是因为坐标系的d轴一旦被锚定在某个旋转矢量上,该方向的分量就可以直接对应有功物理量,q轴分量对应对无功物理量,控制目标从"管一个正弦波"变成"管两个直流量",解耦就清晰了。
对新手来说,最需要注意的不是坐标变换公式本身,而是角度。dq变换的旋转角度必须和定向矢量保持实时同步,否则d、q轴分量会互相耦合,控制环永远调不稳。在Simulink里,这个角度通常用PLL(锁相环)或是从电压测量信号里直接计算三角函数得到,我后面会在控制环搭建部分详细说。
1.3 从风机到电网的功率流:定子直连、转子变频的本质
把功率流理清楚,仿真控制参数的物理意义就不会搞混。风力机捕获的机械功率P_m = 0.5ρπR²v³C_p(λ,β),其中ρ是空气密度,R是叶轮半径,v是风速,C_p是风能利用系数,λ是叶尖速比,β是桨距角。这个公式在Simulink里要原封不动地用模块搭出来,因为它决定了整个系统的功率输入。
在稳态下,忽略损耗,电磁功率P_em = P_m,定子功率P_s = P_em/(1-s),转子功率P_r = s·P_em。注意定子功率和转子功率并不是简单的加减关系,具体取决于次同步还是超同步。次同步时P_r是负的(吸收功率,正的符号约定下),超同步时P_r是正的(回馈功率)。总并网功率P_g = P_s + P_r,在损耗忽略时等于P_m。
这些功率关系决定了控制器的参考值怎么给。比如你要发1MW有功,定子可能承担了1.2MW,转子回馈了0.2MW,如果直接拿并网有功去作为某个控制环的反馈,往往找不到明确对应的控制量。正确做法通常是控制定子有功,因为定子有功直接对应转子侧d轴电流的控制目标,而并网有功只是结果,不需要专门闭环。
2. Simulink模型搭建:从库选择到部件参数
2.1 用Simscape电气模块库还是自建dq封装
搭建DFIG仿真模型,你有两条技术路线可选。
第一条是用Simscape Electrical(旧称SimPowerSystems)里的元件级模型,包括三相变压器、IGBT桥、感应电机模型等,直接从专业库拖拽搭电路。好处是直观,部件物理意义上接近真实系统,能观察到开关纹波和谐波;坏处是模型规模大、仿真速度慢,控制环和主电路之间用电压电流测量模块连接,初看会比较绕。
第二条是自己用数学模块搭建dq坐标系下的等效模型。把发电机的五阶电磁方程、变流器的平均模型、控制器的传递函数全部用Simulink数学模块画出来。好处是结构清晰,每个模块对应一个方程,控制逻辑一目了然,跑起来快得多;坏处是看不到开关级波形,也做不到开关过程细节分析。
我的建议是,做控制策略研究、参数整定、故障穿越逻辑验证,优先走Simscape电气库路线;做纯算法验证、控制理论推导、联合仿真做快速原型,则可以用dq模型。但如果你想先彻底弄懂双馈机组的运行机制,我更推荐从Simscape电气库入手,因为它能让你看到真实的电压电流波形,建立感性认识之后再回头看dq方程,会顺利得多。
2.2 风力机、传动链与发电机模型的具体搭建
以Simscape电气库为例,整个主电路从左到右依次是:风速信号源 → 风力机模型 → 传动链 → DFIG电机 → 定子侧接线(并网路径)和转子侧接线(变流器路径)。
风力机模型在Simulink里有专门的"Wind Turbine"模块,也可以用数学模块手敲公式。如果用手敲,需要输入C_p曲线数据或者写一个C_p函数。常用的C_p近似公式是:
C_p(λ,β) = 0.5176(116/λ_i - 0.4β - 5)e^(-21/λ_i) + 0.0068λ
其中1/λ_i = 1/(λ+0.08β) - 0.035/(β³+1)。这个公式来自Heier的经典模型,工程仿真里很常见。你可以在MATLAB的Function模块里写这个公式,输入是λ和β,输出是C_p,再乘以0.5ρπR²v³得到机械功率。
传动链一般简化为单质量块模型,用运动方程J·dω/dt = T_m - T_e,其中J是等效转动惯量,T_m是风力机气动转矩,T_e是发电机的电磁转矩。在Simulink里可以用积分器+增益模块搭这个方程,也可以直接用电气库里的"Drive Train"模块。单质量块模型忽略扭转振荡,对于绝大多数控制层面的仿真已经足够;如果要做轴系扭振研究,再考虑两质量块模型。
DFIG本体直接用Simscape电气库里的"Asynchronous Machine"模块,参数设置为绕线转子(Wound Rotor),并把转子绕组引出线接出来。这个模块是标准五阶模型,内部默认完成了dq变换和状态方程求解,你不需要自己推微分方程。但必须填对参数,下一节给出一个典型2MW机组的参数表。
2.3 背靠背变流器与直流母线参数选择
背靠背变流器由转子侧变流器(RSC)、直流母线电容、网侧变流器(GSC)三部分组成。变流器选择三相两电平IGBT桥,在Simscape里用"Universal Bridge"模块搭配IGBT/Diode即可。你需要设置三个关键参数:开关频率、直流母线电压、直流电容。
开关频率通常取2-5kHz,这会影响PWM模块的三角载波频率,也会影响仿真步长。直流母线电压大约取电网线电压幅值的1.5-2倍。对于690V电网,典型直流母线电压取1050-1200V。直流电容决定直流母线电压的动态响应,用公式C = P_n/(2ω_e·ΔU·U_dc)估算,工程上取几千微法到几十毫法,2MW机组常用10-20mF。
变流器的输出侧还需要滤波电抗器(L),网侧变流器和电网之间一般串接一个进线电感,典型值取0.1-0.3pu。变压器则把690V升压到10kV或35kV并网,仿真里可以用Three-Phase Transformer模块。
我这里给出一组典型2MW DFIG参数,直接照着填基本能跑起来:
| 参数项 | 数值 | 说明 |
|---|---|---|
| 额定功率 | 2 MW | 定子输出功率基准 |
| 定子电压 | 690 V (线电压) | 直接并网电压 |
| 电网频率 | 50 Hz | |
| 极对数 | 2 | 同步转速1500 rpm |
| 定子电阻R_s | 0.0025 pu | 标幺值表示 |
| 定子漏感L_σs | 0.06 pu | |
| 转子电阻R_r' | 0.0027 pu | 折算到定子侧 |
| 转子漏感L_σr' | 0.06 pu | |
| 互感L_m | 3.0 pu | |
| 转动惯量J | 600 kg·m² | 包含风力机折算 |
| 直流母线电压 | 1100 V | |
| 直流电容 | 0.015 F | |
| 进线电抗 | 0.15 pu | GSC至电网 |
顺便提醒一句,在Simscape里设置标幺值参数时,模块经常要求输入实际值或标幺值,不同版本界面不一样。建议先在MATLAB命令窗口里写个初始化脚本,把上述参数定义为变量,再在模块参数对话框里引用变量名。这样改参数、做扫描分析都方便,不用每次打开模块去改数字。
3. 两套控制环的落地:转子侧MPPT与网侧直流稳压
3.1 转子侧变流器:功率外环与电流内环的因果逻辑
双馈系统的控制核心在两套变流器。转子侧变流器负责有功和无功的独立控制,网侧变流器负责维持直流母线电压稳定和网侧功率因数。
转子侧采用定子电压矢量定向的矢量控制。定向之后,定子有功功率P_s近似只和转子q轴电流i_rq相关,定子无功功率Q_s近似只和转子d轴电流i_rd相关。控制结构就变成了"功率外环+电流内环"的经典串级结构:外环PI根据P_s和Q_s的参考值给出i_rq^和i_rd^,内环PI再根据电流误差计算出转子电压参考值u_rq^和u_rd^。
值得注意的是,功率外环的参考值来源不同。有功功率的参考值不是直接给定的,而是由最大功率跟踪(MPPT)生成的转速/转矩参考来决定——这部分我下一节专门讲。无功功率的参考值则可以直接给定,并网要求通常设定在0(单位功率因数),也可以根据电网调度给一个无功支撑量。
3.2 最大功率跟踪的转速给定怎么算
MPPT的目标,是在额定风速以下让机组始终运行在最优叶尖速比λ_opt,从而保持C_p最大。最优转速公式为:
ω_ref = λ_opt · v / R
其中v是当前风速,R是叶轮半径,λ_opt通常取8左右。把这个转速参考值交给转速外环,与实测转速比较后,经过PI控制器得到电磁转矩参考T_e^*,再换算成转子q轴电流参考值。在Simulink里,MPPT可以直接用一组数学模块算出来:测量风速v,乘以λ_opt,除以叶轮半径R,得到转速参考值,再限幅在最小和最大转速之间。
在额定风速以上,机组进入变桨距控制阶段,靠增大桨距角β来限制捕获功率。仿真中可以通过一个简单的PI调节器,以"实际功率-额定功率"为误差,输出β的参考值,再限幅在0°到30°之间。这一步很多初学者漏掉,导致在高于额定风速的仿真工况下功率严重超发,结果跟实际机组行为对不上。
3.3 网侧变流器:直流母线电压稳定与功率因数
网侧变流器的控制采用电网电压矢量定向。它的主要任务是稳定直流母线电压。直流母线电压的波动反映了转子侧和网侧之间的功率不平衡,所以控制思路是:外环是直流电压PI调节器,误差给出网侧d轴电流参考i_gd^*,这个电流对应有功功率交换;内环是电流PI,控制网侧电流跟随给定;q轴电流参考则根据需要的无功功率给定,并网要求下一般设为0,实现单位功率因数。
这样一来,整套系统就形成了闭环逻辑:MPPT根据风速给出转速参考 → 电机转速环给出电磁转矩 → 转子侧电流环实现转矩和无功控制 → 功率不平衡反映在直流母线电压上 → 网侧变流器把多余或缺失的功率通过与电网的交换补回来。任何一个环节断掉,整体就无法稳定运行。
3.4 从理论到Simulink:控制环搭建的实操细节
控制环在Simulink里搭建时,我强烈建议把每个PI控制器的参数做成变量,写在初始化脚本里,然后用模块参数引用。这样以后调参只需要改脚本里的一行,不用每次打开模块对话框。
给出两组初调参数的方法。电流内环带宽通常取200-500 rad/s,PI参数可参照:K_p = α·L_s,K_i = α·R_s,其中α是期望的电流环带宽。转速/功率外环带宽取内环的1/5到1/10,即40-100 rad/s。这个初值不一定最优,但基本能保证系统稳定,之后再根据波形微调。
dq变换和反变换的Simulink实现,在Simscape电气库里可以用PLL模块直接输出角度,sin/cos模块用来把i_a、i_b、i_c变换成i_d、i_q。这里有一个容易踩的大坑:dq变换的符号约定和角度零点,必须和电机模块内部的约定一致。不同版本的DFIG模块和PLL模块,坐标变换定义可能有差异,导致你明明控制正确,波形却是反的或者振荡的。遇到这种情况,先用一个简单工况验证:给一个恒定有功参考,观察定子电流幅值是否与预期一致、直流母线电压是否稳定,而不是直接上复杂风电。
4. 仿真会遇到的坑:初始化、步长与结果判读
4.1 求解器配置:仿真步长与PWM载波的匹配
仿真跑不通,很多时候不是模型逻辑错了,而是求解器配置不合适。DFIG模型主电路里包含IGBT开关,开关频率如果是2kHz,那么载波周期就是0.5ms,仿真步长建议取载波周期的1/50到1/100,也就是1e-5到5e-6秒量级。步长太大,PWM脉冲沿会被严重量化,波形出现大量假谐波;步长太小,仿真速度难以接受,一年工作都耗在跑模型上。
刚性系统建议选变步长求解器,ode23t或ode15s都常用。变步长求解器会在开关动作点自动加密步长,平时用较大步长,只在关键瞬间细化,这样速度和精度都兼顾。另外,Simscape里双击"Powergui"模块,可以设置是否启用离散化仿真。如果要做固定步长的实时仿真或硬件在环,就选择离散模式,采样时间设为与PWM载波同步的数值,比如Ts=1e-5或2e-5。
4.2 启动过程震荡与初始条件处理
双馈系统直接在零状态启动,几乎必然出现一段剧烈的启动暂态。因为发电机初始转速为0,电场初始值为0,而给定转速参考可能一下子就到了1200rpm,控制器和主电路都不可能瞬时跟上。解决办法有两种。
一种是把PI控制器的初始积分值设置成接近稳态值的量,比如转子电流初始给定设为额定值附近的某个正数,这样控制环不会从零开始累积。另一种更省事的方案是把启动过程分为两段:先给恒定风速(比如8m/s),让转速开环(不给控制,直接把电机接成异步启动或者用外部驱动)稳定在接近最优转速,然后再切入闭环控制。很多商用模型示例就是这么做的,开头加一个"Start/Cut-in"逻辑。
我个人经验是,初调阶段最稳妥的做法是:先只搭发电机+转子侧控制,电网侧用理想三相电压源代替背靠背变流器,验证转子侧控制正确后,再加网侧变流器和直流电容。这种模块化调试思路能大幅降低排查成本。
4.3 结果怎么算对:功率、转速、转矩的波形对照
仿真结束后怎么判断模型对不对?我的习惯是同时看六条曲线:风速、转速、电磁转矩、定子有功功率、定子无功功率、直流母线电压。稳态下风速恒定,转速应该稳定在MPPT给定值附近,电磁转矩和定子有功功率应该在稳态值附近小幅波动,无功功率应该稳定在参考值附近,直流母线电压波动一般控制在±2%以内。
如果风速从8m/s阶跃到10m/s,你期望看到转速平滑上升、有功功率随之增加、直流母线电压在短暂波动后恢复1100V。如果转速上升过程中功率反而下降,多半是MPPT公式方向反了或者转速限幅设错;如果直流母线电压持续跌落,多半是网侧直流电压外环带宽太低,或者内环电流限幅没给够。
还有一个细节:看功率波形时,Simscape测量得到的瞬时功率往往带大量开关纹波,直接用很难观察趋势。建议加一组Moving Average模块或者用离散滤波器,把纹波滤掉再看曲线,否则容易误判系统不稳定。
4.4 常见发散原因排查清单
遇到波形发散,不要盲目调PI参数,先按顺序排查:
- 检查所有单位制和标幺值是否统一。电气库模块有些用V、A、W实际单位,有些用标幺值,混用时容易差几个数量级。
- 检查PLL是否锁定成功。PLL输出的角度如果一直波动,dq变换就乱了,控制环必然失效。用Scope观察PLL输出的频率误差是否收敛到0。
- 检查dq变换的d轴方向。方向反了会导致有功和无功通道互换,现象是给有功参考后无功跟着变。
- 检查电流内环限幅。转子侧电流限幅一般取1.1-1.2pu,网侧电流限幅取0.3pu(因为变流器容量只有30%)。限幅不足,内环一旦饱和,外环积分就会持续累积,系统振荡发散。
- 检查PI正负号。符号反了,反馈变成了正反馈,波形直接飞出天界,这一条几乎所有人初学都遇到过。
5. 把仿真做深一点:风速变化、电网故障与LVRT
5.1 风速场景建模:阶跃、湍流与组合风
基础仿真里风速通常是恒定值,但实际风电仿真离不开风速的动态变化。最简单的可以用阶跃信号模拟阵风;更贴近实际的做法是组合风速模型——用常风分量加阵风分量加渐变风分量加随机湍流分量。在Simulink里,随机湍流部分可以用带限白噪声模块或Kaimal谱滤波器生成。风速模型的值直接作为风力机模块的输入风速。
做风速阶跃仿真时,建议阶跃幅度控制在2-3m/s,太大容易让转速限幅触发,控制环进入饱和,反而不容易看出控制规律。做湍流风速仿真时,平均风速和湍流强度要匹配,IEC标准里典型湍流强度在中风速区约0.14-0.16,可以直接用这个范围作为仿真参数。
5.2 电压跌落模拟与转子过流观察
低电压穿越(LVRT)是双馈机组研究中最常见的故障仿真场景。在电网侧变压器与无穷大电源之间加入三相对地短路故障模块(Three-Phase Fault),设置故障时刻和持续时间,比如0.2s时发生三相对称电压跌落至20%额定电压,持续0.5s后切除,就能模拟一次典型的电网故障。
电压跌落瞬间,定子电压骤降,磁链不能突变,会产生直流分量和负序分量,导致转子绕组中出现暂态过流,峰值可能达到额定值的好几倍。此时如果不加保护,转子侧变流器很容易烧毁。仿真中打开转子电流测量,你就能直观看到这个过流峰值的大小和衰减时间。
5.3 加入Crowbar保护后的动态行为
针对转子过流问题,工程上最常见的手段是Crowbar保护——故障期间把转子绕组通过一组晶闸管或电阻短接,让过流从转子回路泄放,同时闭锁转子侧变流器。仿真中你可以用理想开关+电阻模拟Crowbar,检测到转子电流超过阈值(比如1.5pu)时闭合开关,过流衰减后再断开。
加入Crowbar后要重点观察两个现象:一是故障期间机组从变速恒频状态变成接近普通异步机状态,转子短路,会从电网吸收大量无功,导致定子电压进一步下降;二是故障切除后转子侧变流器重新投入,如果重投时机不对,相当于一次新的启动暂态,转子电流可能再次冲击。所以Crowbar的投切策略本身就是一个很有研究价值的仿真实验点。
5.4 从仿真到工程:谐波与电能质量观察
如果用了元件级IGBT模型,在稳态运行下可以用FFT工具分析定子电流的谐波含量。双馈机组并网电流的谐波主要来自PWM开关频率及其边带谐波,进线电抗和变压器的漏感能滤除一部分。仿真里调整进线电感值和开关频率,观察同一测点的谐波畸变率(THD),你能直接感受到滤波器参数对电能质量的影响。
再做远一步,你可以把Simulink里的被控对象模型导出为C代码,接入半实物实时仿真平台做硬件在环测试;或者把控制算法移植到DSP代码里,完成从仿真到样机的闭环。这一步不是所有初学者都需要做,但知道仿真模型最终能走到哪里,对你决定模型的细节保真度很有帮助。
6. 我做了几十次仿真后的几条实在建议
第一,不要一开始就追求"完全逼真"的模型。我先用平均模型跑通控制逻辑,再逐步换回开关模型观察谐波。平均模型里变流器用受控电压源代替,没有PWM纹波,仿真速度极快,控制环调试效率高得多。把控制逻辑调稳之后再换回IGBT模型,你会发现二者在控制层面结论一致,但后者的仿真耗时可能是前者的几十倍。
第二,参数初始化脚本一定要做成了模块。每次仿真前先跑初始化脚本,把风机参数、变流器参数、PI初值、限幅值全部定义好,模型里所有模块对话框引用这些变量。这样你改一个转速限幅,不用打开七八个模块对话框,也不容易遗漏。更重要的是,配合MATLAB的script做参数扫描(比如扫不同风速下的最大功率点),能大幅缩短调参时间。
第三,看波形要有耐心,更要有方法。我习惯先用几个固定工况把稳态跑通,再叠加扰动。先确认稳态正确,再观察动态,否则你会把稳态误差当成暂态过程去调参数,越调越乱。
第四,学会看Simulink的诊断信息。警告不等于错误,但大量警告背后往往隐藏着数值刚性问题、代数环问题或者参数越界。我的习惯是每跑完一次仿真,先滚动一遍诊断窗口,把所有警告都点开看一遍,养成这个习惯之后,很多看似诡异的问题都能在正式分析之前被发现。
做双馈风机仿真,本质上就是在跟一套多时间尺度、强非线性、机电网耦合的系统打交道。把前面的路一步步走稳了,你手上这套模型能支撑的研究方向非常多:从基础的MPPT改进,到电网故障下的暂态分析,再到储能配合、风电场场站级控制。仿真平台搭好之后,真正出成果的效率会高出一个量级。