去年做并网充电装置仿真时我把一个自认为很成熟的Simulink三相整流模型直接丢进电网电压不平衡工况结果直流母线电压波形抖得像心电图的P波高尖网侧电流也开始明显偏相。后来把正负序分离加进控制链路问题才真正收住。如果你也想在Simulink里复现这套基于正负序分离的充电策略这篇内容可以当一份操作笔记来用从为什么必须做分离、分离模块怎么搭、控制环怎么连、参数怎么整到调模型时踩过的几个坑我都会按实际推进的顺序写出来。它适合对Simulink有基础操作、但对电力电子控制策略还不熟的人也适合正在做并网或充电类仿真项目的同学拿来对照。1. 电网不平衡下充电装置到底在“扛”什么1.1 三相不平衡的现场来源与典型场景很多人做仿真习惯用理想三相电压源幅值一致、相位严格相差120°控制策略怎么跑都好看。但现场工况完全是另一回事。充电桩所在站点的低压母线往往同时挂着照明、空调、监控、光伏逆变器表面上是三相系统实际单相负载大量存在某相电流天然就比其他相大。线路阻抗不对称、变压器绕组接线方式、甚至站内多台整流设备同时启动都会让公共连接点的三相电压幅值不再相等、相位不再严格120°。更常见的是电压暂降场景。比如某相发生接地故障保护动作切除期间剩余两相电压升高故障相电压跌到正常值的30%到80%之后系统恢复。对充电桩这种电力电子装置来说恢复过程一旦处理不好电容过压、过流保护动作、甚至直流母线损坏都有可能。还有分布式光伏以单相逆变器形式接入局部反送功率会让某一相电压偏高。可以说三相不平衡不是“偶发异常”而是低压配网里的常态。1.2 不平衡带来的三个层次危害第一个层次是交流侧负序电流。三相PWM整流器在理想对称电网下工作网侧电流三相平衡一旦电压出现负序分量如果不加抑制整流器电流就会跟着不对称某相电流峰值显著抬高开关管电流应力不均容易触发过流保护或烧毁器件。第二个层次是直流侧二次纹波。电压负序分量与电流正序分量相互作用会形成2倍工频的瞬时功率波动。50Hz系统就是100Hz的功率脉动反映到直流母线就是100Hz电压纹波。这个纹波会加速电解电容老化影响后级DCDC充电模块的稳定电池端电流也会跟着出现低频脉动。持续的二次纹波还会让充电策略中的电压环“手忙脚乱”严重时产生振荡。第三个层次是锁相环的“视力模糊”。常规SRF-PLL锁相环的前提是三相电压对称一旦不平衡锁出的相位中会掺入2倍频振荡分量。控制器利用这个相位做坐标变换正序dq轴电流里就会残留交流分量负序dq轴分量也无法正确解耦。控制器的带宽再高也压不住这种结构性的误差。我当年调试时最先看到的表象就是直流母线纹波异常和电流偏相。当时没有直接往负序方向想先调了好几天PI参数加滤波器效果都一般。后来才意识到问题不在控制器的参数而在控制器的“坐标系本身就不干净”。这也是为什么正负序分离不是可选项而是必选项。2. 正负序分离的“数学牌”怎么打2.1 对称分量法三序分解的基本逻辑任何一组不对称的三相相量都可以分解成正序、负序、零序三组对称相量。定义旋转因子 (a e^{j120°} -0.5 j0.866)则三相电压的相序分量为[ \begin{bmatrix} \dot{U}{A1} \ \dot{U}{A2} \ \dot{U}_{A0} \end{bmatrix}\frac{1}{3} \begin{bmatrix} 1 a a^2 \ 1 a^2 a \ 1 1 1 \end{bmatrix} \begin{bmatrix} \dot{U}_A \ \dot{U}_B \ \dot{U}_C \end{bmatrix} ]正序分量的相序是A-B-C负序分量的相序是A-C-B零序分量三相同相位。对三相三线制系统来说因为没有中性线提供零序通路零序分量为零所以只需要分离正序和负序两层就够了。这是简化问题的关键不要一上来就对着三序公式犯怵三相三线制系统只需要两路通道。2.2 常用分离方法的横向对比在Simulink里做正负序分离常见的有四种路子优缺点差异很大。做选型之前先搞清楚自己的需求是要快速验证控制策略还是要贴近工程实现是要应对谐波环境还是只在纯工频下跑方法实现复杂度动态响应频率适应性适用场景低通滤波法最低慢有相位延迟差工频稳定、对动态无要求T/4延时法低中等有固定1/4周期延时对频率偏移敏感数字控制中常用适合基波分离SOGI正交信号法中等较快较好可锁定中心频率工程实际首选兼具滤波能力DDSRF双同步坐标系高最快最好高性能控制适合主控性能强的场合低通滤波法最直观把αβ静止坐标系下的电压分量通过低通滤波器提取基波再经过延时重构正负序。但低通滤波器的相位延迟会让动态响应变差控制环带宽稍微往上提就出问题。T/4延时法利用正序和负序在αβ坐标系下旋转方向相反的特点用当前值减去延时1/4周期的值再乘以相应系数即可分离。这个方法在离散控制里非常好理解也不难实现但对频率偏差比较敏感电网频率一旦偏离50Hz延时对应的角度就不准分离效果会打折。SOGI即二阶广义积分器通过构造彼此正交的两个信号来提取指定频率分量。它不仅能把正负序分离出来本身还是一个带通滤波器能抑制谐波。我可以直接给出SOGI的传递函数[ H(s) \frac{k \omega_0 s}{s^2 k \omega_0 s \omega_0^2}, \quad Q(s) \frac{k \omega_0^2}{s^2 k \omega_0 s \omega_0^2} ]其中 (\omega_0) 是基波角频率(k) 决定带宽。(H(s)) 输出与输入同相(Q(s)) 输出滞后90°构成正交对。工程上常用 (k \sqrt{2}) 附近兼顾动态和滤波。DDSRF方法则在两套同步旋转坐标系里分别锁正序和负序再通过解耦网络消除2倍频振荡动态性能最好但结构复杂度最高仿真模型容易出错。对刚接触这个领域的人来说我不建议一上来就啃DDSRF。2.3 我的选型结论与Simulink实现路径很多人会纠结“到底用哪个方法才专业”。我的建议是分两步走先在Simulink的Simscape/Electrical/Specialized Power Systems库中找到Three-Phase Sequence Analyzer模块让它直接输出正序分量和负序分量用这个搭建完整的充电策略控制模型验证控制思路是否成立。这个模块自带FFT或相量分解能力配置基频后就能输出三相正序、负序的幅值和相位非常适合做策略验证。等验证通过、确定控制逻辑没问题之后再把分离部分替换成自己搭的SOGI模块。这样做的原因是Three-Phase Sequence Analyzer适合离线仿真但它依赖傅里叶分解动态过程里的表现并不完全等同工程实现SOGI模块虽然搭建起来多花半小时但可以直接对应到嵌入式代码里后边做代码生成或者硬件在环测试时不会推倒重来。我实际推进时的顺序就是“先验证策略逻辑再替换分离算法”整体上最省时间。3. 从零搭模型主电路、分离、坐标变换一条龙3.1 模型整体架构在Simulink里搭这套系统我的习惯是把模型分成三块区域用颜色或注释框区分开主电路区三相电源、整流桥、直流电容、负载、测量与控制区电压电流采样、正负序分离、坐标变换、PI调节、调制与脉冲区SVPWM或PWM生成、脉冲分配。主电路用Simscape电气模块还是用普通Simulink模块取决于你要不要看得见细节。用Simscape/SimPowerSystems库里的Universal Bridge整流器模型可以把IGBT的通断、反并二极管、导通损耗都体现出来仿真结果更真实。但模型求解速度会慢一些调试时可以先从理想开关模型开始跑通后再换成带损耗的详细模型。负载端建议用受控电流源来模拟恒功率充电行为电流参考值等于给定功率除以直流母线电压。这里不要直接用固定电阻因为电池充电本质上是恒功率负载电阻负载会让母线电压的响应趋势完全不同控制参数整出来到现场也用不上。3.2 怎么在Simulink里构造“会呼吸”的不平衡电网不平衡电网建模是很多人忽略的第一步以为随便把三相电压源参数改一改就完事了。实际上要精确控制不平衡度最好用三个独立的单相AC Voltage Source来搭。以我经常用的一组参数为例目标相电压幅值分别设为311V、270V、295V相位分别设置为 (0°)、(-120°)、(120°)。这就对应A相正常、B相跌落约13%、C相跌落约5%的典型电压暂降工况。三个单相源串联成星形连接中性点接地或不接地取决于你要不要分析零序——三相三线制系统里通常中性点不接地这也有助于把零序分量排除在外。用Three-Phase Source统一模块也可以做通过Customize harmonic parameters或直接改幅值向量实现。但我仍然推荐单相源叠加的方式逻辑最清楚修改哪一相直接改那个模块的幅值即可。调试时把B相幅值设成变量就能扫出不同不平衡度下控制策略的表现。3.3 正负序分离模块的搭建方式用Simulink自带模块时把三相电压接到Three-Phase Sequence Analyzer的输入端在“Sequence”选项里勾选Positive和Negative基频设置50Hz。它的输出是复数形式需要在后续用Complex to Magnitude-Angle或者Real-Imag to Complex模块拆出实部虚部再接入坐标变换。我一开始没注意复数输出格式直接拿幅值当瞬时值用结果预警了好几天的波形错乱这里提醒一句注意模块库里信号的数据类型和物理含义。用SOGI自己搭分离模块时先把三相电压经过Clarke变换到αβ静止坐标系[ \begin{cases} v_\alpha \frac{2}{3}\left(v_A - \frac{1}{2}v_B - \frac{1}{2}v_C\right) \ v_\beta \frac{2}{3}\left(\frac{\sqrt{3}}{2}v_B - \frac{\sqrt{3}}{2}v_C\right) \end{cases} ]然后 (v_\alpha) 和 (v_\beta) 分别经过SOGI生成同相输出 (v) 和正交输出 (qv)。最后用下面的对称分量合成公式得到正负序分量[ \begin{bmatrix} v_{\alpha}^{} \ v_{\beta}^{} \end{bmatrix}\frac{1}{2} \begin{bmatrix} 1 -q \ q 1 \end{bmatrix} \begin{bmatrix} v_{\alpha} \ v_{\beta} \end{bmatrix}, \quad \begin{bmatrix} v_{\alpha}^{-} \ v_{\beta}^{-} \end{bmatrix}\frac{1}{2} \begin{bmatrix} 1 q \ -q 1 \end{bmatrix} \begin{bmatrix} v_{\alpha} \ v_{\beta} \end{bmatrix} ]这里 (q) 代表90°滞后算子。在Simulink里实现SOGI时可以用连续传递函数模块直接填 (k\omega_0 s/(s^2 k\omega_0 s \omega_0^2))也可以用积分器搭二阶结构。传递函数模块最简单调 (k) 和 (\omega_0) 都能在模块参数里直接改。我推荐把 (\omega_0) 设成2π乘以实际电网频率并用PLL锁出的频率信号实时更新这样电网频率有波动时分离效果也能维持。3.4 坐标变换从αβ到dq正负序各自安家分离出αβ轴的正负序分量之后要把它们分别转进各自的同步旋转坐标系。正序分量用PLL锁出来的 (\theta_1) 做Park变换负序分量的旋转方向和正序相反所以用 (-\theta_1) 做Park变换[ \begin{bmatrix} v_d^{} \ v_q^{} \end{bmatrix}\begin{bmatrix} \cos\theta_1 \sin\theta_1 \ -\sin\theta_1 \cos\theta_1 \end{bmatrix} \begin{bmatrix} v_{\alpha}^{} \ v_{\beta}^{} \end{bmatrix} ][ \begin{bmatrix} v_d^{-} \ v_q^{-} \end{bmatrix}\begin{bmatrix} \cos(-\theta_1) \sin(-\theta_1) \ -\sin(-\theta_1) \cos(-\theta_1) \end{bmatrix} \begin{bmatrix} v_{\alpha}^{-} \ v_{\beta}^{-} \end{bmatrix} ]用Simulink里的Park Transform模块时注意模块的“Rotating frame alignment”设置不同版本默认的旋转方向都不一样。负序坐标变换前最好用关于Y轴对称的负角度去驱动模块免得输出里残留交流分量。电流信号也按照同一思路处理这样正序电流dq分量在稳态下是直流量PI控制器才能无静差跟踪。3.5 SVPWM调制与脉冲输出控制环最终输出的是dq轴参考电压需要反变换回αβ静止坐标系送入SVPWM模块生成IGBT的门极脉冲。Simulink里有Discrete SVPWM Generator可以直接调用输入参考电压和直流母线电压输出六个IGBT的开关信号。这个模块内部已经包含扇区判断、矢量作用时间计算比自己手写逻辑要省事得多。用SVPWM时有一个关键设置参考电压的单位和标幺系统。很多人把PI输出的电压直接接到SVPWM模块结果发现调制波超出线性范围波形出现大量锯齿状的削顶。正确做法是根据直流母线电压把参考电压归一化到SVPWM模块要求的范围内。直流母线有100Hz纹波时调制比上限也要留出裕量我习惯限制在0.95以内。4. 充电策略控制环正序通道维持功率负序通道专门“挡刀”4.1 为什么单正序电流环压不住不平衡如果在控制策略里只保留正序dq电流环负序电压会通过整流器自然产生负序电流。负序电流本身不做功但它会占据IGBT的通流能力、增加损耗还会造成三相电流不对称。更麻烦的是电压负序分量与正序电流作用会在直流侧产生100Hz的有功脉动这个脉动通过电压外环倒灌回电流环指令让电流波形里出现明显的低频毛刺。所以正负序分离只是第一步关键是把分离出来的负序分量送进控制器让控制器“看得到”不平衡并且主动去压制它。这就是正负序双电流环的基本思路。4.2 负序电流抑制与瞬时功率恒定两种充电策略针对充电场景有两种典型的控制策略侧重点不同选择取决于你的硬件约束。策略A负序电流抑制。把负序dq电流指令都设为零负序电流环努力把实际负序电流压到零。这种策略下网侧三相电流恢复对称各相电流峰值基本一致开关管应力均匀对进线断路器、熔断器等交流侧设备友好。缺点是直流侧仍然会有100Hz功率脉动因为负序电压和正序电流之间的交互作用并没有消失。对充电策略来说直流侧纹波如果过大后级DCDC的输入电容和电池端电流都会受影响。但三相电流对称这个优势仍然让它成为很多三相PFC充电模块的默认选择。策略B瞬时功率恒定补偿。不再强制负序电流为零而是主动注入一定的负序电流用它来抵消负序电压造成的功率波动。实现上需要根据正序电压、负序电压和功率指令实时解算负序电流参考值。公式推导出来实际上是一个二维线性方程组的求解可以用Simulink里的Matrix Multiply模块配合Selector完成。这个策略能把直流侧100Hz纹波压到很小但网侧三相电流会重新出现不对称某相电流可能明显偏高对交流侧设备不太友好。从工程实践看我刚做这个方向时先用策略A至少保证整个系统不会因为电流不对称而保护动作在后续优化直流侧纹波、或者需要提高充电功率质量时再切换到策略B。两者可以共用同一套正负序双环框架只是负序电流指令的计算方式不同切换起来很方便。4.3 电流环、电压环与整体信号流整个控制环路的信号流向是这样走的直流母线电压给定 (V_{dc}^) 与实测 (V_{dc}) 的误差进电压外环PI输出作为正序d轴电流指令 (i_d^{})用于维持有功平衡和直流电压稳定。正序q轴电流指令 (i_q^{*}) 通常设为0也就是单位功率因数运行也可以根据充电策略给定无功需求。负序电流指令按策略A设为0或者按策略B由功率波动计算模块输出。正序d/q电流环和负序d/q电流环各自独立每个环都包含前馈解耦和电网电压前馈。以正序d轴电流环为例PI输出经过解耦项相加后再加上 (v_d^{}) 前馈得到正序d轴参考电压。负序环同理虽然负序指令通常为零但负序电压前馈可以减少控制器负担让负序电流环更容易把电流压住。我用过的初始PI参数供参考电流环 (Kp 0.3)(Ki 12)电压环 (Kp 0.05)(Ki 2)。这些参数只能当起点实际要根据开关频率、滤波电感和直流电容重新整定。母线电压给700V滤波电感3mH开关频率10kHz启动时按这些初值跑波形基本稳定再进一步调优带宽。5. 波形怎么读参数怎么整坑在哪里5.1 仿真结果里的几条关键波形仿真跑完后不要只看最后的结果曲线要分层看。第一步看三相电压和三相电流的原始波形确认不平衡度是否符合设置有无明显畸变。第二步看分离模块的输出正序电压dq分量在稳态下应该是平滑的直流量负序电压dq分量则应该是100Hz的正弦波动但均值接近零。如果你看到正序dq电压里出现明显的100Hz振荡说明PLL锁相或者SOGI分离环节的参数有问题。第三步看直流母线电压。策略A控制下直流母线电压会带有少量100Hz纹波这是正常现象不必当成故障去“消灭”它。但如果纹波幅值超过你设计的电容容许范围就要考虑改用策略B或者增大直流侧电容。第四步看三相电流的包络。加入负序抑制后三相电流峰值应当趋于一致如果仍然参差不齐多半是负序电流环没有闭环成功或者负序指令不是零。我做具体实验时设置B相电压跌落到正常的80%A相和C相保持311V。未加负序控制前A相电流峰值约21AB相电流只有约14AC相却有25A左右。加入负序抑制环后三相电流峰值都回到18A附近同时直流母线电压的波动从原来的约12V峰峰值降到约5V。这个对照效果非常直观仿真里先做好对照实验后面给硬件调试时就有了判断基准。5.2 参数整定与几个容易踩的坑先说SOGI的参数问题。中心频率 (\omega_0) 直接对应电网基波必须由PLL锁出的频率实时更新否则电网频率偏移一点分离出的分量就会带有缓慢的旋转误差。阻尼系数 (k) 的选择是个权衡 (k) 越大响应越快但滤波能力越弱谐波容易混进来 (k) 越小滤波越强但启动时动态过程变慢。我的经验值是1.4左右如果想加强滤波还可以调到1.2不要低于1否则响应速度会明显拖后腿。再说离散化和步长的坑。控制环和SVPWM使用离散模块时采样时间必须和PWM载波周期保持整数倍关系否则脉冲位置会发生抖动。固定步长我习惯取 (2 \times 10^{-5}) 秒也就是20微秒对应50kHz的求解频率能看到10kHz开关频率下脉冲边沿的细节又不会慢到调一次参数要等半天。如果发现仿真结果发散首先要检查仿真求解器用的是不是固定步长、步长是否过大而不是急着改PI参数。还有一个典型的代数环问题。Simulink里如果电流环输出又反馈到输入形成无延时环仿真会出现“Algebraic Loop”报错或者结果奇奇怪怪。解决办法是在反馈路径中插入一个Memory模块或者把PI模块的离散采样时间设成和载波同步人为打破瞬时反馈关系。这个坑几乎每个做过电力电子仿真的人都遇到过不用怀疑自己技术不行加个Memory就好。电压前馈环节也要注意符号。正序d轴电压前馈和PI输出方向一致还好理解负序d/q电压前馈的极性千万别搞反。我因为省事把正序环的前馈结构直接复制到负序环结果负序电流不仅没压下去反而被“放大”了查了半天才意识到负序Park变换里 (dq) 轴定义和正序不同前馈符号反了。这种问题用波形很难一眼看出来建议每次改结构后都回到“负序指令为零、看负序电流是否收敛到零”这个基准判断上。5.3 从连续模式切换到离散模式迟早要过的一关仿真正式跑通后下一步往往是把连续控制模块换成离散控制模块。这里我建议从一开始就按离散模块来搭别贪图连续模块的省事。连续模块里PI参数的意义和离散域不完全一致等模型导入到控制器里再迁移参数整定等于重来一遍。用Discrete PI Controller采样时间和PWM模块同步后边做代码生成或硬件在环时直接复用模型。离散化之后要注意每个模块的采样时间设置。PLL、正负序分离、电流环、电压环、SVPWM的采样时间如果不一致波形上会看到阶梯状跳变这个其实不一定是控制有问题只是模块间采样不匹配。理论上可以把采样时间统一设成一个值比如100微秒再根据性能要求逐步分级。6. 从仿真到工程样机下一步可以这么走6.1 模型离散化与代码生成的衔接当仿真模型完全稳定之后就可以考虑把它往实际控制器上搬。Simulink的代码生成能力很成熟控制部分的模型几乎可以直接生成C代码。但有几个细节需要提前清理一是把所有不需要的Scope、Display等显示模块删掉或用条件编译排除二是将采样时间统一为基采样率避免多速率模块导致生成的代码出现复杂的任务调度三是确认负序分离模块用的传递函数是离散域实现SOGI结构也最好改成用积分器离散化的等价结构这样生成的代码逻辑清楚调试时能一行一行对上。如果你们有RT硬件在环平台可以直接把主电路放到实时仿真器里控制模型跑在控制器上。这一阶段最容易暴露的问题是执行时间和模型复杂度不匹配。SOGI模块如果用连续积分器离散化步长够不够SVPWM模块的内部计算在目标芯片上的耗时是多少。这些在离线仿真中完全看不出来只有到了实时仿真的阶段才会暴露。提前对模型做一次计算量估算能省很多现场时间。6.2 扩展方向谐波、跌落穿越和V2G正负序分离控制策略本身是一个基座往上面可以叠加不少扩展功能。如果电网谐波严重SOGI的带通性能有限可以考虑改成DSOGI结构把5次、7次谐波也纳入分离和抑制的范围。更简单一点的办法是在SOGI前级加一个陷波器把特定频率的谐波提前滤掉代价是动态性能略降。如果充电装置需要满足并网电压跌落穿越要求那就要在策略里增加低电压穿越逻辑。电压严重不平衡时负序电流指令往往需要根据无功支撑要求重新分配不能简单地设为零或者追求瞬时功率恒定。这时候充电策略要从“保电流对称”切换到“保电压支撑”控制目标变化后之前的分离模块和控制框架仍然可以复用主要新增的是工况判断和指令切换逻辑。对于V2G场景充电装置需要能够同时支持整流和逆变两种模式。正负序双电流环框架天然支持双向功率流动只需要把电压环指令极性、电流环限幅等按双向工况重新设置即可。我最近在做的扩展就是把负序电流抑制和V2G模式下电池SOC管理结合起来充电和放电工况共用一套正负序分离模块差别只在功率指令的方向和限制条件。这类控制策略的学习路径确实是层层递进的。先理解对称分量法再掌握瞬时分量计算然后才是Simulink里的工程化实现。回头再看最初那个“直流母线抖成心电图”的问题其实原理并不复杂难的是把理论概念落地成模型里的每一个模块连接。希望这份操作笔记能帮你把这段路走顺一点。