在电力电子与新能源并网这个圈子里,做光伏逆变器仿真的人多少都听过MWORKS Sysplorer。最近我手头正好有个活:用MWORKS Sysplorer搭一套光伏逆变器并网SMIB(单机无穷大系统)仿真模型,重点把PLL锁相环和dq电流控制环这两个核心模块吃透。跑完一轮测试下来的感受是:这套工具在电力电子系统级仿真上的完成度确实能打,而且遇到问题时自己排查起来,比纯手推公式要直观得多。
这篇东西我不打算写成操作手册,而是想把从模型搭建、参数设置到调试运行中那些真正费过劲的地方摊开来讲。如果你正在用或准备用Sysplorer做并网逆变器仿真,尤其是对PLL和dq控制这一套不太熟,那这篇内容应该能帮你少走不少弯路。我也会把坐标变换的推导过程、控制参数的计算逻辑,以及我实测踩过的几个坑一并整理进去。不管你是刚从Simulink转过来,还是第一次接触MWORKS,这篇都可以作为一份参考。
1. 项目整体拆解:为什么选MWORKS Sysplorer做并网仿真
1.1 从题目看本质:这套模型到底在仿真什么
先把这个项目标题拆开看:MWORKS Sysplorer是仿真平台,光伏逆变器是被仿真的对象,并网SMIB是运行场景,PLL与dq电流控制则是整个模型里最核心的两个算法模块。连起来理解,这是一个典型的“新能源发电单元接入无穷大电网”的稳态与动态特性仿真任务。
SMIB(Single Machine Infinite Bus)的概念在电力系统里很经典,它把整个电网等效成一个电压幅值和频率都恒定的无穷大母线。用SMIB来做并网仿真有一个天然的好处:你能把电网响应从仿真里剥离出去,专心研究逆变器自身的行为。换句话说,逆变器输出侧的电压和频率由电网“撑住”,研究的焦点就变成了逆变器的输出电流能不能精确跟踪指令、功率能不能按设定值走、电网电压出现扰动时系统还能不能稳住。这个设定在分析锁相环动态、电流内环响应、以及弱网适应性时特别有用,因为它把变量控制到了最干净的程度。
Sysplorer在这个场景下提供的是一整套物理建模环境。你不用像在纯代码环境里那样手动管理积分步长和状态变量,而是通过图形化方式把电气主电路、控制算法和测量模块拖拽连接起来。对于做过Matlab/Simulink仿真的人,上手Sysplorer的曲线很平滑,很多交互习惯是相通的。不过它也有自己的脾气,这个在后面章节里我会详细说。
1.2 工具选型的底层逻辑:为什么不是Simulink或Cautosim
关于MWORKS和MathWorks那套平台的对比,圈子里一直有讨论。我个人的观点是:如果你单位已经在用国产工具链做替代或正版化合规,那MWORKS Sysplorer是目前在电力电子仿真方向上最接近Matlab/Simulink体验的选择。
先说结论性的对比。Simulink的生态最成熟,文档和第三方工具箱最丰富,如果你要搭一个非常复杂的电力系统,比如几百个节点的微电网群,那Simulink加Simscape Electrical确实还是最稳的路径。而Cautosim在控制系统仿真上有不错的表现,但它的强项更多集中在控制算法验证和快速原型这一层,电力电子主电路模型的丰富度相对弱一些。Sysplorer的定位更接近Simulink,它既有完整的电气元件库,也有控制算法建模环境,二者在同一个模型里是“原生”协同工作的,不需要外部接口来回倒腾数据,这个一体化的体验在国产工具里确实做得比较到位。
再用一个生活化的类比来说清楚这个差别。Simulink像是一个老牌研发中心,各种设备齐全,但很多高级功能模块是要单独买授权的;Cautosim像是一个专门的工艺实验室,做控制算法的验证速度和效率很高,但是你要在里面做电气大功率实验,设备就有点不够用;Sysplorer则更像一个集成度很高的中试车间,电磁暂态、控制逻辑、数据记录这些环节都被安排在相邻的房间,进出方便,整个流水线跑起来更快。对于光伏逆变器这种强耦合的机-电-控系统,这种一体化协作能力是很有价值的。
1.3 Sysplorer环境下的系统级建模思路
在实际建模之前,我习惯先画一张系统的能量流和信号流图。能量流是:光伏阵列发出直流电,经过逆变器变成三相交流,经过滤波电抗器接到SMIB电网上。信号流是:电网三相电压进入PLL,PLL输出电网相位角;电网三相电流经过abc/dq变换,变成dq轴电流;dq电流经过PI控制器得到dq电压指令,再经过dq/abc逆变换和PWM调制,生成逆变器的开关信号。
这个能量流加信号流的双层结构,是理解整个仿真的核心框架。Sysplorer里的模型拆解也是沿着这个框架来的。你在建模型时,物理上有一个“功率电路”子系统,逻辑上有一个“控制算法”子系统,最后再用电压电流测量模块把两个部分连接起来。这种分层思维非常关键,因为后续调试的时候,你要能快速判断问题是出在主电路(比如滤波参数不对)还是控制部分(比如PLL初始相位不对),而不是一头扎进几百个模块里乱找。
Sysplorer的元件库覆盖了电气元件(电阻、电感、电容、变压器、三相电源、逆变桥等)、信号源(阶跃、正弦、斜坡等)、测量模块(电压表、电流表、功率表等)和数学运算模块(加减乘除、积分微分、三角函数、传递函数等)。这些模块的连线方式和Simulink的风络相似但又不完全一样,我刚用的时候总想按Simulink的快捷键和缩放习惯操作,反而不顺手。不过适应几天后,效率就上来了。
2. PLL锁相环:从电网相位到dq坐标系的“定海神针”
2.1 为什么并网逆变器离不开PLL
我们在做并网仿真时,PLL是最不能含糊的模块。它的物理意义一句话就能说明白:在任意时刻精确地检测出电网电压的相位角,然后把逆变器的控制系统“对齐”到这个相位上。
为什么要对齐?因为逆变器输出电流要实现对电网电压的有功和无功控制,必须把三相静止坐标系里的交流量,变换到同步旋转的dq坐标系里的直流量。而dq变换的前提是:你用来做变换的那个旋转角,恰好就是电网电压矢量的角度。如果这个角度有偏差,dq轴电流会出现耦合和稳态误差,功率因数不再受控,严重时还会触发过流保护甚至导致系统失稳。这就好比两个人要手拉手转圈,对方已经以50Hz转起来了,你如果不知道他转到哪个方向就开始伸手,大概率是拉不住的。
在SMIB仿真中,电网电压是理想的,频率恒定、幅值恒定,但系统启动时逆变器输出电压和电网电压之间存在初始相位差,实际运行中出现电压暂降或者频率偏移时,相位差也会动态变化。PLL的任务就是实时跟踪这个相位,让控制系统始终与电网保持同步。PLL的性能指标包括三个:锁相精度(稳态相位误差)、锁相速度(动态响应时间)和抗扰能力(对电网畸变的抑制)。
2.2 SRF-PLL工作原理与控制框图
目前工程上最常用的就是基于同步旋转坐标系的SRF-PLL(Synchronous Reference Frame PLL),也叫dq锁相环。它的核心思想并不复杂:三相对称电压经Clarke变换到αβ静止坐标系,再经Park变换到dq旋转坐标系,其中q轴分量在相位被准确锁定时正好等于零。
我先把数学推导写出来,这样比光看框图好理解得多。设电网三相电压为:
[ \begin{cases} v_a = V_m \cos(\theta_g) \ v_b = V_m \cos(\theta_g - 2\pi/3) \ v_c = V_m \cos(\theta_g + 2\pi/3) \end{cases} ]
这里的(\theta_g)是电网电压矢量的实际角度。经过等幅值Clarke变换:
[ \begin{bmatrix} v_\alpha \ v_\beta \end{bmatrix}
\frac{2}{3} \begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \ 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} v_a \ v_b \ v_c \end{bmatrix} ]
可以得到:
[ v_\alpha = V_m \cos(\theta_g), \quad v_\beta = V_m \sin(\theta_g) ]
然后经过Park变换,旋转角度用的是PLL估计出来的(\hat{\theta}):
[ \begin{bmatrix} v_d \ v_q \end{bmatrix}
\begin{bmatrix} \cos\hat{\theta} & \sin\hat{\theta} \ -\sin\hat{\theta} & \cos\hat{\theta} \end{bmatrix} \begin{bmatrix} v_\alpha \ v_\beta \end{bmatrix} ]
展开后:
[ v_d = V_m \cos(\theta_g - \hat{\theta}), \quad v_q = V_m \sin(\theta_g - \hat{\theta}) ]
当(\theta_g - \hat{\theta})很小的时候,(\sin(\theta_g - \hat{\theta}) \approx \theta_g - \hat{\theta})。这说明,(v_q)信号直接携带了相位误差信息,误差趋近于零时(v_q)也趋近于零。于是控制方案就出来了:把(v_q)送到PI控制器,PI的输出作为角频率校正量,再加上工频前馈(2\pi \times 50),最后积分得到估算相位(\hat{\theta})。
这段推导虽然是基础的教科书内容,但我还是把它完整写了一遍,因为在Sysplorer里搭PLL时,你需要在模块库里自己做Clarke变换、Park变换和PI环,而不是像某些专用工具箱那样拖一个封装好的PLL模块出来直接用。理解了推导过程,你才能知道自己搭的每个积分器、每个增益是在干什么,出了问题也知道往哪里查。
2.3 在Sysplorer里搭建PLL的详细步骤
在Sysplorer里我建议把PLL封装成一个子系统,这样电流环做dq变换时就能直接复用同一个相位角。子系统内部我按这个顺序来搭建:
第一步,接入三相电压测量值。从电网侧取的(v_a, v_b, v_c)接到一个三相电压测量模块,把电压信号引入控制子系统。注意,在Sysplorer里,电气信号和控制信号是两种不同的信号类型,中间需要通过测量模块把电气量“翻译”成控制信号。这是新手最常卡住的地方之一。
第二步,搭建Clarke变换。用两个加法器和两个增益模块实现上面的公式。增益系数分别是(2/3)和(1/\sqrt{3}),这个在Sysplorer里直接用Gain模块设置数值即可。
第三步,搭建Park变换。这里需要用到(\sin)和(\cos)三角函数模块,它们的输入就是PLL输出的(\hat{\theta})。旋转矩阵里有四个乘法器,分别是(\cos\hat{\theta} \cdot v_\alpha + \sin\hat{\theta} \cdot v_\beta)得到(v_d),(-\sin\hat{\theta} \cdot v_\alpha + \cos\hat{\theta} \cdot v_\beta)得到(v_q)。务必用乘积相加的方式搭,不要试图用矩阵运算模块,因为那样反而更绕。
第四步,搭PI环节和积分环节。PI控制器的输入是(v_q),输出是角频率误差。PI参数的选择后面单独讲。PI输出之后要加一个前馈项(2\pi \times 50),然后用一个积分器对((\omega_{ff} + \Delta\omega))积分,得到(\hat{\theta})。积分器的初始条件设为0,但要注意,如果你的仿真参考角度是用sine函数以0时刻为起点产生的,那PLL的收敛过程会有一个短暂的暂态,大概在0.02到0.05秒内完成,这是正常的,不需要慌张。
第五步,把(\hat{\theta})引出去作为输出端口,同时反馈到Park变换模块的旋转角输入端,形成一个闭环。这个闭环结构别搭错了,反馈的是估计角度,不是电网实测角度。
提示:Sysplorer里的积分器模块默认有初始条件和上下限设置。PLL里积分器上下限建议设为(-100\pi)到(100\pi),避免在某些异常工况下积分器输出跑到几十万去。实测中这个细节能帮助你避免很多莫名其妙的不收敛问题。
2.4 PLL参数整定的工程方法
PLL的PI参数整定是整个控制系统的第一个关键点。这里我从环路带宽的角度来做设计,比盲目试凑要靠谱得多。
SRF-PLL本质上是一个二阶系统。忽略电网电压幅值变化的影响,PLL的开环传递函数近似为:
[ G_{PLL}(s) = \frac{V_m K_p s + V_m K_i}{s^2} ]
其中(V_m)是电网电压幅值(相电压幅值,取311V左右),(K_p)和(K_i)分别是PI控制器的比例和积分增益。把这个开环传递函数写成标准形式,可以解出闭环系统的自然振荡角频率(\omega_n)和阻尼比(\zeta):
[ \omega_n = \sqrt{V_m K_i}, \quad \zeta = \frac{K_p}{2} \sqrt{\frac{V_m}{K_i}} ]
工程上一般希望PLL带宽是电网频率的1/10到1/5,也就是5到10Hz(对应的角频率约31.4到62.8 rad/s),阻尼比取0.707附近。以带宽10Hz、阻尼比0.707为例,计算如下:
[ \omega_n = 2\pi \times 10 = 62.8 \text{ rad/s} ]
由(\omega_n = \sqrt{V_m K_i})得到:
[ K_i = \frac{\omega_n^2}{V_m} = \frac{62.8^2}{311} \approx 12.7 ]
由(\zeta = \frac{K_p}{2} \sqrt{\frac{V_m}{K_i}})得到:
[ K_p = 2\zeta \sqrt{\frac{K_i}{V_m}} = 2 \times 0.707 \times \sqrt{\frac{12.7}{311}} \approx 0.285 ]
这在Sysplorer里可以直接赋给PI模块。实际调试时,如果觉得PLL动态响应偏慢,可以适度加大(K_p),但不要无节制地加,不然电网电压谐波会被放大,锁相角度会出现抖动。
另外提醒一句,在SMIB条件下,电网电压是理想的50Hz正弦波,PLL参数的裕量可以留得稍微小一点。但是如果以后要把这个PLL用于更真实的电网环境(比如带畸变电压),那还得在前面加一个前置滤波,比如用带通滤波器提取基波正序分量,或者用Notch滤波器把特定次谐波滤掉。这些在Sysplorer里都有对应模块,建议在设计阶段就预留好接口。
3. dq电流控制:从坐标变换到PI参数整定的完整链路
3.1 abc到dq坐标变换的工程意义
有了PLL提供的相位角,接下来就可以对逆变器的输出电流做dq变换了。为什么要费劲把三相交流电流变成dq直流量?因为PI控制器在处理直流信号时能实现无静差跟踪,而在处理50Hz的交流正弦信号时,理论上是做不到零稳态误差的。
更直白的说法是:交流量的PI控制相当于一直在追一个移动目标,比例环节追得动,但积分环节会因为目标一直在变化而无法收敛到稳定值。把交流量变换成dq轴直流量后,有功电流(i_d)和无功电流(i_q)都变成了缓慢变化的直流信号,PI控制器就能精准地把它们稳在指令值上。对于光伏并网系统来说,(i_d)的指令值对应有功功率,(i_q)的指令值对应无功功率(单位功率因数运行时(i_q^*=0))。
这个变换的物理图解就是Park变换的可视化理解:你站在一个以角速度(\omega)旋转的坐标轴上看三相电流,看到的就不再是摆动交流量,而是相对静止的矢量分量。dq变换的公式我在PLL小节里已经写过一遍,电流环用的是同一个矩阵。你只需要把输入从电压换成电流,把旋转角换成PLL输出的(\hat{\theta})就行。
3.2 电流内环的数学模型与控制结构
在dq旋转坐标系下,逆变器经L滤波器接到电网上,其数学模型为:
[ \begin{cases} L\frac{di_d}{dt} = v_{id} - v_{gd} + \omega L i_q \ L\frac{di_q}{dt} = v_{iq} - v_{gq} - \omega L i_d \end{cases} ]
这里(L)是滤波电感,(v_{id}, v_{iq})是逆变器输出电压的dq分量,(v_{gd}, v_{gq})是电网电压的dq分量,(\omega)是电网角频率。请注意方程里的耦合项(\omega L i_q)和(-\omega L i_d),这就是dq轴之间的交叉耦合。如果不加解耦控制,你会发现你控制(i_d)时会影响(i_q),两个轴会互相“打架”,系统动态特性会变差,甚至出现振荡。
因此,标准的电流内环控制结构包含三个部分:PI反馈控制、dq解耦补偿、电网电压前馈。控制方程如下:
[ \begin{cases} v_{id}^* = (K_{pc} + \frac{K_{ic}}{s})(i_d^* - i_d) - \omega L i_q + v_{gd} \ v_{iq}^* = (K_{pc} + \frac{K_{ic}}{s})(i_q^* - i_q) + \omega L i_d + v_{gq} \end{cases} ]
把PI输出、解耦补偿项和前馈项加起来,得到的就是逆变器输出的dq电压指令。再经过dq/abc反变换得到三相电压指令,送入PWM调制器生成开关信号。
在实际的Sysplorer模型里,电流环的采样频率要设置为至少10kHz,最好20kHz。因为逆变器的开关频率是10kHz,电流环采样频率要等于或高于开关频率,才能保证数字控制的稳定性。这个采样频率设置需要在Sysplorer的控制子系统配置里手动指定,不是自动继承的,很多细节如果不注意就会在这里埋下隐患。
3.3 电流环PI参数整定与仿真验证
电流环的PI参数整定比PLL更灵活,可以从被控对象的传递函数入手。忽略解耦和前馈的影响,把逆变器近似成一阶惯性环节,电流内环的等效被控对象是:
[ G(s) = \frac{1}{Ls + R} ]
其中(R)是电感等效串联电阻,(L)是滤波电感。工程上常用“零极点对消法”来整定,即令PI控制器的零点与被控对象的极点对消:
[ \frac{K_{ic}}{K_{pc}} = \frac{R}{L} ]
这样一来,闭环传递函数近似为一阶惯性环节:
[ G_{cl}(s) = \frac{K_{pc}/L}{s + K_{pc}/L} ]
闭环带宽为:
[ f_{bw} = \frac{K_{pc}}{2\pi L} ]
控制器带宽取开关频率的1/10到1/5。开关频率10kHz,带宽取1kHz(角频率约6283 rad/s):
[ K_{pc} = 2\pi f_{bw} L = 2\pi \times 1000 \times L ]
以(L = 3\text{mH})为例:
[ K_{pc} = 2\pi \times 1000 \times 0.003 \approx 18.85 ]
然后根据零极点对消条件:
[ K_{ic} = K_{pc} \times \frac{R}{L} ]
如果(R = 0.1\Omega),则:
[ K_{ic} = 18.85 \times \frac{0.1}{0.003} \approx 628.3 ]
仿真验证时,给一个阶跃电流指令(比如从0到10A),观察dq电流的响应曲线。好的响应应该是峰值时间在1ms左右,超调量不超过5%,稳态误差为零。如果你的响应曲线出现明显的超调或者振荡,优先检查解耦补偿项有没有接反符号,再检查PWM调制有没有加入死区导致的波形畸变。如果出现电流始终无法跟踪指令,大概率是坐标变换中旋转角方向搞反了,或者(\sin/\cos)模块的输入角度单位选错了。Sysplorer里三角函数默认使用弧度,你如果把角度值直接用成度数,整个系统都会错乱。
3.4 PWM调制与外环控制的衔接
在Sysplorer里搭建PWM调制有两种常用方式。一是用内置的PWM发生器模块,设置载波频率和调制波类型,然后把调制波端口连接到电流环输出的电压指令上。二是自己搭建一个三角波比较模块,即用一个高频三角波信号和调制波信号做比较,输出逻辑电平控制开关管。
我推荐第一种,因为内置模块经过验证,数值稳定性和执行效率都更高。但要说清楚的是,PWM调制生成的开关信号是逻辑信号,而逆变器桥臂的开关模型是电气信号,这中间也需要用接口模块转换。在Sysplorer里做这个连接时要留意信号类型匹配,否则无法正常仿真。
电流环之外,如果仿真的是完整的光伏并网系统,那还需要外环功率控制来生成(i_d^)和(i_q^)。常用的控制方式是:直流母线电压外环通过PI产生有功电流指令,无功电流指令由功率因数或无功功率指令决定。在光伏场景下,MPPT算法给出的功率参考值经功率控制环映射为电流指令。这里我用的MPPT是扰动观察法,它的思路是每隔一个固定周期给电压一个小的扰动,然后比较前后功率大小,如果功率增加了就继续同方向扰动,减少了就反向。在Sysplorer里实现起来也不难,几个比较器和延时模块就能搭起来,但要注意的是MPPT的扰动步长和扰动周期要和电流内环的响应速度匹配,否则整个系统会表现出“内外节奏失调”的问题。
4. SMIB电网模型与光伏阵列的搭建细节
4.1 SMIB三相电压源与线路阻抗的设置
系统模型的另一大块是电网侧和光伏侧。SMIB在这个仿真里的实现可以用一个理想三相电压源来表示,线电压有效值设为380V,频率50Hz,相位0度。在Sysplorer里设置三相电压源时,有三个参数需要正确填写:幅值(这里填线电压有效值380)、频率(50)和初相位(0)。如果你把幅值误填成相电压幅值311,会导致后续功率数据全都对不上。
从逆变器交流侧到无穷大母线之间,需要串联一段线路阻抗。这个阻抗的设置直接影响电流环控制对象的参数。通常取每相0.5mH电感和0.1Ω电阻,但要注意这个阻抗是加在SMIB电网内部的,而逆变器的滤波电感是加在逆变器侧的,二者在物理模型里是串联关系,但在控制模型里要区分清楚:滤波电感参与了电流环的解耦和前馈计算,电网阻抗则只影响PCC点电压。
关于PCC点的处理,在SMIB模型中它既是逆变器输出电流的测量点,也是PLL锁相电压的采样点。如果你把PLL接在无穷大母线电压上而不是PCC点电压上,会忽略掉线路阻抗上的压降,导致相位估计偏差。这一点是很多初学者容易忽视的,也是最容易造成仿真结果与理论分析对不上的原因之一。
4.2 光伏阵列模型的选择与参数配置
在Sysplorer的库里面,光伏阵列模型一般有两种:一种是详细的物理模型,基于二极管的等效电路方程描述,需要输入光照、温度以及阵列的电气参数;一种是简化的功率源模型,直接给定直流功率输出。做并网逆变器控制仿真时,我建议控制回路不要直接耦合光照和温度的动态变化,而是先用简化的功率源模型把逆变器和并网控制调通,再换详细的物理模型去做MPPT验证。
这里有一个比想象中更容易出问题的地方:光伏阵列的输出特性是一个非线性曲线,如果你给MPPT发的电压指令超出了阵列实际能输出的最大电压范围,那MPPT就会跑到电压限制边界上去来回振荡,进而影响直流母线电压和逆变器输出功率。在做SMIB并网仿真时,我给光伏阵列的配置是:开路电压800V,短路电流30A,最大功率点电压约640V,最大功率点电流约36A,MPPT初始电压设在500V。这样让MPPT有足够空间去爬坡搜索,而不会一开始就顶到边界。
4.3 直流母线电容与电压外环的配合
直流母线电容的大小决定了电压外环的动态响应能力。在SMIB仿真中,电容取2000uF到4000uF是比较合理的范围。取小了,直流电压纹波大,MPPT搜索时电压波动可能触发过压保护;取大了,电压外环响应变慢,负载突变时直流电压跌落时间变长。
电压外环PI参数的设计思路与电流内环相似,但带宽要低一个数量级。电流内环带宽设计在1kHz,电压外环就按100Hz到200Hz来设计。电压外环的输出就是有功电流指令(i_d^)。这里有一个工程细节:电压外环PI输出后要加一个限幅器,把(i_d^)限制在逆变器允许的电流范围内,否则电网故障或负载突变时,电流指令冲得太猛可能导致过流。
5. 调试实录:我在项目中踩过的那些坑
5.1 坐标变换方向接反引发的“电流发散”
第一次搭完整个闭环模型,满怀信心地点击运行,结果图像上的dq电流在0.1秒内直接冲到了几万安培。第一时间怀疑PI参数错了,排查了半天,最后发现是Park变换矩阵中(-\sin)项的位置放反了,导致整个旋转变换方向反了。PI控制器把符号反了的电流误差放大,形成了正反馈。
这个失误值得说一下定位方法。在Sysplorer里,你可以直接在Park变换模块的输出端加一个示波器,观察未接入闭环时(开环状态)dq轴电流是否正常。如果开环时dq电流就是振荡或发散的,说明坐标变换或旋转角方向有问题,先不要去动PI参数。我在调试时还会在PLL输出的(\hat{\theta})前加一个常数偏移量,人为设置一个小角度误差,看看dq电流的响应是否与理论分析一致。这个方法可以用来验证正弦余弦模块的符号和角度单位是否正确。
5.2 仿真速度异常缓慢的瓶颈定位
跑一个5秒的仿真,Sysplorer可能需要二三十分钟,这显然不能接受。我检查后发现,问题出在PWM模块的开关频率和仿真步长的配合上。当仿真步长设得过大时,PWM的开关边沿不能被精确捕捉,系统就必须在每一步内做多次迭代,导致步长被自动压缩得极小,仿真时间呈指数级增长。
解决方法是把仿真步长固定为开关周期的1/50,也就是PWM载波频率10kHz时,步长设为2微秒。这样既保证了开关动作的捕捉精度,又不会因为自动变步长机制反复试错浪费大量时间。还有一个优化点是把PLL和电流环的采样频率设置成相同的值,避免多个不同频率的执行块之间产生时间插值开销。Sysplorer里支持对控制子系统设置独立的采样频率,用固定步长仿真时可以明显感觉到速度提升。
5.3 逆变器并网瞬间冲击电流问题
在SMIB仿真中,逆变器一开始是空闲状态,输出电压为零。合闸并网瞬间,电网电压和逆变器输出电压之间存在巨大压差,如果没有做预同步处理,冲击电流轻易能达到额定电流的5到10倍。我在模型里做了两步:第一步,在PLL输出后加一个软启动斜坡,让参考相位从0慢慢逼近电网相位;第二步,在电流指令端加一个1秒的斜坡上升时间,让功率从0逐渐爬到额定值。这两个措施叠加后,并网瞬态电流冲击被控制在了额定电流的1.2倍以内。
这个经验对于任何做过并网逆变器调试的人来说都不陌生,但在仿真里很多人会因为“反正只是仿真”而忽略它。其实在Sysplorer里如果不处理这个问题,不仅电流波形难看,严重的还会因为数值振荡导致仿真中途报错退出。把并网时序处理好,后面的动态分析才有意义。
5.4 仿真波形与理论计算对不上的排查思路
经常有人问:理论算出来dq电流稳态应该是某个值,但仿真波形总差一点,不是偏大就是偏小,还带点纹波。这里我总结了常见的三种原因。第一种是测量点位置不对:电流测量模块如果放在滤波电容与电网阻抗之间,那测到的电流包含电容的充放电电流,和控制器反馈的电流不是同一个值;第二种是三相测量模块的参考方向反了,尤其是电流方向,控制器反馈的如果是负电流,PI整定出来的控制量完全不可用;第三种是PWM死区的影响,如果逆变器开关模型包含死区时间,输出电流会有谐波偏置,这在高功率工况下尤其明显。
我的排查顺序是:先看dq电流稳态平均值与指令值的偏差方向,偏差固定为正或负,优先查测量参考方向;偏差随负载变化,优先查线路阻抗压降是否没被补偿;波形上有明显的6倍频纹波,优先查死区效应;波形上有等幅振荡,回到PLL和电流环的相位裕度检查。
6. 仿真结果分析与工程扩展方向
6.1 稳态与动态结果评估
我跑完的标准工况是:光伏阵列输出功率30kW,SMIB线电压380V/50Hz,逆变器开关频率10kHz,滤波电感3mH,直流母线电压750V。稳态结果如下:并网点功率因数0.99以上,直流电压纹波小于3%,dq电流稳态误差小于0.1A,PLL稳态相位误差小于0.01弧度。这些数据说明PLL和dq电流控制的核心模块在SMIB条件下工作良好。
动态响应测试中,我把有功电流指令从0阶跃到50A,实测dq电流的响应时间约1.2ms,超调量4.5%,在一个标准之内。直流电压在MPPT搜索过程中有周期性波动,波动范围约15V,对应功率波动幅度小于3%,在光伏场景下属于可接受水平。
值得一提的是阶跃响应测试的观察方式:不要盯着三相交流电流看,一定要看dq轴分量。在dq坐标系下,控制性能一目了然,上升时间、超调量、稳态时间这些指标都可以直接测量。这在Sysplorer里做很简单,信号已经经过变换模块输出了。
6.2 从SMIB走向复杂电网场景的扩展思路
SMIB模型最大的价值在于它是“基准”:控制器在这个模型上调到的参数和结论,可以作为更复杂场景的起点。完成SMIB仿真后,以下三个方向是自然的扩展路径。
第一个方向是弱电网适应性。把SMIB的理想电压源换成带有实际阻抗的电压源,模拟电网阻抗变化对PLL和电流环的影响。你会发现,电网阻抗变大时,PLL采样到的PCC电压相位会出现偏移,系统的稳定裕度下降,这也就是国内常说的弱电网下逆变器容易振荡的问题。通过Sysplorer的扫参功能,可以快速画出不同短路比下的稳定边界。
第二个方向是电网故障穿越。SMIB条件下,可以对电网电压做暂降和对称/不对称故障设置,在Sysplorer里其实就是给电压源加一个故障时序控制。这种仿真能测试逆变器的低电压穿越能力以及控制器的响应机制,比如正序负序分离控制、限流保护策略等。这属于比基本并网控制更高阶的内容,但控制框架还是建立在PLL和dq电流环的基础上。
第三个方向是构网型控制。与跟网型控制不同,构网型逆变器不以PLL跟踪电网相位为核心,而是直接为系统提供电压和频率支撑。在Sysplorer中可以很方便地切换控制策略来对比两种控制方式的差异,同一套主电路模型不需要改动太多。
6.3 对MWORKS Sysplorer体验的几点总结
从实际使用看,Sysplorer做电力电子系统级仿真已经具备了相当好的工程能力。它的图形化建模方式、器件库的覆盖面、以及后处理工具的可视化效果,基本覆盖了从方案验证到详细设计的核心需求。
相比Matlab/Simulink,Sysplorer目前的短板主要体现在两个地方。一是第三方工具箱和社区资源还不够丰富,遇到冷门问题能查到的参考资料少,多数时候要靠自己摸索;二是求解器在强非线性场景(比如高频开关配合深度饱和)下的鲁棒性还有提升空间,偶尔会遇到需要调整求解器精度参数来换取收敛性的情况。不过,在我用过的国产系统仿真软件里,它的完成度已经算是第一梯队了。
如果你是从Simulink迁移过来,建议不要试图找到完全一一对应的模块,而是按照“电气主电路+控制电路”的框架重建模型。我在迁移过程中最大的感受是,Sysplorer的连线式建模比Simulink的块式建模在电气部分更直接,但在控制算法部分,模块之间的层级管理要花点心思维护,规范命名和注释会让你后面的调试过程轻松得多。
回到这个项目本身,用MWORKS Sysplorer做光伏逆变器并网SMIB仿真,把PLL锁相环和dq电流控制这两个核心环节吃透,其实你就已经摸清了并网逆变器控制的绝大部分门道。后面无论往弱电网、故障穿越还是构网型方向走,本质上都是在这个框架上做加减法。我个人在跑完这套仿真之后,最大的体会是:控制算法在纸面上画起来很规整,但一直到它在仿真环境里和主电路模型真正闭环稳定运行起来,你才算真正理解了它。Sysplorer算是个能帮你快速把这层“纸面理解”变成“实际理解”的工具,这也正是这类仿真的意义所在。