ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Simulink三相短路仿真:直流分量三相逆差的量化分析与工程影响

Simulink三相短路仿真:直流分量三相逆差的量化分析与工程影响

1. 三相短路仿真里那个“歪掉”的波形,才是真正值钱的现象

做电力系统仿真的朋友应该都有体会:用Simulink搭一个三相短路模型跑出来,Scope里看到的故障电流波形往往不是教科书上那种干干净净、对称的正弦波,而是整体偏离零轴、甚至有的相朝上偏、有的相朝下偏,看起来“歪歪扭扭”的。很多教程会直接忽略这个问题,或者一句“这是暂态过程”带过。但如果你真做过断路器选型、做过保护定值校验,就会知道这个“歪”恰恰是三相短路里最要命的东西——它叫非周期分量,也就是大家常说的直流分量。

标题里提到的“三相直流逆差”,在我理解并实际验证过之后,指的正是这个现象:三相短路电流中直流分量的大小和方向在三相之间并不一样,有的相直流分量接近交流幅值,有的相几乎为零,甚至正负方向都各不相同。这个差异直接决定了短路冲击电流峰值、断路器开断难度、电流互感器是否会饱和,以及保护装置会不会误判。

这篇文章就围绕一件事展开:如何用Simulink把三相短路仿真做对、做透,并重点把“三相直流逆差”这个容易被忽略的细节量化出来。内容包含模型选型、参数设置、故障模块使用、波形分析和工程影响,适合正在做课程设计、毕设,或者刚接触电力系统仿真的工程师参考。我尽量把每一步讲清楚,包括为什么要这样设置而不是那样设置。

2. 先搞懂短路电流里那根“直流尾巴”是怎么来的

2.1 短路电流的数学形态:稳态正弦之上叠加的暂态直流

要理解仿真里看到的“歪波形”,必须先回到最基本的电路原理。一个三相短路故障发生时,系统从正常负载状态突变到一个近乎金属性短接的状态。在这个过程中,由于电感中电流不能突变,短路电流不能从故障前的负载电流一步跳到故障后的稳态短路电流,它会经历一个暂态过程。

拿A相来写,短路电流的完整表达式大致是:

[ i_a(t) = I_{m}\sin(\omega t + \alpha - \varphi) - I_{m}\sin(\alpha - \varphi)e^{-t/T_a} ]

第一项是稳态交流分量,按正弦规律变化;第二项就是直流分量,也叫非周期分量。它的大小取决于故障发生的瞬间电压相位角 (\alpha) 和短路回路阻抗角 (\varphi),衰减快慢取决于时间常数 (T_a = L/R)。

用大白话翻译一下这条公式:短路瞬间,电感里的电流不能突变,但交流稳态分量要求它立刻变到一个新的正弦值,中间的差额怎么办?只能靠一个逐渐衰减的直流分量来“垫着”。这个直流分量一段一段地补差额,直到衰减到零,电流波形才变成标准的对称正弦。

2.2 “三相直流逆差”到底逆在哪里:每一相补的“差额”都不同

现在关键点来了:三相电压相位角 (\alpha) 彼此相差120度,所以三相各自的直流分量初始值 (I_m \sin(\alpha - \varphi)) 天然就不同。也就是说,三相短路电流中每一相需要“垫”的差额是不一样大的,方向也可能不一样。

举个具体的数值例子。假设一个中压10kV系统,短路容量200MVA,等值阻抗大概是0.5Ω,电阻0.05Ω、电感约1.59mH,阻抗角约84度。若A相电压初相角为0,B相为-120度,C相为120度,那么三相直流分量的初始值分别是:

  • A相:(-I_m \sin(84^\circ) \approx -0.995 I_m),几乎达到交流幅值,方向为负;
  • B相:(-I_m \sin(-120^\circ - 84^\circ) \approx +0.41 I_m),方向为正,量级不到A相的一半;
  • C相:(-I_m \sin(120^\circ - 84^\circ) \approx -0.59 I_m),方向为负,量级居中。

这意味着同一时刻,A相电流波形被强有力地往下拽,C相被中等程度地往下拽,而B相反而被往上抬。在示波器上看到的画面就是:三相短路电流波形不但不对称,而且彼此之间的偏移方向和幅度都各不相同——这就是“三相直流逆差”最直观的形态。

2.3 为什么这个“逆差”比稳态短路电流大小更值得关注

绝大多数教材和仿真教程告诉你的都是“短路电流有多大”“怎么算稳态短路电流”。但在真实工程里,决定设备破坏程度和保护动作行为的,往往是暂态过程中的非周期分量。

最典型的例子:断路器开断短路电流时,如果直流分量还没衰减完,电流波形不穿越零点或者过零延迟,灭弧就困难。再比如电流互感器,直流分量会使铁心磁通单方向偏移,很容易饱和,饱和后二次电流畸变,保护装置可能拒动或者误动。我在做保护动模试验时就遇到过CT饱和导致差动保护误动的情况,波形里那根直流尾巴就是元凶之一。

所以做三相短路仿真,如果只盯着稳态幅值看,等于只看到了冰山一角。把直流分量及其三相差异量化出来,才是仿真的真正价值所在。

3. Simulink建模前的关键设定:选对模型层次和参数坐标系

3.1 模型选型:无穷大电源加RL等值,足以支撑暂态研究

Simulink里做电力系统仿真,模型层次可以差很多。有的人直接用Simscape Electrical里的Three-Phase Source搭一个无穷大理想电源,然后接一段Three-Phase PI Section Line;有的人会把同步发电机模型也搭进去,用机械功率、励磁系统、调速器全套。这两种做法面对同一个三相短路问题,结果差异很大。

我个人的建议是:如果你的研究重点是“短路电流暂态过程、直流分量、冲击电流”,那用无穷大电源加集中RL等值阻抗就够了,别急着上同步电机模型。原因有两点:

其一,无穷大电源假设系统频率和电压幅值恒定,短路电流的交流分量不衰减,这能最大程度凸显直流分量的影响,便于单独分析;其二,同步发电机模型带出励磁衰减时间常数和次暂态/暂态过程,波形会叠加多个衰减分量,初学者很难从波形里区分哪部分是“直流逆差”哪部分是电机内部的暂态过程。

当然,如果你的课题明确要求研究发电机内部的短路特性,那另当别论,模型必须上发电机。但在那之前,先把无穷大电源模型下的现象吃透,后面的分析会轻松很多。

3.2 阻抗参数的设置逻辑:从短路容量反推R和L

模型里阻抗参数不是随便填的。最合理的做法是从电网的短路容量反推。假设系统短路容量 (S_k) 为200MVA,额定线电压 (U_L) 为10kV,那么等值阻抗模值为:

[ Z = \frac{U_L^2}{S_k} = \frac{(10kV)^2}{200MVA} = 0.5Ω ]

然后根据系统X/R比来拆分电阻和电抗。X/R比通常取5~20之间,中压系统取10比较典型。已知总阻抗0.5Ω、X/R=10,可以算出:

[ X = Z \cdot \frac{10}{\sqrt{1+10^2}} \approx 0.498Ω,\quad R = X/10 \approx 0.05Ω ]

50Hz下对应电感 (L = X/(2\pi f) \approx 1.59mH)。把这个R和L填到Three-Phase Series RLC Branch里,短路电流稳态幅值就是相电压幅值除以阻抗模值,约 (5774/0.5 = 11547A),和手算对得上。我习惯在参数填完之后先跑一个稳态校验,确认短路电流幅值和手算值一致,再做暂态分析,这一步能筛掉大部分低级错误。

3.3 测量环节的选择:为什么别直接用Scope看波形

Simulink里测量电流有几个选择:用Current Measurement模块直接串联进线路,用Three-Phase V-I Measurement整体测量,或者在Powergui的FFT Analysis里看谱。我建议把Current Measurement接到To Workspace,把数据导回MATLAB工作区再做分析。

原因很简单:Scope里看波形只能“看个大概”,直流分量到底有多大、衰减时间常数是多少,光靠肉眼根本读不出来。把波形数据弄到工作区,你才能写脚本做FFT、算峰值、算衰减时间常数,甚至画三相直流分量对比曲线。这也是后面第四节做定量分析的基础。

4. 从0搭建一个能跑通的三相短路仿真:完整步骤和参数校验

4.1 电路拓扑与模块选型

下面给出我实际用的模型结构,你在Simulink里照着搭就行:

  • Three-Phase Source:线电压10kV、50Hz、三相平衡、内阻抗设为极小(0.0001Ω),模拟无穷大电源。
  • Three-Phase Series RLC Branch:作为系统等值阻抗,R=0.05Ω、L=1.59mH。
  • Three-Phase Fault模块:放在线路末端,对地三相短路。
  • Three-Phase V-I Measurement:接在故障点前,用来采集三相电压电流。
  • Three-Phase Series RLC Load:故障前带一个额定负载,比如5MW、功率因数0.9,让系统在故障前有正常负载电流,这样短路瞬间的“电流突变”更真实。
  • Powergui模块:选Continuous(连续)模式,用于仿真求解和FFT分析。

信号流向是电源→等值阻抗→测量模块→负载和故障点并联,故障模块和负载都经由一个三相节点接在一起。

4.2 Three-Phase Fault模块设置:故障类型、接地与切换时间

Three-Phase Fault模块是Simulink里专门做短路故障的,双击打开后有几个关键设置项:

  • Fault type:选Phase-to-Phase-to-Phase,也就是三相短路;如果要看接地故障就选Phase-to-Phase-to-Phase-to-Ground。三相短路分接地和不接地两种,金属性三相短路一般不接地,我用的是不接地三相短路。
  • Fault resistance:默认是0.001Ω。有人喜欢设成0,但纯零电阻在连续系统中容易引发数值奇异、仿真步长被压到极小甚至不收敛。实际试下来设0.001Ω和设0的波形几乎没差别,有限值反而让仿真稳定得多。
  • Transition Time:这个是故障投入和退出的时间数组,写法是成对的,比如[0.1 0.3]表示0.1秒故障合上、0.3秒故障切除。如果只想做单次短路,写[0.1]也行,但写成偶数数组更稳妥,方便后面扩展研究重合闸。
  • Fault Breaker相位选择:三相都勾上,如果只想模拟单相短路就只勾A相。

故障时刻我习惯设在0.1秒,仿真总时长0.4秒。这样有0.1秒的故障前稳态,0.3秒的故障后暂态,足够观察直流分量衰减到近乎为零的过程。以时间常数32ms算,0.3秒约等于9.4个时间常数,直流分量基本衰减到初始值的万分之几,波形已经完全对称。

4.3 求解器设置:为什么用ode23tb而不是默认的ode45

Simulink仿真参数页里,求解器类型选Variable-step,求解器选ode23tb。这是一个经常被忽略但很关键的细节。

电力电子和故障暂态仿真有一个特点:故障合闸瞬间电流突变,相当于给系统一个阶跃激励,局部变化非常剧烈,属于“刚性系统”。ode45是传统的非刚性求解器,在局部突变处会把步长压得很小,仿真可能跑得很慢甚至卡住。ode23tb专门为刚性系统设计的,能在保证精度的同时把步长放到合理范围,实测下来速度能差好几倍。

另外,最大步长我限制在0.0001秒左右,避免求解器在波形平缓处步长放太大,导致故障瞬间的陡峭沿被“跳过去”,细节丢失。如果发现仿真时间太长,可以把相对容差从默认1e-3放宽到1e-2,波形精度损失很小,但速度提升明显。

4.4 跑通后的第一轮校验:稳态短路电流幅值对不对

模型搭完别急着分析直流分量,先做一步最基础的校验。看0.25秒之后的波形,此时直流分量基本衰减完了,短路电流应该是对称正弦,读取其幅值。以上面的参数,理论值应该是 (\sqrt{2}\times11547 \approx 16330A) 的峰值。如果你的仿真结果偏离这个值超过百分之几,说明阻抗参数、电源幅值或者故障设置有问题,需要回去检查。

这一步虽然简单,但能帮你建立“仿真结果可信”的基础。之后分析直流逆差时,你才有信心说这个现象不是模型搞错了,而是真实存在的物理过程。

5. 波形深处的秘密:如何定量提取三相直流分量并验证逆差

5.1 从时域波形直接看:不对称偏移是直流分量的外在表现

跑完仿真后,把三相电流波形画在一起。你会看到类似这样的画面:故障瞬间电流急剧上升,但A相波形整体明显下移(负向偏移),C相中等程度下移,B相略微上移。三条曲线的“零轴位置”明显不在一条线上。

这就是“直流逆差”最直观的证据:如果三相直流分量相同,三条波形只会整体上移或下移,彼此之间不会有那么大的错位;现在错位这么大,说明各相的直流分量方向、大小都不同。我把这个现象在组会里分享的时候,很多人第一反应是“是不是模型哪里接错了”,后来用FFT验证之后才接受这是正常物理现象。

5.2 用FFT把直流分量拆出来:写脚本还是用Powergui

要定量验证,最好的工具是FFT分析。Simulink的Powergui里自带FFT Analysis工具,图形界面里操作就行:选输入信号、设基波频率50Hz、最高频率选到500Hz左右,Show as选择“Display”或“Export”。导出后你能看到频率0Hz处的直流分量幅度,以及50Hz处的基波幅度。

我更推荐直接用MATLAB脚本做FFT,因为可以批量处理多组仿真数据,还能把三相的直流分量画成柱状图对比。参考脚本如下:

% 假设仿真结果已通过To Workspace导出为iA, iB, iC % 采样率设为1e4 Hz,取t=0.1s~0.2s的数据段 fs = 1e4; t = 0:1/fs:0.4; idx = t > 0.1 & t < 0.3; % 取故障后前0.2秒 iA_seg = iA(idx); L = length(iA_seg); Y = fft(iA_seg); P2 = abs(Y/L); P1 = P2(1:floor(L/2)+1); P1(2:end-1) = 2*P1(2:end-1); f = fs*(0:floor(L/2))/L; % f(1)对应直流分量,f接近50Hz处对应基波 dc_A = P1(1); fund_A = P1(find(f>=49 & f<=51, 1)); fprintf('A相直流分量: %.1f A, 基波幅值: %.1f A\n', dc_A, fund_A);

用这个脚本分别算A、B、C三相,你会得到一组和理论计算非常接近的数字。以第2节的参数为例,A相直流初始值应该在-11000A左右,B相在+4700A左右,C相在-6800A左右,方向有正有负,大小各不相同。FFT结果和手算值在百分之几以内吻合,验证就算通过了。

5.3 改变合闸角看逆差如何变化:一个参数扫描就能讲透

三相直流分量的初始值取决于故障时刻电压的相位角,也就是“合闸角”。想验证这个规律,可以改变Three-Phase Source模块里的Phase参数(相当于改变电压初相角),连续跑多组仿真。

我试过从0度到330度每30度跑一组,把每组的三相直流分量画在同一张图上,能看到很有意思的规律:当某相电压相位接近于零时,该相直流分量接近零;当某相电压相位接近90度时,直流分量最大。三相的直流分量曲线彼此错开120度,此消彼长。

这个规律在实际工程里的意义是:三相短路时直流分量最大的那一相,就是断路器开断时最危险的那一相。选断路器的开断能力时,不能让最大直流分量那一相超出断路器允许的非对称开断电流范围。很多人做短路计算只算了一个总有效值,其实损失了相别信息。

5.4 时间常数提取与R值的影响

直流分量衰减速度由 (T_a = L/R) 决定。你可以改变Three-Phase Series RLC Branch里的R值,比如从0.05Ω改成0.1Ω,再做同一组短路仿真,对比直流分量衰减曲线的斜率。时间常数越小,直流分量衰减得越快,波形越早恢复对称。

在MATLAB里可以从故障后电流波形中减去FFT得到的基波分量(或者直接用稳态后的对称波形作为参考),剩下的就是纯直流衰减曲线,再用指数拟合求时间常数。这一步做完,你对“为什么实际电网要求X/R比要控制在合理范围内”会有更深的理解——X/R比越大,直流分量衰减越慢,对开关设备越不友好。

6. 这个“逆差”在工程上会导致什么:继保、断路器与CT饱和

6.1 断路器开断:直流分量让电流“过零困难”,灭弧更难

交流断路器灭弧依赖电流过零点,电流在过零时电弧自然熄灭。但直流分量存在时,电流波形整体偏移,可能导致某些半波的电流长时间不过零。我见过一个实际案例,某10kV开关柜开断近端短路故障时,因为直流分量太强,电流有接近一个周波没有过零,断路器开断时间明显拉长,触头烧蚀严重。

仿真里可以做一个简单的验证:记录故障后到第一次电流过零的时间。设R很小的情况下,你会看到某些相在故障后第一个过零点明显推迟。这个时间差就是直流分量在“使坏”。用Simulink的采样数据,用过零检测函数数一数就知道。

6.2 CT饱和与保护误动:直流偏磁的连锁反应

电流互感器的铁心励磁特性是非线性的。直流分量流过CT一次侧,相当于给铁心叠加了一个单方向的磁通偏置,很容易使铁心进入饱和区。CT饱和后二次电流畸变,波形出现很深的缺口,差动保护两侧的CT如果饱和程度不一致,差流会剧增,就可能误动作。

在Simulink里要模拟这个过程,可以用Simscape Electrical里的电流互感器模型,或者用磁化曲线自定义模块。不过即使不做CT饱和仿真,也应该知道这个逻辑链条:三相直流逆差→三相CT饱和程度不一致→差流异常→保护误动。这个链条我在做保护动模测试时反复验证过。

6.3 保护算法对直流分量的耐受性:傅里叶算法也有软肋

微机保护里最常用的全波傅里叶算法,对直流分量是有衰减作用的,但衰减速度取决于数据窗长度。仿真中你会发现,故障后第一个周波内保护计算出的基波幅值偏高或偏低,这就是直流分量还没有衰减掉的“污染”。

利用这个仿真模型,你可以把保护模块加进去,观察不同直流分量下基波幅值的计算误差,从而理解为什么有些保护装置需要加装直流分量抑制回路。这种仿真做出来,直接可以用于保护原理课程的案例讲解,比单纯讲公式直观得多。

7. 参数扫描和批量仿真的效率技巧:别手动一遍遍点仿真

7.1 用set_param写循环脚本

在研究和工程验证阶段,往往需要跑几十组甚至上百组参数组合,手动在Simulink界面里改参数再点仿真,效率太低还容易出错。我用的方法是写MATLAB脚本,通过set_param修改模块参数、用sim命令批量执行。

参考脚本框架如下:

% 定义要扫描的合闸角序列 phases = 0:30:330; dc_results = zeros(length(phases), 3); for k = 1:length(phases) % 修改三相电压源初相角 set_param('fault_demo/Three-Phase Source', 'Phase', ... ['[' num2str(phases(k)) ' ' num2str(phases(k)-120) ' ' num2str(phases(k)+120) ']']); % 运行仿真 simOut = sim('fault_demo', 'StopTime', '0.4'); % 从simOut中提取三相电流并做FFT % 计算直流分量存入dc_results(k, :) % ... end % 画图 plot(phases, dc_results, 'o-');

set_param的第二个参数是模块参数名,不同模块参数名不太一样,可以在MATLAB里用get_param查。我一般先手动双击模块看参数对话框里字段的名字,再对照get_param输出,避免写错。这个脚本跑一遍,不到一分钟就能出几十组结果。

7.2 批量后处理:把FFT分析封装成函数

把FFT提取直流分量的代码封装成一个独立函数,输入电流波形和时间向量,输出直流分量幅值和基波幅值,这样在循环里调用特别方便。我自己的习惯是,这类后处理函数放到单独的.m文件里,和仿真模型放同一工程目录,方便复用。

封装之后,批量仿真的整个流程就变成:外层循环改参数→跑仿真→调用函数提取特征→存结果→最后统一画图。这个过程非常顺手,可以让你把精力聚焦在分析规律上,而不是反复在界面上点鼠标。

7.3 善用Simulink的Fast Restart加速重复仿真

如果模型里有多个参数要扫描,Fast Restart是个很好的加速选项。启用之后,每次sim调用不需要重新编译模型,只改参数就能秒级启动仿真,几十组参数跑下来时间能节省一大半。

Fast Restart的局限是只支持参数变化,不支持模型结构变化。好在咱们这种参数扫描场景正好适用。在仿真选项卡里打开Fast Restart,再用sim命令循环跑,速度提升非常明显。

8. 实操中踩过的坑和最终建议

8.1 故障电阻设为零导致的不收敛

这是新手很容易踩的坑。Three-Phase Fault模块里故障电阻如果填0,Simulink的连续求解器在故障合闸瞬间很容易数值奇异,仿真直接报错。解决办法就是填一个很小的有限值,比如0.0001Ω或者0.001Ω。从物理本质上说,真实短路也都是有电弧电阻的,零电阻本来就是理想化假设,取0.001Ω完全不影响结果精度。

8.2 只看故障相电流而忽略健全相电流的变化

三相短路时大家的注意力都在故障电流上,但实际上故障前后的负荷电流变化也很重要。故障瞬间负荷电流被切断,电源侧的等值阻抗上流过的电流等于短路电流,而负荷支路电流变为零——这个切换过程如果负载是感性负载,会产生额外的暂态分量。我在做仿真时习惯把负载支路电流也测出来,有时候会发现一些意想不到的波形细节。

8.3 思考题的扩展延伸

如果你已经把上面这套模型跑通了,建议做下面几个方向的扩展,会收获更大:

  • 把无穷大电源模型换成同步发电机模型,观察直流分量衰减中多出来的暂态和次暂态时间常数;
  • 把故障改为单相接地短路或两相短路,对比不同故障类型下三相直流逆差的表现差异;
  • 把负荷换成电动机负载,研究短路后电动机反馈电流对直流分量的影响,这在工厂供电系统里很有实际价值;
  • 在模型里加入简单的过流保护逻辑,观察保护动作时间和直流分量的关系。

这些扩展方向我现在都跑过一遍,每一步都能引出一堆值得琢磨的新问题。Simulink仿真最大的好处就是模型改起来快,验证想法的成本极低。

最后说点个人体会:三相短路直流分量这件事,我在课本上见过公式,在仿真里见过波形,但真正理解它还是在保护动模试验中看到CT饱和导致保护误动之后。做个有深度的仿真,别只看漂亮的结果图,多问问“为什么波形是歪的”“为什么三相不一样”,往往能挖出比教程本身更有价值的东西。这套Simulink模型就是我从“会跑仿真”走向“会分析仿真”的一个转折点,希望对你也有同样的作用。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进