
这几年在微电网控制里折腾最让我有成就感的一次就是把二次控制、虚拟阻抗和事件触发这几样东西揉在了一起。目标是让并联的逆变器把有功功率分得更匀同时别让通信负担太重。今天就把这套方案的思路、原理和调试中踩过的坑一次性写清楚。这套东西能解决的问题很具体微电网里并联逆变器如果只靠传统下垂控制负载一上来频率和电压就会偏离额定值各台逆变器分担的功率也容易不均匀严重的还会形成环流。二次控制就是用来把频率电压拉回额定值的虚拟阻抗用来抹平线路阻抗差异带来的功率分配误差事件触发则负责在实现这些目标的同时尽量少占用通信资源。适合谁读做微电网、储能变流器、并联逆变器控制的工程师和研究生都可以参考尤其是那些准备从仿真走向真机或者正在为通信带宽发愁的团队。我把原理、参数设计、仿真实现和坑都放在下面照着捋一遍应该能省不少事。1. 项目整体设计与思路拆解1.1 三层架构里二次控制到底处于哪个位置微电网的控制通常被分成三层。最底层是逆变器本地的电压电流双闭环负责把输出电压稳住中间一层是下垂控制也叫一次控制让各台逆变器在没有通信的情况下按照各自的容量分担负载最上层才是二次控制用来补偿一次控制带来的频率和电压偏差。如果把下垂控制比作“各干各的靠出力自动平衡”那二次控制就是“有个协调员在盯着全局发现偏离了额定值就悄悄修正”。注意这个修正不是简单地说“大家把频率调回50Hz”而是要保证在调回频率的同时不破坏有功功率均分的结果。这两件事互相耦合实现起来必须一起考虑。具体到这次的方案二次控制用的是分布式架构各逆变器只和邻居交换数据通过一致性算法算出修正量再把修正量叠加进下垂控制的参考值。没有中央控制器系统不会因为单点故障瘫掉这在工程落地时是很重要的优势。1.2 为什么非要把虚拟阻抗和事件触发凑到一起以前做二次控制很多人习惯用周期通信比如每10毫秒发一次状态简单省心但通信压力大。等你真的部署到现场遇到通信链路不稳定、带宽不够、或者通道被好几台设备轮流占用的场景就会明白周期通信有多浪费。事件触发的思路是“没事就不说话有事才开口”。每个逆变器持续监测自身的状态只有状态变化超过预设的阈值才向邻居广播一次。这样一来稳态的时候几乎不通信动态的时候才密集通信通信资源的使用效率一下子高了很多。那虚拟阻抗又是什么角色单纯靠下垂控制并联各逆变器之间的线路阻抗不一致时功率分配很容易偏。虚拟阻抗就是给每个逆变器“人为地”串一个可设计的阻抗把实际线路阻抗之间的差异“压”下去让控制对象更整齐、更可控。也就是说这套方案的分工很清楚下垂控制负责底层稳定虚拟阻抗嵌入在下垂控制里负责功率均分的基础精度二次控制负责把电压和频率整体拉回额定值事件触发则给整个二次控制加了一个“节能通信”的包装。2. 下垂控制的底子与二次控制的由来2.1 下垂控制背后的物理逻辑下垂控制的核心是借鉴同步发电机的自同步特性。同步发电机并网运行时转速和系统频率之间有关系输出有功功率增加时转子减速频率略降输出无功增加时电压幅值略降。下垂控制把这个规律直接搬到逆变器上公式f_i f_n - m_i * P_iV_i V_n - n_i * Q_i。其中 f_n 是额定频率V_n 是额定电压幅值m_i 和 n_i 分别是频率和有功、电压和无功的下垂系数。P_i 和 Q_i 是第 i 台逆变器输出的有功和无功功率。为什么有功对应频率无功对应电压这不是随便配的而是取决于输电线路的阻抗性质。在高压电网中线路以感性为主有功传输和相角差强相关相角差则通过频率的积分体现所以有功用频率下垂来控制无功传输和电压差强相关所以无功用电压下垂来控制。到了低压微电网线路电阻占比大严格来说应该考虑阻性线路的小信号关系但工程中常用“P-f/Q-V”配合虚拟阻抗来等效把线路特性“改造”得符合解耦条件。下垂系数怎么选有一个基本约束全厂满载时的频率偏差不能超过允许范围。例如额定频率50Hz允许偏差正负0.5Hz总容量100kW那 m_i 就要保证满载时的频率仍落在限制内。系数选大功率分配反应快但电压频率降得多选小均分精度差一些动态也慢。这个取舍没有绝对对错只能结合系统规格来定。2.2 一次控制的天然缺陷下垂控制实现了“无通信也能均分功率”代价是什么呢代价就是频率和电压会随负载的增大而偏离额定值。举个例子两台逆变器并联各是50kW容量都带25kW负载时按照下垂曲线频率会从50Hz掉到大约49.9Hz。负载再大一点可能掉到49.7Hz。对电力系统来说频率长期偏离额定值是绝对不允许的电压同理。所以就需要二次控制。市电电网里承担这个任务的是AGC自动发电控制微电网里则可以由本地控制器完成测量频率和电压算误差加上补偿量把下垂曲线整体向上平移让实际频率电压回到额定点。2.3 集中式、分布式和“分布式事件触发”怎么选这里有一张表我很建议项目开始前先花十分钟过一遍能省掉后面改架构的痛。方案结构优点缺点集中式二次控制中央控制器采集全部信息统一下发指令实现简单逻辑直观单点故障风险高扩展性差分布式一致性二次控制节点只和邻居通信用一致性协议收敛容错性好即插即用周期性通信开销不小分布式一致性事件触发通信方式改为按需触发通信量显著下降可靠性高控制逻辑和稳定性分析更复杂我当时选第三种最直接的动机是项目现场通信链路速率不高还经常会有丢包。与其在周期通信里处理一堆无效数据不如让通信次数本身变少。3. 虚拟阻抗改善有功功率均分的关键3.1 线路阻抗不一致有功功率为什么分不匀假设两台逆变器容量相同参数完全一致只有到公共母线的电缆长度不一样比如一台离得近一台离得远。这时如果不做虚拟阻抗较远那台线路阻抗大输出的功率就会偏小较近那台则偏大。结果就是一台轻载发热小一台过载发热大长期运行很容易触发过流保护甚至损坏器件。从控制角度看逆变器输出电压幅值和相位相同但各自经过不同的线路阻抗后到公共母线的功率潮流就不同了。线路阻抗的差异直接破坏了“均分”的条件。更麻烦的是并联系统里还存在环流问题输出电压有细微差异时逆变器之间会形成不经过负载的电流回路白白增加损耗。这些问题用虚拟阻抗解决思路很直接给每台逆变器额外串一个设定的虚拟电阻和虚拟电感而且这个虚拟阻抗要设计成比实际线路阻抗“大得多”这样线路阻抗的差异相对虚拟阻抗来说就变得很小各台逆变器“看到”的等效输出阻抗趋于一致均分效果自然就上来了。3.2 虚拟阻抗应该加在哪个环节虚拟阻抗一般加在下垂控制产生电压参考值之后、电压电流双闭环之前。实现上就是把输出电流乘以一个虚拟阻抗值得到一个电压修正量从参考电压里减掉。计算公式是 u_vref u_ref - (R_v jX_v) * i_o。R_v 是虚拟电阻X_v 是虚拟电抗i_o 是逆变器输出电流。这里的 i_o 通常要滤波和做正交变换因为它包含基波和谐波成分直接用原始值可能会放大噪声。加完之后实际起作用的是“下垂控制得到的参考电压—虚拟阻抗产生的电压降—电压电流双闭环跟踪—实际输出”整个链路就变成了一条更可控的输出特性曲线。需要注意加入虚拟阻抗后逆变器的输出电压会比不加时低一些特别是在带重载的时候。这个电压降压是虚拟阻抗压降造成的需要在二次控制里一并补偿回来否则电压指标会超标。这也是为什么虚拟阻抗不能无限加大。3.3 虚拟阻抗的参数怎么定虚拟阻抗的设计说得直白一点就是在“压制线路阻抗差异”和“尽量少压掉输出电压”之间找平衡。先看阻感比。如果实际线路接近阻性虚拟阻抗也建议选电阻性为主这样不会改变系统原有的功率解耦特性如果实际线路是感性的那虚拟电抗为主。在低压微电网里线路电阻普遍比感抗大很多工程方案干脆用虚拟电阻实现简单参数也好调。参数大小怎么估可以按实际线路阻抗的5到10倍来起步。比如你估算最远那台逆变器到母线的线路阻抗大约是0.1欧那虚拟电阻可以先取0.5欧到1欧。然后看仿真结果如果功率均分误差还大往上加如果电压掉得太多往下降。这个“来回拉扯”的过程通常要循环几次。还有一个工程细节虚拟阻抗的计算需要引入输出的瞬时电流而电流含有纹波和高频分量所以一般要加低通滤波器。滤波器截止频率选多少我习惯取基波频率的10到20倍比如50Hz系统里取500到1000Hz既能保留基波和低频动态又能滤掉开关纹波。注意虚拟阻抗不是越大越好。R_v 越大线路阻抗差异被压制的效果越好但输出电压的降落也越明显、动态响应越迟钝。如果二次控制的电压补偿能力有限过大的虚拟阻抗会把电压直接拉出允许范围。4. 事件触发机制把通信次数降下来4.1 为什么不用周期通信周期通信很好理解固定每个控制周期都发一次状态。好处是逻辑简单、便于分析坏处是大量通信其实是在传输“没变化的数据”。我做过一次统计在负载稳定、系统进入稳态以后逆变器状态的变化非常小。这个时候周期通信还在每10毫秒发一次完整状态包绝大多数包的信息量为零。如果系统里有几十上百个分布式单元通信链路很容易被无意义的包占满延迟和丢包都会恶化。事件触发的基础逻辑是“只在需要的时候通信”。把每个节点的最新状态记录下来持续和上一次触发时刻的状态比较偏差超过阈值才触发通信。这样稳态下通信次数大幅减少动态过程中通信才密集发生感知能力和资源消耗之间的平衡就出来了。4.2 触发条件怎么设计触发条件设计是事件触发控制里最核心的问题。你不可能等偏差很大了才触发那样控制效果很差也不能稍微有点偏差就触发那和周期通信没区别。常见的触发条件是|x_i(t) - x_i(t_k)| sigma * |x_i(t_k)| epsilon。其中 x_i(t) 是当前状态x_i(t_k) 是第 k 次触发时的状态。sigma 是相对误差阈值epsilon 是绝对误差阈值。分母带一个本身状态量是为了让阈值能跟着量级自适应变化避免小信号时误触发、大信号时反应迟钝。触发判断通常在每个采样周期内执行一次但只有满足条件时才真正发出通信包。伪代码可以写成这样for each control cycle do error abs(state_current - state_last_triggered) threshold sigma * abs(state_last_triggered) epsilon if error threshold then send(state_current) state_last_triggered state_current end if end forsigma 和 epsilon 怎么定我一般是先跑不带事件触发的仿真观察状态的典型波动范围。比如正常情况下频率修正量的变化范围是正负0.1Hz那 sigma 取0.02到0.05epsilon 取0.001左右先把触发次数控制在可接受范围再根据控制效果微调。4.3 Zeno现象和最小触发间隔事件触发领域有个很著名的坑叫Zeno现象大意是逻辑上触发时间可以无限密集甚至趋近于零间隔累积到有限时间内这在连续系统仿真里看起来很合理但真实系统里没有物理意义因为通信和计算不可能无限快。要排除Zeno现象常用的办法是证明触发间隔存在一个正值下界也就是最小触发间隔。工程上更好办直接在代码里加一个强制最小间隔比如两次触发之间至少间隔10毫秒。这样就算数学分析没法保证实现层面也把风险堵死了。但要注意强制最小间隔不能设得太大太大会让系统错过关键动态。更稳妥的做法是让触发阈值设置得足够大使得正常控制过程中自然不存在过密触发然后再在代码层加一个兜底的最小间隔保护。另外还要处理一个实际问题事件触发通信是异步的各节点不是同一时刻把状态发出去如果控制算法里默认所有数据同时到达就会出现错位。我的处理方式是在接收端保留最近一次收到的状态并记录时间戳控制计算时用这个缓存值这样即便触发不同步状态更新也是“尽力而为一版”不会因为数据不齐而崩溃。5. 完整实现与仿真验证5.1 系统整体结构把前面几块拼起来这套方案的总体结构是整体分为四层最底层是三相逆变桥和LC滤波器往上一层是电压电流双闭环负责跟踪电压参考值再往上一层是下垂控制加虚拟阻抗产生电压参考值并维持功率均分最上层是分布式事件触发二次控制通过邻居节点交换状态计算频率和电压修正量输出给下垂控制。通俗点说底层是“手脚”中层是“神经系统”顶层是“大脑”。手脚负责干活神经系统负责让动作平滑大脑负责看全局、定方向。仿真时我常用的是MATLAB/Simulink 加 Simscape Electrical 搭主电路控制算法用离散模块或S函数实现。也有同事喜欢在PLECS里搭功率部分再导到MATLAB里联合仿真两种方式都行关键是功率部分和控制部分的采样频率要分开建模功率部分步长取微秒级控制部分用固定步长比如100微秒。5.2 仿真模型搭建要点搭建时有个顺序问题不要一上来就搭全功能先搭基础模型。第一步先搭单台逆变器的下垂控制加电压电流双闭环接阻性负载确认空载和满载电压波形正常频率没有明显漂移。这一步过关了再加并联。第二步搭两台或多台并联线路阻抗故意设成不一致比如一台线路阻抗0.05欧一台0.15欧。在纯下垂控制下跑一次记录有功功率的均分误差作为基线。第三步加上虚拟阻抗再跑一次看均分误差是否改善电压跌落有多大。第四步在虚拟阻抗基础上加分布式二次控制用周期通信先验证电压频率能否回到额定值。第五步把周期通信换成事件触发调阈值看通信次数和控制效果的权衡。这样一层层叠上去出了问题很好定位。如果一开始就全堆上去哪个环节有问题都分不清。初始化脚本里可以这样设置系统参数实际项目按规格替换即可% 系统额定参数 fn 50; % 额定频率 Hz Vn 311; % 额定相电压幅值 V P_rated 50e3; % 单台逆变器额定有功功率 W Q_rated 20e3; % 单台逆变器额定无功功率 Var % 下垂系数 m 1e-5; % P-f 下垂系数 Hz/W n 2e-4; % Q-V 下垂系数 V/Var % 虚拟阻抗 Rv 0.6; % 虚拟电阻 ohm Lv 0.8e-3; % 虚拟电感 H w_lpf 2*pi*500; % 电流滤波截止频率 rad/s % 事件触发参数 sigma 0.03; % 相对阈值 epsilon 0.001; % 绝对阈值 T_min 0.01; % 最小触发间隔 s参数选好以后先用基线工况看控制效果再逐步加严或放宽。5.3 参数配置与收敛调整下垂系数 m 和 n 的确定要考虑满载时的频率电压偏差。比如两台50kW逆变器满载总100kW希望满载频率偏差不超过0.2Hz那 m 可以取 0.2/100000 2e-6。实际项目里还要留裕量取1e-5量级是常见的。虚拟阻抗参数和线路阻抗有关。我建议先测量或估算线路每千米的电阻和感抗估算最远单元到母线的总阻抗然后让虚拟阻抗达到它的5到10倍。设置完以后看两个指标一是稳态时有功均分误差二是输出相电压幅值。均分误差的目标可以定为5%以内电压跌落尽量不超过额定值的2%。事件触发的 sigma 和 epsilon 是耦合的。sigma 调大通信次数少但状态更新慢二次控制的收敛变慢甚至稳态的均分误差会变大epsilon 调小稳态时可能频繁触发通信节省效果差。整定的经验是先把 epsilon 固定在一个小值只调 sigma观察触发次数和控制效果找到合适区间后再回头微调 epsilon 来消除稳态时的低频抖动触发。二次控制的控制增益也需要注意。一致性算法的增益太大修正量振荡甚至不稳定太小收敛慢负载突变后半天拉不回额定值。这个增益同样要通过仿真和调参确定没有固定公式。5.4 结果怎么验收验收不能只看波形好看要量化。我这次主要看四个指标频率和电压是否回到额定值。这是二次控制的基本盘负载突变后频率应在1到2秒内回到50Hz附近电压幅值回到311V附近。有功均分误差。稳态下按标幺值计算各台逆变器的有功功率与参考值的偏差应在5%以内。满载和轻载都要看因为不同工况下虚拟阻抗的效果不完全一样。通信次数对比。统计事件触发方案和周期方案在同样工况下发送的通信包数量。比较理想的场景能减少80%以上动态时通信次数增加是正常的但稳态时应该趋近于零。动态响应。负载突加突卸时系统有没有明显过冲、振荡是否在2到3秒内稳定下来。事件触发带来的通信延迟会让过渡过程变慢一点但只要在可接受范围内就是值得的。6. 调试中踩过的坑与排查技巧6.1 常见问题速查表做这个项目期间我记录了一些典型问题这里用一张表整理出来方便以后照着排查。现象可能原因对策功率均分误差大调虚拟阻抗没用虚拟阻抗不够大或线路阻抗估算偏小按实际线路阻抗10倍方向加大同时观察电压跌落电压跌落严重低于额定值虚拟阻抗压降大二次控制补偿不足先调电压补偿增益再回调虚拟阻抗检查电流滤波相移事件触发次数太多通信量没省下来阈值太小或系统高频噪声导致抖动加宽触发阈值或对状态量先低通滤波事件触发次数太少二次控制收敛慢阈值过大状态更新跟不上动态缩小sigma或调小最小触发间隔加入虚拟阻抗后低频振荡虚拟阻抗改变输出阻抗特性和双闭环不匹配检查等效输出阻抗伯德图降低虚拟阻抗或重整电流内环PI通信丢包引发状态不一致现场链路丢包、乱序接收端最近有效数据保持超时重传时间戳校验6.2 调试顺序和顺序背后的道理想把这个系统调试顺利顺序比技巧更重要。经验是一轮一轮来每次只改一个变量记录一轮数据再动下一个。第一轮先把下垂控制和双闭环调好不加虚拟阻抗不加二次控制确认单机稳定。第二轮加入虚拟阻抗只验证功率均分和电压跌落不调通信。第三轮加入周期通信的二次控制把频率电压回拉调通。第四轮才换成事件触发调阈值和通信参数。这个顺序让人少走很多弯路因为每一轮失败时的嫌疑范围都小。比如第三轮调不通要么是二次控制增益不对要么是虚拟阻抗压降太大不会牵扯到事件触发逻辑如果你一开始就全上出了振荡连是“通信逻辑出错”还是“控制参数不匹配”都分不清。另外建议保留所有基线数据和配置切片。仿真模型在线运行的时候把关键波形导出保存参数改动前先存一份这样哪个参数导致什么变化回溯起来一目了然。我在实际调试里还有个习惯每轮调参前先给自己写三行笔记——这一轮改了什么、预期看到什么、实际看到什么。听起来很老土但遇到问题回翻笔记的时候真的比翻代码记录管用。这个项目做到后面我最大的体会是虚拟阻抗、二次控制、事件触发这些技术单拎出来都不算新难的是把三者放进同一个体系里协同工作。调试的头一个星期我大部分时间都耗在“加了虚拟阻抗把电压压下去又把二次控制增益调大拉回来结果触发次数突然暴增”这种互相拉扯的循环里。建议第一次做类似项目的人给参数整定预留充足的时间不要幻想一次仿真就能全通。最后再分享一个实用小技巧事件触发的状态量选择不要贪多。最初我把输出电压、输出电流、频率修正量都放进触发条件里结果通信量一直压不下去。后来砍到只用频率修正量的偏差作为触发信号触发次数立刻降了一个量级控制效果差别并不大。通信资源是稀缺资源触发条件越精简系统总体效果反而越好。