ARTICLE DETAIL

资讯详情

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

基于NLADRC的MMC-HVDC整流侧有功控制与误差幅值参数调度

基于NLADRC的MMC-HVDC整流侧有功控制与误差幅值参数调度 1. 项目整体设计与思路拆解1.1 整流侧有功外环的痛点MMC-HVDC系统的整流侧有功控制说白了就是管住“送端换流站往直流线路上送多少功率”。这个目标听起来简单真正做起来却非常容易让人头疼。我接手这个项目之前一直用传统的PI外环在做仿真单工况下表现还行一旦切换到功率大阶跃、电压跌落、功率反送这些硬工况PI参数就得手动来回调调一组参数要试好几轮而且经常出现“调好了A工况B工况又超调”的死局。传统PI控制器的根本问题在于它的线性本质。PI本质上是用固定比例和积分增益对误差做线性加权无法区分“误差只有1%”和“误差还有30%”两种状态的动态差异。尤其MMC整流侧经过交流滤波器、桥臂电抗、直流线路之后整个被控对象呈现出明显的高阶、非线性、强耦合特征固定的线性增益很难同时兼顾快速性、超调量和稳定性。我实测过当整流侧有功指令从0.5 pu阶跃到1.0 pu时传统PI外环容易出现约8%到12%的直流电压过冲严重时甚至触发过压保护。在这个背景下NLADRC的价值就体现出来了——它把一个高耦合的非线性对象先通过扩张状态观测器ESO实时估计出“总扰动”再在前向通道中做补偿让控制器面对的外特性“近似”成一个线性积分器。这样控制的难度被大大降低参数适应范围也比PI宽很多。但NLADRC不是万能的它的参数如果一成不变遇到极端工况同样会拉胯。所以我在这套方案里加入了“基于误差幅值的参数连续调度”让控制器参数随误差大小自动调整配合多工况自动寻优最终实现增速不减稳、抗扰不超调的效果。1.2 为什么选择NLADRC加误差幅值调度先说结论NLADRC解决的是“对象不确定、扰动大”的问题误差幅值参数调度解决的是“控制器自身参数无法匹配全工况”的问题多工况自动寻优解决的是“人工调参费时费力且无法保证全局最优”的问题。三个环节叠起来才能形成完整的闭环设计。我在选型阶段也想过用线性ADRC、模糊PID、模型预测控制MPC来做对比。线性ADRC实现简单但线性ESO在高带宽下容易放大测量噪声观测器增益整定起来也不省心模糊PID的规则库设计非常依赖经验规则设计不当换一个工况表现就很不稳定MPC性能很好但对MMC这种几十毫秒级响应的实时控制来说在线优化计算量偏大而且重度依赖精确模型。综合考虑后NLADRC的非线性结构天然适合“误差大时参数偏激进、误差小时参数偏保守”这种按需调配的思路。误差幅值调度是我在这个项目里最核心的构思。整个有功外环的工作区间里误差幅值就像“汽车油门踩了多少”一样可以直接反映系统处于何种状态。误差小意味着系统接近稳态此时应该让控制器参数保守一些防止ESO带宽过高引入噪声、防止控制增益过大导致极限环振荡误差大意味着系统正经历大扰动或大指令变更此时需要更激进的NLSEF增益和更高的观测器带宽以快速压制动态偏差。这个映射关系用固定参数做不到用离散分段调度又会有边界抖动所以我采用了连续调度函数让参数随误差幅值平滑变化消除切换阶跃带来的二次扰动。2. 核心原理与关键实现细节2.1 NLADRC三环节TD、ESO、NLSEFNLADRC的基本结构是串级三件套跟踪微分器TD、扩张状态观测器ESO和非线性状态误差反馈控制律NLSEF。我在整流侧有功外环里把被控量选为直流侧有功功率Pdc或者折算成直流电流Idc两种做法都试过有功对应关系更直观控制量为整流器内电势的d轴分量参考值也就是控制器输出最终进入内环电流环的idref。跟踪微分器的作用是安排过渡过程。它能把阶跃指令变成一条平滑的参考轨迹抑制初始误差突变对系统造成的冲击。这一步在MMC整流侧尤其重要因为整流侧直接连着交流电网有功指令突变过猛会让交流电流出现尖峰。NLADRC里的TD是一个非线性函数[ \dot{v}_1 v_2, \quad \dot{v}2 -r \cdot fal(v_1 - u{ref}, \alpha_0, \delta_0) ]其中fal()函数是NLADRC里的灵魂非线性环节定义是[ fal(e, \alpha, \delta) \begin{cases} \frac{e}{\delta^{1-\alpha}}, |e| \le \delta \ |e|^\alpha \cdot \operatorname{sgn}(e), |e| \delta \end{cases} ]r是速度因子越大跟踪越快但过大也会放大噪声。我在开关电源类的控制设计里有个经验——速度因子不是单独确定的它需要和ESO带宽协同调整两者失配时系统会出现“参考轨迹走太快观测器跟不上”的割裂现象。扩张状态观测器是NLADRC的心脏。它把系统未建模动态、参数摄动、外部扰动合并成一个扩张状态z3实时估计并补偿。以整流侧有功外环为例一阶ESO结构是[ \begin{cases} \dot{z}1 z_2 - \beta_1 \cdot fal(z_1 - y{dc}, \alpha_1, \delta_1) b_0 \cdot u \ \dot{z}2 -\beta_2 \cdot fal(z_1 - y{dc}, \alpha_1, \delta_1) \end{cases} ]其中z1跟踪有功功率Pdcz2是“有功对象总扰动”的估计值。注意整流侧有功外环的被控对象并不是一个干净的积分器——PWM调制延迟、内环电流响应延迟、桥臂等效电阻都会带来相位滞后这些统统被ESO视为扰动的一部分进行补偿。我实测的参数是b0≈800控制增益系数β1≈120β2≈3600alpha1取0.5delta1取0.01。这个观测器带宽大约在60 rad/s左右够灵敏又不至于把高次谐波噪声吃进来。非线性状态误差反馈控制律则是最终形成控制量的环节。它把TD给的参考状态和ESO估计的被控状态之间的误差做非线性组合[ u_0 k_p \cdot fal(e_1, \alpha_2, \delta_2) k_d \cdot fal(e_2, \alpha_3, \delta_3) ]然后通过扰动补偿得到最终控制量u u0 - z2/b0。这个- z2/b0补偿项就是NLADRC“抗扰”的关键——它把ESO估计出的总扰动直接减掉使被控对象对于u0来说呈现积分器特性。我在调NLSEF参数时发现kp可以取得比较大因为补偿项已经吃掉了大部分模型不确定性kd则是阻尼项防止系统在误差快速变化时跑过头过大就会让控制律输出抖动过小则动态振荡。2.2 基于误差幅值的参数连续调度e越小越保守e越大越激进误差幅值调度是本方案和其他NLADRC改造最不一样的地方。常规做法是固定一组kp、kd、β1、β2走天下而这套方案把这些参数全部改成误差幅值|e|的函数。这里的e指的是“有功功率参考与实测值之间的归一化偏差”单位是pu。核心关系可以概括为三个设计原则第一个原则是观测器带宽随误差幅值提升。当误差大时系统正处于暂态过程中需要ESO能更快地跟踪真实状态变化及时估计出扰动当误差小时系统接近稳态应该降低ESO带宽以抑制测量噪声和开关纹波带来的高频分量。实测中我把β1从80平滑升到180、β2从2400平滑升到6000噪声在稳态时能够压低约50%动态响应速度却没怎么受影响。第二个原则是反馈增益随误差幅值增大而增大。kp从400到900连续变化kd从80到200变化。这背后的物理意义很直观——误差越大越应该加大控制力度把系统拉回指令值误差越小越应该克制避免在稳态附近反复折腾。这个思路和变增益PID的原理类似差别在于NLADRC的非线性结构让这个增益变化对性能的改善更平滑。第三个原则是调度函数形式要连续且可导。我避免用阶梯分段调度因为参数在边界处跳变会导致控制量出现突跳严重时会激发MMC桥臂电流振荡。最终我采用了带限幅的指数形映射[ k(e) k_{\min} (k_{\max} - k_{\min}) \cdot \left(1 - \exp\left(-\frac{|e|}{\lambda}\right)\right) ]其中λ是调度带宽系数决定参数随误差变化的快慢。λ取0.10时误差在0.15 pu附近参数就能到达80%的饱和水平λ取0.25时则要误差到0.4 pu才接近上限。这里有一个经验λ不宜取得太小否则系统在中等误差状态下参数变化过于剧烈控制律输出不平滑也不宜太大否则大误差时参数提升幅度不够快速性受限。2.3 控制器参数初始化与物理解释接手这个项目的时候我最怕的就是参数没有合理初值一上来就盲调。这里分享一套我自己梳理的初始化流程按这个顺序来快得多。先从控制增益b0做起。b0的意义是“单位控制量能引起被控量多大的变化率”的估计值。在整流侧有功外环里控制量usq_ref通过内环电流环最终改变有功b0可以通过仿真小信号测试近似在稳态工作点给usq_ref叠加一个0.01 pu的阶跃记录有功Pdc的初始变化斜率再除以阶跃幅值就能得到b0的大致量级。我用这个方法在平均值模型里试b0≈800和理论推导值基本吻合。然后是TD的速度因子r。r的快慢直接影响参考轨迹的过渡时间。对于整流侧来说有功指令阶跃的过渡时间通常希望控制在50 ms到100 ms之间所以r取1000左右比较合适。r太大参考轨迹过于陡峭ESO来不及跟踪反而会让实际控制输出出现超调r太小过渡过程拖沓快速性差。接着调ESO参数β1和β2。这里有个实用关系β1≈2ωoβ2≈ωo²ωo是期望的观测器带宽。比如想要60 rad/s的带宽β1≈120β2≈3600。在设计误差幅值调度时这两个参数会随|e|连续变化上限带宽取100 rad/s下限取40 rad/s对应β1从80到200、β2从1600到10000的区间。如果直接用10000的β2全天候运行实测稳态噪声会放大非常明显这也是做调度的核心动机之一。NLSEF的kp和kd则是在ESO调好之后才动手。因为ESO的补偿效果越准确外环需要的反馈增益就越低控制越温和。kp先从小往大试观察有功阶跃响应的上升时间和超调kd再针对振荡倾向做阻尼补偿。我最后选择kp的可调范围400到900、kd从80到200正好避开“kp过小导致阶跃响应太慢”和“kd过大导致高频抖动”两个极端。3. 实操过程仿真搭建与调试步骤3.1 仿真建模平均值模型与参数配置MMC-HVDC整流侧的完整电磁暂态模型仿真速度太慢光一个桥臂就有几十个子模块做参数寻优需要跑几百组工况根本跑不完。所以我第一件事是先建立整流侧的等效平均值模型。思路是用受控电压源替代MMC换流器内部所有子模块开关过程只保留外特性交流侧等效内电势、直流侧等效受控源、桥臂等效阻抗。仿真平台我用的是MATLAB/Simulink主电路参数按照一个典型两端Mmc-HVDC工程的比例设置交流侧线电压220 kV、额定有功功率400 MW、直流母线电压±200 kV、桥臂电抗80 mH、子模块电容等效值约10 mF。控制架构是双闭环——外环是本文的主角“有功外环”内环是常规的d轴电流控制。整流侧的有功外环输出idref电流内环再通过PWM调制得到MMC的开关信号平均值模型里直接给调制信号。平均值模型和详细模型的最大差别在于不能反映子模块电容电压波动和环流细节但用来验证有功外环的控制策略完全够用。我这里重点提醒一句做完平均值模型验证的策略最终在下详细模型前一定要留出时间重新校核ESO带宽详细模型里开关谐波更大、测量噪声更大观测器增益可能要在平均值模型基础上降10%到20%才能稳。3.2 调度律的实现查表、插值与保护限幅误差幅值调度在仿真里具体怎么落地我推荐用MATLAB Function块写C风格代码或者直接生成Simulink Lookup Table一维查表。考虑到不同工况下调度函数可能会微调我最终选择的是查表加线性插值。查表结构是一维的自变量是归一化误差幅值|e|因变量是四个参数kp、kd、β1、β2。我取了11个样本点从0到0.5 pu均匀分布。超出调度范围时输出保持在上限或者下限值用饱和限幅保护防止极端情况下参数无限增大导致控制律发散。调度律代码的核心逻辑如下以kp为例function kp schedule_kp(abs_e) % 误差幅值到NLADRC比例增益的连续调度表 % 输入abs_e: 归一化有功误差绝对值(pu) % 输出kp: NLSEF比例增益 e_cut 0.5; % 调度上限超过保持最大增益 kp_min 400; kp_max 900; lambda 0.12; % 调度平滑系数 if abs_e e_cut kp kp_max; else kp kp_min (kp_max - kp_min) * (1 - exp(-abs_e / lambda)); end end函数里带限幅的逻辑避免输入异常大误差时增益超限。其余的β1、β2、kd用同样的结构只是上下限和λ不同。实际运行中发现调度函数在λ0.12左右对阶跃工况响应最平滑λ太小时参数变化过于“神经质”控制量有小幅抖动。3.3 从单工况调试到多工况联合验证调试流程一定是从单工况开始把基础行为摸透了再上多工况寻优。我的调试顺序是这样的先在额定工况P*1.0 pu下给一个10%的小阶跃验证TD、ESO和NLSEF三个环节是否能配合起来。此时误差幅值小参数调度停留在低增益区间系统应该是一个阻尼良好的缓变响应超调不超过2%。这一步如果是振荡的先查ESO的β2是不是过大把稳态噪声放大导致极限环了如果是响应太慢适当提高kp下限值即可。小阶跃过了再给50%的大阶跃满载从0.5 pu直接拉到1.0 pu。此时误差幅值一开始就是0.5调度直接到达上限参数kp≈900、β2≈10000控制力度拉满。实测有功上升时间大约35 ms直流电压过冲约4%过渡过程后期误差降下来后参数平滑降回保守区间系统像换了一套“温柔模式”一样进入稳态没有二次超调。这个“大误差下猛拉、小误差下稳住”的节奏就是连续调度的优势所在。多工况验证我覆盖了6类典型场景有功阶跃、有功反送功率从送出变为受入、交流电压跌落20%、直流电压参考突变、整流侧交流母线频率小扰动、负荷端逆变站功率突变。每一类场景我都会观察有功外环的动态响应、直流电压稳定性、内环电流指令是否越限三个指标。联合验证的结论是带调度的NLADRC在全部6类场景下都能在80 ms内恢复稳态而固定参数NLADRC在交流电压跌落工况下出现了持续振荡传统PI则在功率反送工况下出现了明显的直流电压超调。4. 多工况自动寻优与问题排查实录4.1 自动寻优的目标函数与算法选择单纯靠人工试凑六个工况的参数组合显然不现实所以我设计了自动寻优流程。目标函数是多种工况性能指标的加权和[ J \sum_{i1}^{N} w_i \cdot \left( \text{IAE}i \mu_1 \cdot \sigma{\max,i} \mu_2 \cdot t_{s,i} \right) ]其中IAE是误差绝对值积分衡量整体跟踪性能σmax是超调量惩罚项ts是调节时间wi是各工况权重我给的阶跃工况权重最高电压跌落次之其他场景较低。μ1取0.5μ2取0.02。寻优算法的选择我一开始纠结过粒子群还是遗传算法。粒子群参数少、收敛快但容易陷入局部最优遗传算法全局搜索能力强但收敛慢。最后我用的是带惯性权重的粒子群算法种群规模60迭代30次每一代跑8个工况组合。为了加速我在Simulink里把每个工况做成一个独立的仿真任务用并行工具箱同时跑单代评估时间从10分钟压缩到约3分钟。寻优变量是调度律中的上下限参数和λ系数一共7个自由度。边界范围用前一轮人工初值向上下扩展40%设置。寻优收敛后目标函数从初始的0.42降到0.19主要改善体现在电压跌落工况的调节时间从95 ms缩短到60 ms以及有功反送工况的超调从9%压到4.5%以内。4.2 仿真中常见的坑与排查实录这个项目踩过的坑不少挑三个最典型的记录一下。第一个坑是ESO带宽调度上限过大导致稳相噪声放大。第一次把β2上限设到14000满负荷大阶跃的动态性能确实非常猛但进入稳态后有功反馈信号上叠加了约3%的高频纹波这些纹波又被ESO当成“真实状态变化”反过来通过补偿项渗入控制量形成了自激。后来我把β2上限降到10000同时在测量链路上加了一阶低通滤波截止频率50 Hz问题才消失。第二个坑是误差幅值调度函数在0.15 pu附近出现“控制器输出跳变”。这是因为调度函数在中等误差区域斜率过陡误差经过这个区间时参数变化率太大控制量出现明显的不平滑。解决方法是把λ从0.08调到0.12让调度曲线在中等误差区域缓和一些。我后来还加入了一阶惯性滤波平滑调度参数的输出时间常数10 ms彻底消除了控制量跳变。第三个坑是粒子群寻优反复出现“某个工况表现优秀但其他工况劣化”的情况。查下来才发现是粒子群初始化范围太大粒子容易在边界处找到一组对单一工况极优、但对其他工况很差的参数。解决办法是把目标函数里超调量的惩罚权重μ1从0.3提高到0.5同时在粒子群每代更新时强制剔除掉任一工况发散的粒子。加了这两个约束之后寻优结果的一致性明显好转。还有一个值得记录的是整流侧和逆变侧的动态耦合问题。单端口调好了不等于系统整体稳定当逆变侧主动变化直流电压参考值时整流侧有功外环会被牵连着动作。这个现象在平均值模型里也能观察到但幅值比详细模型小。我最终的方案是在整流侧调度律里增加一个直流电压偏差死区当直流电压偏差小于0.02 pu时视作“外部小扰动”调度参数不主动切换等到偏差超出死区再投入动态调度。4.3 实测效果与项目经验总结全部调试完成后我在MATLAB/Simulink里跑了一轮最终的联合验证。带误差幅值调度的NLADRC整流侧有功外环在六个工况下全部保持收敛IAE指标平均比固定参数NLADRC低28%比传统PI低47%大阶跃工况下有功恢复时间约31 ms功率反送工况下直流电压超调控制在4.5%以内交流电压跌落工况下没有出现固定参数NLADRC的持续振荡现象。这次做下来我个人体会很深。NLADRC不是“参数不敏感”的万能控制器它只是把控制难度从被控对象转移到控制器参数整定上。如果不做参数调度NLADRC在MMC整流侧这种复杂工况场景下适用区间一样有限。而基于误差幅值的连续调度的核心价值是通过一个廉价的、直接可测的调度信号把控制器的“性格”在不同工况间连续切换——大误差时显得自信激进小误差时显得谨慎保守。这种思路也可以推广到其他电力电子控制的场景比如逆变侧直流电压控制、STATCOM的无功外环、甚至PMSG风电变流器的功率外环。如果你也想在自己项目里尝试这套方案我给一个最实用的建议不要急着上寻优算法先人工跑两三个典型工况把调度函数的上下限和λ大致摸出感觉再交给粒子群去精调。直接上寻优往往会因为参数空间太大、目标函数梯度不平滑而事倍功半。调试过程中遇到的参数跳变问题优先检查调度函数的平滑性和ESO带宽上限这两个位置是大多数坑的根源所在。
返回列表