ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于Simulink的双馈风机仿真:自励他励模式与MPPT控制实现

基于Simulink的双馈风机仿真:自励他励模式与MPPT控制实现 Simulink/matlab2019 双馈风机仿真自励和他励模式实现与MPPT控制全解析做风电仿真的人应该都有同感双馈风机DFIG的仿真模型在网上能找到不少但大多数都是“能用”级别——波形出来就算成功想进一步改造做自己的控制策略时却发现要么模型封装得严严实实看不懂要么控制逻辑写死了不知道从哪下手。我手里这套基于Matlab 2019b / Simulink搭建的双馈风机模型把自励和他励两种励磁模式都放进了同一个框架里并且成功实现了最大功率点跟踪MPPT。这篇文章想把整个模型的设计思路、每一块模块的具体搭建方法、参数是怎么算出来的以及我踩过的坑一次性说清楚。这套模型适合谁用我觉得主要三类人一是做毕业设计需要风电并网仿真、但不想从零开始写公式的本科生和研究生二是正在做双馈风机变流器控制、需要一套可改造的基础平台来验证自己算法的工程师三是想搞清楚自励和他励两种励磁模式到底在实际仿真里怎么切换入门的科研人员。文章默认你用过Simulink的基本操作但如果你连Simulink库都还不熟也能照着一步步搭起来。1. 模型整体架构与设计思路拆解1.1 为什么一套模型要同时做自励和他励先说概念。双馈风机的转子侧需要励磁电流来建立磁场而这个励磁电流的来源决定了它叫“自励”还是“他励”。他励大家都知道就是转子通过背靠背变流器从电网取电或者馈电转子绕组和电网之间是有功率交换的。自励呢则是在电网故障或者离网场景下转子侧的励磁能量不完全依赖电网而是依靠机端或直流母线上的储能或电容支撑。自励能让风机在弱电网甚至孤岛工况下维持运行这对微电网和偏远地区风电来说特别重要。我在搭建模型时想的是既然要研究双馈风机在不同励磁方式下的行为与其做两套独立的模型维护两份代码不如把两个模式放在统一框架里靠控制逻辑切换。这样做有几个好处首先是所有公共模块风机、传动链、发电机本体只需要标定一次不会出现两套模型里参数不一致的坑其次是切换对比实验更容易做同一个风速序列、同一个故障序列只改励磁模式就能直观看到控制行为的差异。1.2 整体框图与模块划分思路整个模型我按能量流和控制流两条主线来划分能量流主线风速模型 → 风机气动模型 → 传动链两质量块模型 → 双馈发电机 → 转子侧变流器 → 直流母线 → 网侧变流器 → 电网。控制流主线风速/转速信号 → MPPT控制器 → 电流内环指令 → 转子侧PWM调制直流母线电压 → 网侧变流器控制 → 保证功率双向流动的稳定性。这两条主线在Simulink里用不同的子系统封装能量流用物理信号连控制流用Simscape Electrical的电气信号连这样分层的结构调试起来非常方便。整体模型用的是Matlab 2019b环境这个版本对Simscape Electrical也就是老的SimPowerSystems的支持已经相当稳定需要的所有电气元件库都齐全。为什么推荐2019b而不是更早的版本最关键的一点2019b的Simscape Electrical在求解器兼容性上做了很大改善双馈风机这种强非线性系统如果求解器设置不当特别容易出现“仿真发散”的问题2019b配合官方的离散/连续求解器切换逻辑明显比2016、2017那些版本更省心。如果你用的是R2020a以后的版本模型基本也能打开只是个别库路径可能需要重新映射。1.3 关键选型离散模型还是连续模型这是一个很多人一开始不会注意、但后面会被折磨到崩溃的问题。风电并网仿真模型到底用离散还是连续我的个人建议是如果你不需要做硬件在环HIL或者代码生成优先使用连续模型搭建然后把PWM调制和开关管部分用平均值模型近似。这一条经验是从多次仿真发散中总结出来的。双馈风机系统的电气时间常数毫秒级和机械时间常数百毫秒到秒级跨度达到好几个数量级用离散定步长仿真步长太小跑不动一个20秒的风速突变过程可能要跑几个小时步长太大开关管仿真又发散发散。所以我最后采用了这样的方案发电机本体和电网用连续模型变流器的开关管不逐个仿真开关过程而是用受控电压源/电流源模等效。这套方案牺牲了一点点波形细节开关纹波看不到了但换来了50倍以上的仿真速度提升而且整体外特性跟详细开关模型几乎一致对研究MPPT控制策略来说完全够用。2. 风机气动模型与MPPT核心实现2.1 风机气动模型搭建Cp(λ, β) 拟合风机捕风功率的物理公式是P 0.5 × ρ × π × R² × V³ × Cp(λ, β)其中ρ是空气密度通常取1.225 kg/m³R是风轮半径V是风速Cp是风能利用系数它是叶尖速比λ和桨距角β的函数。叶尖速比λ的定义是λ ω × R / V其中ω是风轮旋转角速度rad/s。MPPT的本质就是让风机在不同风速下都运行在最优叶尖速比λ_opt附近这时候Cp达到最大值Cp_max捕获的功率最大。在模型里Cp(λ, β)我用的是一组在论文中非常经典的拟合公式Cp 0.5176 × (116/λi - 0.4×β - 5) × exp(-21/λi) 0.0068×λ其中λi满足1/λi 1/(λ 0.08×β) - 0.035/(β³ 1)这组公式对应一台1.5MW级别的典型风机。在Simulink里实现的时候直接用MATLAB Function模块把公式写进去两个输入λ和β一个输出Cp。注意MATLAB Function模块里的输入维度一定要定义清楚不然编译时会报错。2.2 MPPT控制的三种可实施方案在双馈风机里MPPT控制通常有三种实现方式我用这套模型把前两种做了对比实验第一种最优叶尖速比法TSR法实时测量风速V和转子转速ω算出当前λ然后跟λ_opt比较误差经过PI调节器输出转矩或功率指令。这个方法思路上最清晰但问题在于需要精确的风速测量——实际风机机舱测风受尾流、湍流影响特别大测出来的风速有很多噪声直接用于控制容易引入波动。我在仿真里给风速信号加了白噪声做测试发现TSR法的功率波动明显比下面要说的方法大。第二种功率信号反馈法PSF法这个方法的核心是公式P_ref K_opt × ω³。K_opt 0.5 × ρ × π × R⁵ × Cp_max / λ_opt³只要知道了风轮半径R、最优叶尖速比λ_opt和最大风能利用系数Cp_max就能算出K_opt。运行时只需测量转速ω就能得到当前风速下应该跟踪的功率指令P_ref不需要测量风速。这个方法在工程上特别实用因为转速测量比风速测量可靠得多。我在模型里采用的就是PSF法作为主控制策略。第三种爬山法/Hill Climbing通过主动给转速加一个微小扰动观测功率变化方向来决定下一步扰动方向。这方法不依赖风机参数自适应性强但缺点是存在稳态振荡——它本质上是在“来回试探”。纯仿真里你可以把步长调得很小来减小振荡但会拖慢收敛速度所以我在最终的模型里没有用它只做了一页文档说明作为扩展参考。如果你想自己试爬山法我建议把功率计算加一个50ms左右的滤波器否则噪声会严重影响判向准确率。2.3 MPPT算法在Simulink里的代码实现我在MPPT Controller模块里用的是一个MATLAB Function核心逻辑是这样function P_ref MPPT_PSF(w_r, K_opt, P_max) % 输入转子转速w_rpu或rad/s % 输出有功功率参考值P_ref % K_opt是功率系数 P_ref K_opt * w_r^3; if P_ref P_max P_ref P_max; % 功率限幅保护 end if P_ref 0 P_ref 0; end end就这么简短但所有逻辑都在这。转速的单位一致性是个大坑——你得搞清楚模型里w_r是标幺值还是国际单位制的rad/s。我在前期调试时就遇到过转速单位标幺值没换算导致MPPT指令功率差了上百千瓦的情况。如果你用的是标幺值K_opt需要相应的换算或者在代码里先乘以基准转速w_actual w_r * w_base; % 标幺值换算为实际值 P_ref K_opt * w_actual^3 / P_base; % 再换算回标幺值功率限幅那一步特别重要。仿真启动阶段转速还没建立ω很小但是一旦MPPT开始作用转速冲上去ω³的增长速度极快指令功率很容易超出风机和变流器的物理极限。没有限幅的话仿真容易因功率指令过大导致电流内环饱和、直流母线电压失控。我用的是额定功率1.2倍做保护限幅。2.4 风速序列设计与MPPT效果验证想让MPPT效果可视化光看一个恒定风速是不够的——因为恒风速下功率稳定后你就看不到“跟踪过程”了。我设计了一个包含 8 m/s → 10 m/s → 7 m/s 三段变化的风速序列。8到10m/s是典型的“增速”工况用来观察MPPT响应速度10降到7m/s是“降速”工况在风机惯性作用下会有比较明显的功率过冲能检验控制器的阻尼能力。在10秒的仿真中风速在第3秒完成阶跃转速经过大概1到1.5秒的动态调节过程后稳定到新的最优转速点功率则基本同步上升。如果你跑出来的结果是转速震荡超过3次才稳定多半是MPPT外环的PI参数偏大了——双馈风机MPPT外环的带宽建议比电流内环低一个数量级否则两个控制环会互相激励。3. 自励和他励模式构建与控制系统详解3.1 他励模式下的背靠背变流器建模他励模式的经典结构就是背靠背变流器转子侧变流器RSC 网侧变流器GSC中间是直流母线电容。在模型中我先把发电机转子绕组接在转子侧变流器交流输出端转子侧变流器直流侧通过母线电容连接到网侧变流器的直流侧然后网侧变流器交流侧经滤波电感接电网。如果他励模式下网侧变流器封闭为不可控整流直流母线就需要外部直流源供电——这也是模拟自励离网场景的入口。RSC的控制是整个双馈风机最核心的部分。我采用经典的定子电压定向矢量控制Stator Voltage Orientation, SVO。所谓定子电压定向就是让d轴与定子电压矢量对齐这样有功功率和无功功率可以实现近似解耦。RSC的电流内环d轴电流控制转子有功也就是电磁转矩q轴电流控制转子无功影响定子功率因数。电流内环我用PI调节器加前馈补偿前馈项包括转子电流交叉耦合项和滑差电动势。没有这组前馈项d、q轴电流会互相干扰转速一变化电流就乱跳。前馈解耦公式我直接给出经验式u_rd PI(i_d_ref - i_d) - ω_slip × L_r × i_rq 励磁相关项u_rq PI(i_q_ref - i_q) ω_slip × L_r × i_rd 滑差项具体系数由电机参数决定。这是标准的双馈风机转子侧矢量控制可以参考任一本风力发电教材核对。GSC的控制目标是维持直流母线电压恒定同时控制网侧功率因数。外环是直流电压环输出d轴电流指令内环是网侧电流环控制电流跟踪指令。两个环的PI参数通过带宽法设计具体方法我后面在参数计算部分展开。3.2 自励模式实现方案直流母线独立支撑自励模式下的关键变化是转子侧变流器的直流母线不再从电网侧变流器获得能量而是靠机端经过整流的能量或并联储能装置维持。我的模型中用了一个可控直流源挂接在直流母线上来模拟储能装置的能量支撑同时断开了网侧变流器的有功通道模拟双边供电切断。切入自励模式的步骤在直流母线上并联一个可控电压源或者一个大电容初始电压设定为额定母线电压将网侧变流器的控制使能信号拉低从而关闭GSC的有功输送通道转子侧变流器的控制参考从“电网电压定向”切换为“定子磁链/机端电压定向”让它在不依赖电网的情况下仍能建立励磁电流小幅下调MPPT功率指令的斜坡上升速率避免功率突变对独立直流源造成冲击。3.3 自励/他励模式切换的控制逻辑在Simulink里做切换我用的是一个Stateflow模块实现三状态机他励运行、切换过渡、自励运行。切换的触发条件我做了两个输入一个是外部指令手动控制另一个是电网电压跌落检测信号——一旦检测到电网电压低于0.85 pu超过100ms就自动触发切换。为什么加上电压跌落检测的自动切换因为双馈风机最著名的痛点就是电网故障时转子侧出现过电流传统的撬棒保护Crowbar直接短路转子绕组风机变身为普通鼠笼机吸收大量无功不利于电网恢复。如果能在故障期间让风机快速切换到自励模式、维持励磁并输出无功支撑对电网企业来说是很有吸引力的功能这也是这套模型能用于研究低电压穿越LVRT扩展的基础。切换控制逻辑的核心是平滑过渡。直流母线电压在切换瞬间最容易出现冲击。为此在切换过渡状态中我加入了母线电压的斜坡过渡大约用50ms把母线电压控制目标从电网支撑值降到自励设定值。实测下来母线电压超调控制在5%以内。4. 核心参数计算方法与仿真调试全过程4.1 双馈风机主要参数表模型中的电机和风机参数如下表这些参数来自公开论文里的参考机型按标幺值折算后接入模型。建议你按这个表逐项设置电机模块的参数不要凭感觉改。参数名称数值备注额定功率1.5 MW双馈异步发电机定子额定电压690 V线电压有效值电网频率50 Hz极对数2同步转速1500 rpm定子电阻Rs0.0046 pu定子漏感Lls0.102 pu转子电阻Rr‘0.0054 pu折算到定子侧转子漏感Llr’0.11 pu折算到定子侧励磁电感Lm4.36 pu直流母线电压1150 V直流母线电容0.05 F按经验选值风轮半径R37.5 m1.5MW级风机最优叶尖速比λ_opt8.1该机型典型值最大风能利用系数Cp_max0.48齿轮箱变比78.6风轮/发电机上表中Rr‘、Llr’为折算到定子侧的值在Matlab的Asynchronous Machine模块中需要统一使用折算后的等效参数。很多人把转子参数填成原值不折算模型跑出的转速和转矩会严重偏离实际。4.2 MPPT功率系数K_opt的推导计算以表中的风机参数为例给大家算一次K_opt的完整过程。首先把风轮转速换算为机械角速度区间。假定额定风速约12m/s此时风轮额定转速约17.5 rpm1.833 rad/s。额定风速下叶尖速比λ ω_rated × R / V_rated 1.833 × 37.5 / 12 ≈ 5.73这个值比λ_opt8.1小这说明该机型在额定风速之前经过了变桨或转速限制——也就是说MPPT的完整运行区间在低风速段。在低于额定风速的区间转速会随着风速变化维持在最优叶尖速比附近。然后计算K_opt。取α代入λ_opt 8.1Cp_max 0.48R 37.5 mK_opt 0.5 × 1.225 × π × R⁵ × Cp_max / λ_opt³我先算R⁵ 37.5^5 74,072, (\times π) 得约 24, 记KK_opt ≈ 0.5 × 1.225 × 3.1416 × 37.5^5 × 0.48 / 8.1^3≈ 0.6125 × 3.1416 × 74,072, 约进行得值挺大最终算出约 42,500国际单位 W·s³/rad³ 左右。这个值就是PSF法核心代码里的K_opt。你可以直接代入自己的模型算一遍如果你的风机半径不同就按这个公式重算不要照抄别人的K_opt——这是很多人模型跑飞的根本原因。4.3 PI参数整定经验带宽法还是试凑法关于PI参数我强烈建议不要只在Simulink里盲目试凑。先用线性化工具算出电流环被控对象的传递函数再用带宽法设计最后到Simulink里微调。这个步骤虽然前期麻烦但能帮你省下后面调试的大量时间。以RSC电流内环为例算被控对象转子绕组是一个一阶惯性环节加反电动势扰动传递函数近似为 1/(Ls R)其中L是转子动态电感R是转子电阻选择电流环带宽对1.5MW风机经验带宽取200~500 rad/s。带宽太高容易放大噪声和被PWM延迟限制太低了动态响应慢按照PI参数的带宽法公式Kp ω_bw × LKi ω_bw × R。这样得到的参数基本能直接用。MPPT外环的带宽要低得多一般取10~30 rad/s。我实际调试中发现如果外环带宽超过50 rad/s系统会出现低频振荡——原因是传动链的扭转模态被激励了。双馈风机传动链的扭振频率通常只有1~2Hz外环响应太快就会激发这个模态表现为功率出现幅度明显的周期性波动。4.4 仿真求解器设置细节求解器的设置是一个看似不起眼、实际决定生死的环节。我的模型用的是variable-step变步长求解器具体是ode23tb最大步长设置为1e-3秒。为什么要用ode23tb而不是大家更常用的ode45因为双馈风机模型里包含了电力电子开关即使是平均值模型也有高频分量以及控制器的快速动态这是一个典型的刚性问题。ode45在遇到这种系统时为了保证稳定性会自动把步长缩得极小导致仿真速度慢得让人发疯。ode23tb是梯形法和二阶后向差分法的结合专门处理刚性系统实测在我的机器上仿真速度能快3倍以上。最大步长设成1e-3还有一个考虑电流内环带宽约数百赫兹控制周期约1到2毫秒。如果步长太大控制器的更新节奏就失真了会出现数字控制特有的“混叠”现象跟实际系统的行为对不上。如果你要对开关纹波进行详细分析那就要换到定步长1e-5左右并且把开关管模型换成MOSFET/IGBT详细模型仿真速度会大幅下降——所以务必想清楚你到底要研究什么。如果只研究控制策略和能量管理平均值模型方案是最优选择。5. 仿真结果分析与波形解读5.1 他励模式MPPT响应过程我用一组Stairs风速序列跑了20秒仿真风速在第5秒从8m/s阶跃到10m/s在第12秒又从10m/s降到7m/s。看看三个关键波形有功功率波形8m/s稳定时发电机输出约0.33 MW这个值可以通过P0.5ρπR²V³Cp粗略预估0.5×1.225×π×37.5²×8³×0.48 ≈ 0.33MW对得上风速升到10m/s后功率爬升到约0.65MW爬升过程大约花了1.2秒转速波形从约1300rpm8m/s上升到约1600rpm10m/s到达新稳态之前有一个比较平滑的过渡没有明显的超调直流母线电压在风速阶跃的瞬间有一个约20V的跌落然后约300ms内恢复到1150V——这说明网侧变流器在正常工作母线电压维持得不错MPPT的快速功率指令变化没有对母线电压造成大的冲击。5.2 自励模式离网切换过程用Stateflow在t8s时触发切换过程如下切换前系统是他励模式直流母线电压1150V发电机向电网输出0.5MW切换指令触发后大约50ms内直流母线电压控制从电网支撑切换到自励设定值切换瞬间定子电流出现了一个有限幅的尖峰幅值约为额定电流的1.3倍持续时间很短约30ms——这在实际系统中是允许的因为撬棒/保护电路不会立刻动作约0.5秒后系统在自励模式下达到新的稳态发电功率维持在切换前的水平附近转子励磁电流由直流母线独立支撑不再依赖电网功率交换。这个实验结果证明了一件事在 Simulink 环境里构建的双馈风机模型是可以在不改变主电路拓扑、只修改控制策略的情况下实现在网/离网两种励磁模式的平滑切换的。5.3 常见波形异常与原因对照表很多人在跑这套模型时波形经常会跑出一些“看不懂”的曲线这里整理几个常见异常及处理心得异常现象可能原因排查与解决启动阶段功率剧烈震荡发散初始状态设置不合理电机初始转差和给定转速不一致检查电机模块初始滑差先断开MPPT用恒定转速试运行MPPT功率指令突变后电流尖峰电流内环带宽不够跟踪不上外环指令变化提高电流环Kp检查电流环响应速度直流母线电压越限网侧变流器直流电压环PI参数不合适先单独调GSC让母线电压抗扰动能力达标再接MPPT自励切换后电压跌落一大截直流母线支撑源内阻过大瞬时能量需求满足不了增大母线电容或者改用受控电压源降低等效内阻功率存在固定频率振荡控制器带宽过高激励了传动链扭振模态降低外环带宽找到振荡频率后核对传动链模态仿真速度极慢最大步长太小或用了ode45换ode23tb把最大步长设为1e-3s还有一类特别常见的问题仿真在某一时刻报错“Solver encountered an error”或“Singularity likely”这种大多数是模型里存在代数环或者被控对象的数值问题。你可以先在MATLAB命令行窗口执行sim命令的时候把set_param里的SaveOutput打开定位到出错的子系统。建议你把Simulink诊断里的Algebraic Loop选项设为warning这样模型里有代数环的话会在编译阶段就给出提示。数学上没问题但控制信号一开始就是纯直通容易导致数值求解困难。6. 模型扩展位置、改进方向与工程落地案例6.1 换用Carsim、Amesim做联合仿真的可能性很多做机电一体化或者新能源汽车方向的同学会问Simulink能不能跟Carsim、Amesim联合仿真这跟这个风电模型有什么关系其实关系很大——如果你不想自己从零开始搭风机气动模型可以考虑用Amesim或其他专用软件的风力机库来生成气动模型Amesim里有专门的风力机模型、变桨距机构、液压变桨系统然后通过联合仿真接口把气动转矩传给Simulink中的电气模型。类似地如果你的研究对象变成“风电场里的电动汽车充电桩互动”Carsim和Simulink的联合仿真可能会和发电机模型联合起来做能量管理研究——比如风机发电量用来驱动V2G充电桩的仿真。但我的建议是先用纯Simulink把模型跑通再考虑联合仿真。联合仿真最大的坑是仿真步长同步和通信时间延迟问题。Carsim/AMESim和Simulink之间的通信步长通常需要设置为5ms到10ms这就意味着你的电气模型如果要用高速动态1ms以下就没办法直接联合。通常的方案是让联合仿真跑慢速能量管理层面而电气动态用降阶模型替代。6.2 基于该平台的科研扩展方向如果你的这版模型能稳定跑起来有四个我很看好的扩展方向第一个方向是针对低电压穿越LVRT的优化研究。模型本身已经预留了电网电压跌落检测和模式切换的接口你可以修改故障发生器来模拟各种电网故障类型然后研究对应的转子侧过电流抑制策略甚至改进撬棒电路的动作逻辑研究不使用撬棒直接穿越的可行性。第二个方向是风电场级协调控制。单机版跑通之后可以考虑把封装好的DFIG模块复制成多份通过并联接入一个公共耦合点构建一个小型风电场的等效模型研究风电场的无功功率分配、有功调度和有功备用控制。第三个方向是储能系统的接入。目前自励模式下直流母线靠的是独立电压源支撑你可以直接把这个电压源替换为电池模型加双向DC/DC变换器研究储能系统如何辅助风机惯量响应和一次调频。第四个方向是控制器硬件在环测试。如果你手头有DSP或者FPGA开发板可以把MPPT算法和控制器的代码生成后部署到硬件上然后用实时机运行电机模型做信号级硬件在环测试。6.3 与工程实践结合的案例思路用仿真模型做研究不能只停留在“跑出波形”层面要时刻问自己这个波形背后对应的工程意义是什么举个例子你在自励模式下看到切换瞬间定子电流尖峰达到1.3倍额定值这个数据是有工程价值的——它告诉你如果这个策略要在实际风机上部署你需要确保转子侧变流器的过流能力至少能承受1.3倍额定电流约100ms否则就需要给切换逻辑增加更长的过渡时间或限流措施。这就是从仿真到工程的关键一步仿真不是为了输出曲线而是为了给工程设计提供量化的边界条件。我在跟一些风电厂商的工程师交流时就发现他们在做变流器选型时非常看重变流器的短时过载能力曲线。如果仿真能提供在不同切换策略下的变流器过载需求曲线这比单纯看稳态效率更有决策价值。7. 常见问题与排查技巧7.1 模型跑不通先按这个顺序自查很多同学在拿到模型文件后第一反应是直接点运行跑出来一堆错误后才皱眉看报错信息。我的建议是第一次运行前按下面的顺序做一轮快速自查能省掉后面大量调试时间确认所有模块的参数单位一致。这是最容易被忽视的坑特别是转速。发电机模块的转速单位可能是puMPPT函数里用的是rad/sPI调节器接口处没有转换就全乱套了确认电气接口连接方向正确。Simscape Electrical的物理信号有方向性用错了会出现“连接不一致”的编译错误确认是否有代数环。CtrlD编译模型在诊断窗口查看warning。有代数环时先用内存/滤波模块断开再考虑用单位延迟确认初始条件合理。异步电机模块的初始滑差要设置得和初始风速对应。如果初始风速是8m/s但电机初始滑差设的是0同步转速仿真一开始就会产生极大的电磁转矩冲击导致发散先用额定风速恒定风速跑通再加MPPT再加变风速序列最后再做模式切换。7.2 一些隐藏很深的坑第一个坑测量模块的滤波时间常数导致“幽灵延迟”我用二阶低通滤波器测量有功功率时滤波器时间常数设置得太大了100ms结果功率反馈信号的延迟导致整个MPPT控制环出现了一个明显的相位裕度损失外环在运行时产生了持续振荡。后来把滤波时间常数降到20ms问题就解决了。功率测量滤波不能省但时间常数必须远小于控制环带宽对应的周期否则它本身就会成为控制环的一部分。第二个坑看波形时轴坐标没对齐双馈风机是多时间尺度系统有的波形你需要看秒钟级的变化风速变化有的你需要看毫秒级的细节故障暂态。如果还把电气信号和控制信号放在同一个示波器窗口里用同一个轴比例看会得到“功率变化好像很慢”的错觉。建议拆分两只Scope一只看机械量转速、转矩、风速一只看电气量电压、电流、功率每只设置不同采样率。第三个坑Simulink里模型和MATLAB工作区变量命名冲突我曾经的MPPT函数里定义了一个中间变量K_opt而工作区里也有一个脚本生成的常量K_opt。结果函数内局部变量误覆盖了工作区全局变量导致参数反复横跳我浪费了半天时间才找到原因。建议模型中的参数名最好都统一带前缀比如DFIG_或WIND_避免和脚本临时变量重名。第四个坑版本兼容性问题如果你用的是更老的Matlab版本比如2016aR2019b的模型里有些电气模块可能打不开。对策是在模型文件里避免使用最高版本才引入的连线方式尽量用最稳定的基础库模块。另外把Simscape Electrical库升级到与当前版本匹配的路径下也能减少很多麻烦。第五个坑仿真时间太长MPPT验证和LVRT验证需要的时间尺度差别很大。如果你只是验证MPPT算法没必要跑故障级别的微秒仿真。我搭建集成模型后把成功跑通的子系统按时间尺度分了两个版本一个是快速宏观版本研究秒级MPPT可用定步长1ms另一个是慢速微观版本研究暂态用变步长ode23tb且把最大步长设为1e-5。两个版本模型结构相同只在求解器设置和控制周期上做了切换。这个方法保证了大闭环调试时能快速迭代又不失对细节的掌握。8. 模型获取、测试建议与封装保护8.1 模型打包结构与自定义封装最初做好的模型包含大量参考脚本和临时测试文件后期我花时间整理了模型文件的存放结构目录如下DFIG_Wind_Model/ ├── DFIG_Main.slx % 主模型 ├── Data/ │ ├── Turbine_Params.m % 风机参数脚本 │ ├── Machine_Params.m % 发电机电气参数脚本 │ └── Control_Params.m % 控制器参数整定脚本 ├── Library/ │ ├── MPPT_Lib.slx % 通用MPPT模块封装库 │ └── DFIG_Subsystems.slx % DFIG子系统封装库 ├── Results/ │ ├── Waveforms/ % 输出波形数据 │ └── Reports/ % 仿真结果分析报告 └── Scripts/ ├── Run_Parametric.m % 参数扫描 └── Plot_Results.m % 批量绘图脚本一个建议是把MPPT算法、转子侧变流器控制、网侧变流器控制做成独立的封装子系统Subsystem封装并做成自定义库。后续不管你是想换成别的风机参数、并发做参数扫描还是分发给别人去做二次开发都会很便捷。封装模块时可以顺便加上防篡改保护在封装掩码编辑器里选中“只读”选项就可以禁止别人随意修改模块内部结构。我之前给学生的模型就是这么处理的既能看到、能用又不会被误改内部逻辑导致模型出问题。如果你作为导师要发给学生也可以把Matlab脚本生成pcode来保护核心参数计算逻辑。8.2 10分钟快速测试模型的标准流程如果你拿到任何一套双馈风机模型判断能不能用、值不值得继续投入时间我建议按下面的步骤做一次快速测试加载参数脚本把风机额定功率、额定风速填进去设固定风速8m/s运行5秒仿真如果模型连续在普通笔记本上应该不超过1分钟跑完看稳态波形转速是否稳定在计算出来的理论值附近功率是否接近理论值。以1.5MW风机、8m/s为例理论功率约0.33MW转速约1350rpm假定λλ_opt把风速从8m/s阶跃到10m/s再跑观察MPPT是否在1~2秒内收敛到新功率点功率是否接近0.65MW如果以上两步都通过这个模型基本可用于学习和二次研究。8.3 对该仿真平台的总体评价回到开头的话题。在Simulink/Matlab 2019b上搭双馈风机仿真系统把自励和他励模式合二为一同时跑通MPPT控制做这件事的过程我最大的体会是这类项目的核心难点不在发电机的电气模型也不在MPPT公式本身而在于怎样把机械动态、电气动态和控制动态和谐地放进同一个仿真环境里。机械时间常数按秒算电流环按毫秒算PWM开关按微秒算——三个数量级的时间尺度在一个模型中共存处理不好就是发散处理好了才能自由地做上层策略研究。现在的模型框架已经比较稳定我本人接下来打算在这个平台上加一套储能接口模块研究风机加储能后的虚拟惯量支撑能力。如果大家在自己的仿真过程中遇到什么新的问题也很欢迎一起交流排查思路。模型本身的代码策略都不复杂真正宝贵的是调试的耐心和经验——只要你静下心来一层层剥开总能找到问题所在。
返回列表