直驱永磁风电机组这几年在风电行业里的占比越来越高,很多做并网控制、变流器研发的工程师和研究生,都会在 Matlab/Simulink 里搭一套仿真模型来验证控制策略。我见过不少人拿到模型后第一件事就是跑波形,结果要么发散、要么电流畸变严重,最后卡在参数整定上。这篇文章我就围绕“背靠背双PWM变流器”这个核心,把直驱永磁风电机组并网模型的整体思路、控制策略选型和 Simulink 建模的关键细节完整梳理一遍,把我自己踩过的坑和调参经验一并写出来,希望能帮你少走弯路。
这套模型能做什么?简单说,就是模拟风轮机捕获风能、永磁同步发电机发电、机侧变流器整流、直流母线稳压、网侧变流器逆变并网的完整能量传输链条。它适合三类人看:一是刚接触风电并网仿真的学生,需要一套能跑通、能改参数的模型打底;二是做变流器控制的工程师,想快速验证机侧或网侧的控制算法;三是做系统级并网分析的研究人员,需要把风电机组作为一个可控电源接入电网,观察它对电网电压、频率的影响。
先说清楚一个核心判断:直驱永磁机组选用背靠背全功率变流器,不是偶然,而是由发电机特性决定的。永磁同步电机的转子是永磁体,励磁不可调,转速范围宽,输出电能频率随风速大幅变化,无法直接并网,必须经过全功率变流器把变频电能变成工频电能,再接入电网。这一篇文章我就按照“整体架构 → 机侧控制 → 网侧控制 → Simulink 建模实操 → 问题排查”这条线来讲,内容更偏向工程实现,不堆公式,但必要的控制逻辑和参数计算会讲透。
1. 整体设计思路:为什么直驱机组一定要用背靠背双PWM变流器
1.1 从结构看直驱机组的能量传递逻辑
直驱永磁风电机组和传统双馈机组最大的区别,在于发电机是否经过齿轮箱。双馈机组用齿轮箱把风轮的低转速升到发电机需要的高转速,定子直接并网、转子通过变流器接入;直驱机组去掉了齿轮箱,风轮直接带动发电机转子旋转,发电机转速很低,通常每分钟十几转到二十几转,因此电机极数多、体积大,但机械损失小、可靠性高。
转速低带来的直接问题就是发电机输出的电能频率低,比如一个 48 极的永磁发电机在 15 r/min 下运行时,电气频率只有 6 Hz 左右。这种低频电能不可能直接并网,必须经过变流器进行频率变换。背靠背双PWM变流器的作用就在于此:机侧变流器先把发电机输出的变频交流整流成直流,网侧变流器再把直流逆变成与电网同步的工频交流。直流母线相当于一个能量缓冲池,把机侧和网侧解耦,两侧互不影响,这正是全功率变流器的核心优势——电网故障时,只要直流母线电压稳得住,功率就能通过变流器正常传递。
1.2 双PWM方案与不可控整流的根本差异
很多人问为什么不直接用二极管不可控整流加逆变器,结构还更简单、成本更低。答案是控制性能差太多。二极管整流只能把交流变成直流,发电机的输出功率不可控,且电流谐波大,发电机铜损和铁损都偏高;更关键的是,不可控整流无法实现最大功率追踪,风大时转速上去了但电流波形严重畸变,发电效率上不去,变流器损耗也高。
背靠背双 PWM 方案里,机侧是可控整流器,用 IGBT 替代二极管,通过调节 IGBT 的开关时刻,达到两个目的:一是控制发电机的电磁转矩,从而控制转速,实现最大功率追踪;二是让发电机定子电流保持正弦,谐波小、损耗低。网侧又是一套独立的 PWM 逆变器,负责维持直流母线电压恒定、控制并网电流的功率因数为 1。两套变流器靠直流母线电压这个物理量完成功率平衡的隐式耦合,机侧多发的功率让母线电压上升,网侧检测到电压上升就多往电网送电,一升一降之间完成能量传递,这就是“背靠背”三个字的工程含义。
1.3 建模时如何划分控制层级
在 Simulink 里搭这套系统,我的习惯是严格按物理结构和控制功能划分子系统。物理侧分为风速输入模块、风轮机模型、永磁同步发电机模型、机侧变流器、直流母线电容、网侧变流器、滤波电感和电网;控制侧分为机侧控制器、网侧控制器、SVPWM 调制器、锁相环、MPPT 模块、保护和限幅模块。
这样划分的好处很明显:每一层都可以独立调试。先把电机开环跑起来看反电动势波形,再闭环调电流环,最后才接上电网侧调功率,一步步来,出问题时定位非常快。我见过很多人图省事,把控制逻辑全堆在一个仿真文件里,几百个模块连成蜘蛛网,出问题根本没法查,这是建模的大忌。
2. 核心控制策略拆解:机侧怎么控、网侧怎么控
2.1 机侧变流器:最大功率追踪与零d轴电流控制
机侧控制的核心目标有两个:一是根据当前风速实时调节发电机转速,让风轮运行在最佳叶尖速比,实现最大风能捕获;二是保持发电机定子电流正弦,让铜耗和铁耗降到最低。这两件事在矢量控制框架下可以统一完成。
先说 MPPT。风轮的输出功率和风速的三次方成正比,但实际捕获的功率还取决于叶尖速比 λ 和桨距角 β。在额定风速以下,桨距角维持 0°,风能利用系数 Cp 只和叶尖速比有关,存在一个最佳叶尖速比 λ_opt 使 Cp 达到最大值。根据 λ = ωR/v,风速已知时,只要把风轮转速控制在 ω = λ_opt·v/R,就能始终保持最大功率捕获。因此在风速低于额定值之前,可以直接按功率-转速关系曲线给定功率参考值:P_ref = k·ω³,其中 k 和空气密度、风轮半径、最大风能利用系数有关。
再说电流控制。永磁同步电机在旋转坐标系下的数学模型,d 轴和 q 轴之间是耦合的,需要通过前馈解耦才能实现独立控制。对于表贴式永磁同步电机,d 轴电感等于 q 轴电感,采用零 d 轴电流控制(id=0)就能在最小电流下输出给定转矩,这是最常用的策略。调节过程是:MPPT 输出功率参考值 P_ref,除以电磁转速得到转矩参考值 Te_ref,转矩参考值再换算成 q 轴电流参考值 iq_ref。电流内环是两个独立的 PI 调节器,分别控制 id 和 iq 跟随参考值,输出经过坐标反变换和 SVPWM 调制,生成 IGBT 开关信号。
这里有个工程细节特别值得注意:机侧电流环的带宽一定要高于 MPPT 外环。MPPT 外环本质上是功率环,时间常数大、响应慢,如果两个环路的带宽拉不开差距,功率波动会直接串进电流内环,导致转速振荡、电流畸变。我一般把电流环带宽设计在 500 Hz 左右,MPPT 外环带宽压在 10 Hz 以下,相差两个数量级,运行起来非常稳定。
2.2 网侧变流器:电压外环与电流内环的双闭环控制
网侧变流器的任务是维持直流母线电压恒定,同时控制输入电网的电流为单位功率因数正弦波。这两个任务在双闭环结构里分开完成:外环是直流电压环,内环是并网电流环。
电压外环的基本逻辑是:直流母线电压的期望值 Udc_ref 和实际值作差,经过 PI 调节器,输出有功电流参考值 id_ref。当机侧送入的功率增大时,母线电容上的能量积累,电压上升,电压外环检测到偏差后提高 id_ref,网侧变流器向电网输送更多有功功率,母线电压回落,最终稳定在参考值附近。无功电流参考值 iq_ref 单独给定,通常设为 0,这样就能保证单位功率因数运行。
并网电流环是在电网电压定向的同步旋转坐标系下进行的,d 轴和电网电压矢量同方向。电流环结构和机侧类似,同样需要前馈解耦,不过解耦项里多了一个电网电压前馈。这个前馈很重要,直接关系到动态响应速度。如果不加电网电压前馈,电网电压波动会作为扰动进入电流环,需要电流环自己克服,带宽再高也有限;加了前馈后,电网电压的影响被直接补偿掉,电流环只需要处理自身的指令跟踪问题。
直流母线电压的选取有讲究,不是随便定的。对于 690 V 的并网系统,相电压峰值是 563 V,SVPWM 调制下逆变器输出的最大相电压基波幅值是 Udc/√3,因此理论最低直流母线电压是 976 V。考虑电网电压波动、开关管压降和一定的控制裕量,工程上一般取 1050~1100 V。Simulink 仿真里多取 1100 V,留足裕量防止调制深度过限导致电流波形畸变。
2.3 SVPWM 与 SPWM 的差异化选择
网侧和机侧变流器都用 SVPWM 调制,这里要说明为什么弃用更直观的 SPWM。SPWM 是正弦波和三角波比较产生开关信号,实现简单,但直流电压利用率低,最大相电压基波幅值只有 Udc/2,也就是直流电压利用率是 0.5。SVPWM 从电机控制里的磁链圆概念演化而来,通过八个基本电压矢量合成任意方向和大小的电压矢量,最大相电压基波幅值达到 Udc/√3,直流电压利用率比 SPWM 高了 15.5%。
不要小看这 15.5%。同样的直流母线电压下,SVPWM 能输出更高的交流电压,这意味着在并网点电压偏高时也能保证调制深度不出界;反过来,同样的交流电压需求下,SVPWM 允许把直流母线电压设得更低,降低 IGBT 的耐压要求,直接省成本。所以在背靠背变流器仿真里,SVPWM 是默认选择。
SVPWM 在 Simulink 里的实现方式,我推荐直接用函数模块写七段式算法,不要用库里的 SVPWM 封装块,因为版本兼容性差、内部逻辑不透明,出了问题不好调试。七段式算法本质就是在每个开关周期内,把零矢量均匀分布在有效矢量前后,让每个桥臂在一个周期内只开关一次,降低开关损耗和谐波含量。代码写起来不复杂,60 行以内能搞定,后续要加死区、加扇区判断逻辑也更方便。
3. Simulink 建模实操:从拓扑搭建到参数配置
3.1 模型整体架构与模块选型
打开 Matlab/Simulink 后,我建议按“主电路 + 控制器 + 测量显示”三大块来搭建。主电路用 Simscape Electrical 库里的元件,控制器用数学运算模块手写,测量显示用 Scope 和 Powergui 配合。
具体到模块选型,主电路里最关键的几个元件是:永磁同步电机用 Simscape Electrical 里的 Permanent Magnet Synchronous Machine 模块,风轮机不直接用库里的 Wind Turbine 模块,而是自己搭一个函数模块,输入风速和转速,输出转矩,这样能更清楚地看到气动模型的每个参数;背靠背变流器的两个桥臂分别用 Universal Bridge 模块,机侧选整流模式、网侧选逆变模式,IGBT 的导通压降和关断时间按实际器件数据填;直流母线用一个纯电容模块,容量按功率等级估算;网侧滤波电感用三相 Series RLC Branch,电网用 Three-Phase Source 加内阻抗。
控制器部分不建议直接套 Simulink 里现成的 PI 控制器封装,因为看不到内部结构,改限幅和对积分限幅都要绕。自己用 Gain 模块、Integrator 模块和 Saturation 模块搭一个带抗饱和功能的 PI 控制器,也就七八个模块,却能让后续调参和问题排查的效率高不少。控制器输出的调制波连接到 SVPWM 函数模块,最终生成 PWM 脉冲送入 Universal Bridge 的门极输入端。
3.2 关键参数的估算过程
参数是仿真模型能不能跑稳的关键,这里我把几个重要参数的估算过程展开说清楚。
第一个是直流母线电容。电容的作用是吸收机侧和网侧瞬时功率的不平衡,维持电压稳定。理论上电容越大,电压波动越小,但太大响应变慢,成本和体积也上去。工程经验公式是 C ≥ P/(2ω·Udc·ΔUdc_max),其中 P 是额定功率,ω 是电网角频率,ΔUdc_max 是允许的最大电压波动。以 1.5 MW 机组、1100 V 母线、允许 5% 电压波动为例计算,C ≥ 1.5e6/(2×314×1100×55) ≈ 39.5 mF。Simulink 仿真里可以适当取大一点,比如 50 mF,电压波动更小,启动过程更平滑。
第二个是网侧滤波电感。电感的作用是滤除 PWM 产生的高次谐波,电感越大谐波抑制效果越好,但过大会限制电流变化的动态响应,并且电感上压降大,逆变器需要更高的直流母线电压才能把电流送进电网。估算时按允许的电流纹波 10%~20% 来计算:L ≥ Udc/(2√3·f_sw·ΔI_max)。以 1100 V 母线、2 kHz 开关频率、额定电流 1300 A、允许 15% 纹波为例,L ≥ 1100/(2×1.732×2000×195) ≈ 0.82 mH,取 1 mH 左右比较合适。
第三个是 SVPWM 的开关频率。开关频率越高,谐波越小,但开关损耗成正比上升。风电机组这种大功率应用场景,开关频率一般取 2 kHz 到 4 kHz,太高的话 IGBT 的结温会过高,散热设计成本急剧上升。Simulink 仿真里开关频率直接设定为离散 PWM 发生器的载波频率,和实际系统一致即可。
3.3 仿真步长的选择与求解器配置
很多人忽略求解器的选择,直接用默认设置,结果要么仿真极慢,要么波形出现莫名其妙的振荡。这里我先给结论:使用 Simscape Electrical 的模型,必须用离散求解器,步长设为 1e-5 到 1e-6 秒。原因很简单,PWM 开关信号是离散跳变的,连续求解器在开关时刻需要极小的步长来捕捉跳变,仿真速度难以接受,而且开关瞬间的数值振荡会被错误地放大。
Powergui 模块的仿真类型要设置为 Discrete,采样时间设为和步长一致,比如 1e-5 秒。SVPWM 函数模块的采样时间也要同步,否则会出现信号不同步的奇怪问题。整个模型的文件名尽量不要带中文,路径也要全英文,否则部分版本的 Matlab 在编译 Simscape 模型时会报错。
关于仿真时长,我建议先用 0.5 秒验证模型能否跑顺,再逐步拉长到 5 秒以上看稳态效果。风速突变模块可以在 1 秒时切入阶跃,观察功率和转速的跟踪过程。这种分段验证的逻辑能大幅缩短排错时间,不要一上来就跑 10 秒,波形乱成一团很难定位问题。
4. 核心控制逻辑的代码实现与关键函数
4.1 风轮机气动模型的函数实现
前面说了风轮机不用库里的封装模块,这里给出我自己实现的函数逻辑。输入是风速 v、风轮转速 ω 和风轮参数,输出是气动转矩 T。核心公式是 T = 0.5·ρ·π·R²·Cp(λ,β)·v³/ω,其中关键在 Cp 函数。Cp 是叶尖速比 λ 和桨距角 β 的函数,工程上常用一个近似表达式拟合,包含指数项和三角函数项。在 Simulink 里用 Interpreted MATLAB Function 模块调用这个函数,注意输入变量要按顺序排好。
在实际仿真中,我遇到过 Cp 函数写错导致 MP PT 失效的情况——转速给定始终不对,发电机输出功率随风速变化完全不跟理论曲线。排查后发现问题出在 λ 计算时忘记乘 2π/60 的单位换算,风速单位是 m/s,转速单位是 rad/s 就不用换,但如果是 r/min 就必须先换算。这种单位混乱问题在仿真里经常出现,建议在做任何计算前先把单位统一。
4.2 SVPWM 七段式算法的代码思路
SVPWM 算法我的实现方式是把扇区判断、作用时间计算和开关切换顺序三个步骤写在一个 Matlab Function 模块里。第一步判断参考电压矢量所在扇区,方法很多,最常见的是根据 Uα 和 Uβ 的符号和大小关系判断;第二步计算两个有效矢量和零矢量的作用时间,通过 Clarke 变换后的分量计算;第三步按照七段式顺序分配开关状态,原点对称排列。
写代码时要注意一个问题:当前扇区内的作用时间必须做饱和限幅,当参考电压矢量幅值过大时,两个有效矢量的作用时间之和会超过开关周期,此时要按比例缩小两个有效矢量的时间,保证总时间等于开关周期。如果不加这个限幅,调制深度过限时电流波形会出现严重的底部削平现象,波形像被截了头,输入电网的电流谐波剧增。
4.3 坐标变换与 PI 控制器的实现逻辑
整个控制系统里,坐标变换是连接三相静止坐标系和两相旋转坐标系的桥梁。机侧需要转子位置角做 Park 变换,所以永磁同步电机模块必须输出机械角度,乘以极对数得到电气角度,再经过微分得到电气转速。网侧不需要转子位置,但需要锁相环提供电网电压矢量的实时角度。
锁相环在 Simulink 里我用的是一种基于同步旋转坐标系的方法:把三相电网电压做 Clarke 变换得到 αβ 分量,再以锁相环输出的角度做 Park 变换得到 dq 分量。当 q 轴分量为零时,锁相环输出的角度就等于电网电压矢量角度。用 PI 调节器控制 q 轴分量为零,输出是角频率修正量,积分后得到角度。这种方法是工程上最通用的锁相方案,动态响应快,电网畸变时也具备不错的鲁棒性。
PI 控制器的实现加了一个抗饱和处理。积分器输出并联一个限幅,当输出达到限幅值时停止积分,这就是常说的 conditional integration 抗饱和。我在实际调参中发现,如果不加这个抗饱和,启动瞬间电流参考值会很大,积分器迅速饱和,之后反向调节需要很长时间退出饱和,造成电流超调严重,甚至触发保护。加了抗饱和之后,同样的参数下启动电流平滑很多,动态过程至少快了一倍。
5. 仿真常见问题与调试经验
5.1 直流母线电压启动瞬间飙升
这是几乎每个人都会遇到的问题。模型开始运行时,网侧逆变器尚未工作,机侧整流器已经把发电机发出的能量灌入直流母线,电容电压瞬间冲高,可能超过 1500 V,把母线电容和 IGBT 都击穿。
解决办法是给网侧变流器加预充电逻辑,或者调整启动顺序。工程上常见的做法是:0 到 0.2 秒之间机侧不使能,只有网侧先工作,从电网通过反并联二极管整流给母线电容充电到电网峰值电压;0.2 秒后机侧才使能,此时 MPPT 功率参考值从一个很小的初始值线性爬升到正常值。这样母线电压不会出现失控跳变。仿真里实现这个逻辑很简单,用一个仿真时间判断模块给机侧电流环的使能信号和 MPPT 输出加一个斜坡上升即可。
5.2 电流波形畸变或振荡
电流波形畸变通常分两种:一种是周期性的毛刺频谱,一种是持续的低频振荡。如果是周期性毛刺,大概率是 PWM 频率和采样频率设置不匹配,导致调制信号在部分开关周期内未被正确更新。仿真里把控制器的采样时间配置成开关频率的整数倍关系即可解决。如果是低频振荡,多半是电流环 PI 参数太激进或者解耦项没加对。先降低 Kp,再适当减小 Ki,以振荡消失为准,然后在保证稳定性的前提下逐步提高增益。
我调电流环时有一个笨但是有效的办法:先把积分项去掉,只留比例项,从很小的 Kp 开始往上加,直到电流波形刚好出现少量振荡,Kp 回退到三分之一位置作为基准值;然后加积分,Ki 先从基准 Kp 的十分之一开始,边看波形边慢慢往上调整。这个流程虽然耗时,但能保证参数不会偏离稳定区域太远。
5.3 并网电流功率因数不为 1
仿真跑稳之后,很多人会发现并网电流和电网电压之间有功功率正常,但无功功率不为零,功率因数只有 0.9 左右。排查思路是:先看锁相环输出角度是否正确。如果锁相环锁定在错误的相位,dq 轴解耦会出错,无功电流和实际值对不上。再看 id_ref 和 iq_ref 是否按预期给定,iq_ref 是否确实为 0。最后确认真无功测量模块的测量位置是否正确,有些场景里电流互感器测的是逆变器出口电流,和并网点的电流相位不同,两者之间隔着滤波电感的压降。
5.4 仿真速度极慢
Simscape Electrical 的仿真速度问题很常见。一个原因是步长太小,如果步长从 1e-5 缩小到 1e-6,仿真时间会增长 10 倍,而精度的提升很多时候肉眼根本看不出来。另一个原因是模型中存在过大的电感或电容,导致系统固有频率过低,求解器被迫缩小步长来保证稳定性。此时可以用 Raptor 求解器替代默认的局部求解器,Raptor 对开关电路的仿真效率提升明显,我实测在同样参数下仿真速度能快 3 到 5 倍。
如果模型里用了三个以上的 Universal Bridge,强烈建议把 Powergui 的 Simulation type 改成 Discrete 后,再打开 Advanced 选项里的 “Enable Phasor Simulation” 做快速预览,虽然会损失一些波形细节,但能快速验证控制逻辑的正确性。
5.5 电机参数单位与初始条件问题
永磁同步电机模块里,永磁体磁链的单位是 V·s,转动惯量单位是 kg·m²,如果从数据手册抄参数时只改数值不换单位,仿真结果会差得离谱。我见过有人把转动惯量填错了三个数量级,结果转速波动周期和实际完全对不上。另一个容易踩坑的地方是初始条件。电机模块的初始机械角度、初始转速如果设得和风速条件不匹配,仿真开始阶段会出现剧烈的暂态冲击,看起来像系统失控,实际上只是初始值设置不合理。
如果初始条件不好估计,可以先让风速为 0,让系统从零状态启动,仿真 1 秒后再把风速阶跃到额定值,观察动态响应。这种方法虽然多花一点仿真时间,但能把启动冲击和真正的控制问题区分开。
6. 实操心得:这套模型还能怎么扩展
模型跑通之后,不要急着删文件,我强烈建议在这个底子上继续做三个方向的扩展,对后续研究和工作都很有帮助。
第一个方向是电网故障穿越。在三相电网电压对称跌落时,网侧变流器输出功率受限,直流母线电压会因为能量积累而骤升。这时可以在机侧加一个功率限制或者卸荷电路控制逻辑,模拟低电压穿越过程。Simulink 里用 Three-Phase Fault 模块就能做电压跌落,控制逻辑和参数已经在基线上验证过,扩展起来非常快。
第二个方向是弱电网适应性。把理想电压源替换成带短路比 SCR 的弱电网模型,加入锁相环带宽对弱电网适应性的分析。这个方向目前研究热度很高,文章里可以写的点很多,比如锁相环带宽在弱电网下的稳定性边界、电流环和锁相环的交互影响等。
第三个方向是硬件在环测试的前期验证。模型里的控制器可以接口化设计,把 PI 参数和开关频率作为参数变量,方便后续直接对接 TI C2000 或 dSPACE 平台做快速控制原型验证。我当年做这个移植时,最大的体会是控制逻辑和主电路完全解耦的模型架构能省掉大量改写工作量,这就是我在第一节强调子系统划分的重要原因。
仿真模型的最终价值从来不是跑出一张好看的波形图,而是通过调整参数理解系统各个变量之间的耦合关系,建立起对实际变流器控制的直觉。你把 MPPT 外环带宽调低一点看转速怎么变,把电压外环 Kp 调高看直流母线怎么振,这些从仿真里获得的经验,在做真机调试时会变成解决问题的能力。
最后说一个细节:做仿真时一定要养成把关键变量导出到 Workspace 并画叠加图的习惯,别只看 Scope 里的波形。Scope 的波形关了就没有了,导出到 Workspace 之后可以慢慢做对比分析,甚至可以写一段小脚本自动评估 THD、功率、效率等指标。我在实际项目里就是靠这套流程快速筛出不同工况下的最优控制参数,效率比看图猜高得多。