ARTICLE DETAIL

资讯详情

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

两电平变流器THD治理:MPC结合ANN前馈补偿的仿真实践

两电平变流器THD治理:MPC结合ANN前馈补偿的仿真实践 简介一套基于MATLAB的两电平变流器控制算法仿真源码包集成模型预测控制MPC与前馈人工神经网络ANN两种控制策略面向电力电子、新能源并网及谐波抑制方向的工程师和研究生。MPC通过滚动优化实时调整开关状态ANN则对非线性环节进行预估补偿两者结合可有效降低总谐波失真THD提升变流器动态响应和稳态精度。压缩包共351个文件以350个MAT数据文件和1个M脚本为主总大小52.08MB其中MAT文件用于保存训练样本、仿真结果和系统参数M脚本承载核心控制逻辑与仿真入口便于二次开发和参数调试。目前已有275人学习使用。源码涵盖变流器电气模型、MPC控制模块、前馈神经网络训练与预测代码、控制接口集成以及完整仿真脚本可复现THD优化全过程理解先进控制算法在变流器对象上的实际部署方式并可根据不同工况调整控制参数或网络结构适合课程设计、毕业设计及科研入门验证。1. 两电平变流器的THD治理为什么MPC要配ANN前馈两电平变流器电流THD超标通常先抬开关频率或加大滤波电感前者增损耗后者拖慢动态。MPC模型预测控制靠滚动预测、穷举开关状态响应快过PI加调制器但单靠MPC压THD有限一步计算延迟、IGBT死区、电感电阻漂移都会让实际电流偏离预测值。ANN前馈人工神经网络补偿的思路是用训练好的网络提前估计偏差并修正电流预测不动开关频率和滤波器THD就能明显下降。这套MPCANN方案在MATLAB里仿真成本低适合并网变流器、PWM整流器的算法预研。下面从两电平建模、ANN训练、THD计算到调参技巧逐层展开。2. 两电平变流器的MPC模型预测控制建模从离散方程到MATLAB代码2.1 两电平变流器的状态方程与八个电压矢量考虑最常见的三相两电平拓扑交流侧接L型滤波电感忽略死区时每相方程为 L·di/dt v - e - R·i。经Clarke变换到αβ静止坐标系后三相方程合并成两维复矢量形式。两电平逆变器有6个IGBT三个桥臂的开关状态组合出8个电压矢量其中V1~V6是有源矢量、幅值为2/3VdcV0和V7是零矢量。Vdc600V时各矢量的αβ分量如下表。矢量(Sa,Sb,Sc)vα (V)vβ (V)V0(0,0,0)00V1(1,0,0)4000V2(1,1,0)200346.4V3(0,1,0)-200346.4V4(0,1,1)-4000V5(0,0,1)-200-346.4V6(1,0,1)200-346.4V7(1,1,1)00MPC的巧妙之处在于省掉调制器把8个矢量当作候选输入逐个代入离散模型预测下一拍电流选最接近参考电流的矢量直接输出给IGBT驱动。2.2 前向欧拉离散化与滚动优化的成本函数采用前向欧拉法把状态方程离散化采样周期Ts内得到 i(k1) (1 - R·Ts/L)·i(k) Ts/L·(v(k) - e(k))。预测控制每步做两件事先由参考电流外推出i_ref(k1)再对j1..8计算成本函数。最常用的一步成本函数是αβ电流误差绝对值之和g(j) |iα_ref(k1) - iα_pred(j)| |iβ_ref(k1) - iβ_pred(j)|这就是滚动MPC的最简形式每个采样周期把预测时域向前滚动一拍穷举有限开关状态后取g最小的矢量。相比连续集MPC在每步解二次规划再送调制器这种有限集MPC天然匹配两电平变流器的开关行为计算量也小。2.3 最小可运行的MATLAB循环代码下面这段m文件是FCS-MPC的主循环电流用αβ坐标表示运行前先准备好电网电压eα/eβ序列和参考电流表。代码把数字控制的一步延迟做了进去第k拍算出的矢量在k1拍才作用到对象上这正是后面THD偏高的主要来源。%% 两电平变流器 FCS-MPC 滚动预测主循环 Ts 1e-4; % 采样周期100us开关频率10kHz R 0.1; L 5e-3; % 滤波电感内阻与电感量 Vdc 600; % 直流母线电压 % 8个开关状态(Sa,Sb,Sc)对应的alpha/beta电压分量 S [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 1 1]; Valpha [0, 2/3*Vdc, 1/3*Vdc, -1/3*Vdc, -2/3*Vdc, -1/3*Vdc, 1/3*Vdc, 0]; Vbeta [0, 0, 1/3*Vdc, 1/3*Vdc, 0, -1/3*Vdc, -1/3*Vdc, 0]; for k 2:N-1 % 需要k-1拍参考做外推从k2开始 % 参考电流线性外推一拍补偿计算延迟 ialpha_ref 2*ialpha_ref_tab(k) - ialpha_ref_tab(k-1); ibeta_ref 2*ibeta_ref_tab(k) - ibeta_ref_tab(k-1); % 对8个候选矢量逐一预测k1拍电流 for j 1:8 ialpha_pred (1 - R*Ts/L)*ialpha(k) Ts/L*(Valpha(j) - ealpha(k)); ibeta_pred (1 - R*Ts/L)*ibeta(k) Ts/L*(Vbeta(j) - ebeta(k)); g(j) abs(ialpha_ref - ialpha_pred) abs(ibeta_ref - ibeta_pred); end [~, opt] min(g); % 选成本最小的电压矢量 sa S(opt,1); sb S(opt,2); sc S(opt,3); % 对象在下一拍才收到该矢量模拟DSP一拍延时 ialpha(k1) (1 - R*Ts/L)*ialpha(k) Ts/L*(Valpha(opt) - ealpha(k)); ibeta(k1) (1 - R*Ts/L)*ibeta(k) Ts/L*(Vbeta(opt) - ebeta(k)); end这段代码有三个关键点。第一Valpha、Vbeta做成与开关矩阵S同索引的查找表枚举矢量时不用反复做三角函数运算MATLAB循环能快不少。第二参考电流用连续两拍线性外推得到i_ref(k1)直接拿当前拍参考值去预测下一拍电流会有系统性一拍滞后。第三对象更新放在min操作之后实际电流在k1拍才用上opt矢量。Sa/Sb/Sc这组输出后续接死区模块和IGBT模型也可以先保存成时间序列做离线和FFT分析。2.4 为什么模型里要故意留延迟和死区很多教程的MPC仿真把控制器计算和对象更新放在同一时刻仿真THD很漂亮上硬件却复现不了。工程仿真通常加两样东西一拍计算延迟和IGBT死区时间后者典型取2~3μs。死区会让电流过零点附近出现明显畸变这就是THD的主要贡献源。在MATLAB里模拟死区的最简单方式是对相邻两拍开关状态做异或某相发生切换时在换流瞬间把输出电压按死区时间和电流方向做一次符号修正。模型越接近实际后文ANN补偿量的提升效果越可信。3. ANN前馈人工神经网络补偿的引入与训练数据准备3.1 纯MPC的THD瓶颈来源FCS-MPC本质是模型驱动方法THD上限取决于预测模型和真实对象的一致程度。工程上三个因素让预测电流和实测电流出现系统性偏差其一是计算延迟预测用的是k拍状态输出却要k1拍才生效其二是死区时间IGBT切换瞬间输出电压和理想开关状态差一个死区电压脉冲其三是参数失配电感饱和后L实际变小、铜阻随温度升高控制器里的标称值跟不上。这三个因素叠加出的偏差不是白噪声而是和电流幅值、相位角、母线电压强相关的规律性模式。有模式就能用ANN前馈网络去学习并在控制周期里提前补偿。3.2 前馈网络的结构与特征选择这里选用单隐藏层的前馈人工神经网络输入特征全部取控制律里现成的量k拍实测电流iα(k)、iβ(k)k1拍参考电流iα_ref、iβ_ref电网电压eα(k)、eβ(k)以及母线电压Vdc。输出是两维预测误差Δiα、Δiβ定义为k1拍真实电流减去MPC一步预测电流。隐藏层神经元取15~20个激活函数tansig输出层purelin。误差映射曲面比较平滑网络太大反而会在相邻采样时刻之间产生振荡插值泛化变差。需要说明的是ANN只做前馈补偿不参与MPC滚动优化的机制本身。每个控制周期里先把ANN对偏差的估计加到8个候选矢量的电流预测上再代入成本函数枚举等效于把理想预测模型换成了带学习修正的等效模型。这样网络的输出即使有小的估计误差也不会直接参与状态量反馈稳定性风险比闭环神经网络小得多。3.3 训练数据怎么生成才公平训练数据的讲究比网络结构更影响最终THD。先从纯MPC仿真里跑多组工况在参考电流幅值、相位、Vdc三个维度做扫参然后把仿真日志构造成监督学习样本。特征里不能混入未来时刻的电流否则网络在验证时测试误差是假的拿到硬件上就露馅。% 由纯MPC仿真记录构造ANN训练数据 X [ialpha(1:end-1), ibeta(1:end-1), ... % k拍实测电流 ialpha_ref(2:end), ibeta_ref(2:end), ... % k1拍参考电流 ealpha(1:end-1), ebeta(1:end-1), ... % 电网电压 Vdc*ones(size(ialpha(1:end-1)))]; % 直流母线电压 Y [ialpha(2:end) - ialpha_pred(1:end-1), ... % 真实偏差 ibeta(2:end) - ibeta_pred(1:end-1)]; % 前馈网络训练 net feedforwardnet(18); net.trainFcn trainlm; % 小数据量用Levenberg-Marquardt net.divideFcn divideblock; % 按时间段切分防止相邻样本泄漏 net.trainParam.epochs 300; [net, tr] train(net, X, Y); % 导出为独立函数便于嵌入MPC主循环 genFunction(net, ann_compensator.m);这里两个参数要特别留意。trainFcn‘trainlm’在几万行样本内收敛最快数据量超过几十万行时换成trainscg省内存divideFcn用divideblock而不用默认的dividerand是因为功率仿真里相邻采样点电流高度相关随机划分会把几乎重复的样本同时分进训练集和测试集验证误差会假性偏低。训练完成后用genFunction把网络固化成独立m函数生成文件自带输入输出归一化系数集成时不需要再手工做mapminmax。3.4 把ANN补偿嵌入FCS-MPC主循环在2.3的循环里加几行就能完成集成每步先调用ann_compensator得到误差估计再把修正量加到两个电流预测表达式后面。因为补偿值与候选矢量j无关放在j循环外面只算一次计算量增加可以忽略。% 在MPC循环中集成ANN前馈补偿 feature [ialpha(k), ibeta(k), ialpha_ref, ibeta_ref, ... ealpha(k), ebeta(k), Vdc]; dI ann_compensator(feature); % 网络输出 [dIalpha; dIbeta]列向量 for j 1:8 ialpha_pred (1 - R*Ts/L)*ialpha(k) Ts/L*(Valpha(j) - ealpha(k)) dI(1); ibeta_pred (1 - R*Ts/L)*ibeta(k) Ts/L*(Vbeta(j) - ebeta(k)) dI(2); g(j) abs(ialpha_ref - ialpha_pred) abs(ibeta_ref - ibeta_pred); end加入补偿后网络估计的偏差项会抵消死区电压跌落和一拍延迟造成的系统误差成本函数选出的矢量更贴近理想轨迹。仿真时先固定工况验证补偿量大小正常情况下dI的幅值不超过额定电流的5%。如果看到补偿量很大或正负振荡多半是训练数据混进了启动暂态把前0.1s的样本裁掉再重训。4. 仿真参数整定、THD计算与MPCANN结果对比4.1 两电平变流器仿真的参数表仿真参数直接影响THD绝对值不同方案对比时必须固定同一套参数。下面列一份常用的两电平并网变流器参数直流侧按理想电压源处理重点考察交流电流质量。参数数值说明直流母线电压 Vdc600 V两电平三相桥滤波电感 L5 mH并网L型滤波等效电阻 R0.1 Ω电感内阻与线路采样/开关频率 fs10 kHzTs100μs电网电压220 Vrms / 50 Hz相电压参考电流幅值10 A有功电流指令死区时间2 μsIGBT死区总仿真时间0.5 s取稳态窗口分析4.2 纯m文件与Simulink两套仿真路径第一套路径是纯m文件循环网格搜索参考电流幅值、ANN隐藏层节点数时批量跑速度比Simulink快一个数量级。第二套路径把MPC和ANN放进MATLAB Function block主电路用Simulink里的通用桥和RLC支路建模能体现开关纹波和二极管续流细节。建Simulink模型前确认Simulink与Simscape Electrical组件已安装否则通用桥元件会缺失。建议先在m文件里验证算法逻辑再把逻辑原样搬进Simulink做最终波形对比。Simulink里挂ann_compensator.m时输入feature要以列向量传入函数内部保持double类型否则接口会自动转换类型导致维度错位。4.3 THD计算的FFT脚本THD定义是各次谐波有效值与基波有效值之比。计算前先截掉启动暂态并且只取整数个工频周期做FFT。下面的脚本对A相电流做单边频谱分析50Hz电网下基波正好落在第2个FFT频点不需要插值。% A相电流THD分析 fs 10000; f1 50; i_ss i_a(t 0.2); % 丢弃启动暂态 Ns fs / f1; % 每周期200点 Ns floor(length(i_ss) / Ns) * Ns; % 截取整数周期 i_win i_ss(1:Ns); I_fft fft(i_win) / Ns * 2; % 单边幅值谱 freqs (0:Ns/2-1) * fs / Ns; I1 abs(I_fft(2)); % 基波幅值 Ih abs(I_fft(3:Ns/2)); % 2次及以上谐波 thd_a sqrt(sum(Ih.^2)) / I1 * 100; % 单位%整数周期截断时保持矩形窗即可加Hann窗反而会让基波能量泄漏到两侧频点。脚本里t0.2s对应至少10个工频周期保证进入稳态。B相和C相电流用同样脚本分别算取三者的平均值作为整机THD指标。严格说这个值把开关纹波也算进了谐波项和功率分析仪的全频段读数接近如果只想看谐波可以在频域中剔除10kHz附近的开关频带再求和。4.4 纯MPC与MPCANN的THD对比解读在4.1参数下跑出来的典型结果是纯MPC无延迟补偿时THD在4.5%~5%参考电流加一拍线性外推后降到3.5%左右叠加ANN前馈补偿后能压到2%以内。三类结果对应关系如下表。方案配置A相THD主要现象纯MPC无延迟补偿4.8%电流过零畸变明显纯MPC外推参考电流线性外推3.5%相位滞后减轻MPCANN外推ANN前馈1.8%过零畸变与跟踪误差同时下降解读数字时要分清贡献源外推只解决计算延迟所以压低幅度有限ANN把死区造成的过零畸变和参数失配造成的跟踪误差一起学进补偿项从3.5%到1.8%的改善主要落在过零附近和相位跟踪误差上。开关频率纹波那部分高频能量没有被ANN消除也不应该让它消除那部分靠滤波器尺寸约束。5. 调低THD的三个实用技巧补偿增益、成本函数权重与FFT陷阱5.1 给ANN补偿加增益和限幅把ANN输出全量加进预测模型在个别工况下可能引入振荡。常见做法是加一个0.5到1.0之间的增益γ并对补偿量限幅。训练数据覆盖不到的极端工况比如Vdc骤降瞬间网络外推值可能很大限幅能防止补偿项把成本函数带偏。gamma 0.85; % 补偿增益 dI(1) max(min(gamma * dI(1), 2.0), -2.0); % 限幅±2A dI(2) max(min(gamma * dI(2), 2.0), -2.0);γ从0.5开始往上调同时观察电流跟踪误差和THD的变化。γ超过1.0后THD不再下降甚至回升这时一般要回头检查训练数据的覆盖范围而不是继续调增益。5.2 成本函数里加开关次数罚项THD和平均开关频率是一对矛盾。成本函数加入开关动作次数罚项后MPC会倾向保持当前开关状态平均开关频率下降开关纹波和谐波分布改变THD小幅上升。工程上把两者拉进同一个目标g(j) |iα_ref - iα_pred| |iβ_ref - iβ_pred| λ·n_switch(j)n_switch(j)是候选矢量相对上一拍矢量切换的相数λ取0.1到1之间。在4.1参数下λ0时平均开关频率约10kHzTHD约1.8%λ0.5时频率降到7.5kHzTHD升到2.4%。先按散热条件定允许的开关频率再反推λ比反过来调THD省事。5.3 复现对比结果前先检查三个FFT坑第一个坑是FFT窗口没取整周期频谱泄漏会让THD虚高判断方法算出的基波频率离50Hz越远窗口越不干净。第二个坑是把启动暂态算进THD。MPCANN的暂态响应比纯MPC快把暂态混进来会人为放大差异对比时统一从0.2s以后取窗。第三个坑是只报三相中最好的一相三相不平衡时要把三相THD都列出来并附带平均开关频率否则不同方案没法公平对比。验证最终效果时把ANN补偿项在d-q坐标系下做时间序列回放补偿量应该稳定在均值附近、没有低频振荡这比单独看THD一个数字更可靠。本文还有配套的精品资源点击获取
返回列表