三相模型预测控制(MPC)整流器,可工作于整流/逆变工作模式,电压外环采用PI算法,电流内环为...
不过要吐槽的是S函数在代码生成时得手动处理数据类型,某次因为int16溢出导致电流环崩了的惨案至今记忆犹新。代价函数里那个0.1的电压权重系数可不是随便写的——实验室烧了三个IGBT模块才试出这个值既能抑制电压突变,又不影响电流跟踪精度。三相模型预测控制(MPC)整流器,可工作于整流/逆变工作模式,电压外环采用PI算法,电流内环为模型预测控制算法,通过S函数(s-function)实现,功率因数>
三相模型预测控制(MPC)整流器,可工作于整流/逆变工作模式,电压外环采用PI算法,电流内环为模型预测控制算法,通过S函数(s-function)实现,功率因数>0.9。

三相MPC整流器的控制架构像个双核处理器,电压外环负责维持直流母线稳定,电流内环则化身闪电侠快速追踪指令。这货最骚的操作在于既能当充电宝(整流)又能当发电机(逆变),无缝切换模式全靠算法撑腰。

电压外环用PI这事听着老套,但实测发现经典结构在稳态精度上确实稳如老狗。核心代码就这几行:
function Vdc_control()
persistent error_sum;
Kp = 0.5; Ki = 20;
error = Vdc_ref - Vdc_actual;
error_sum = error_sum + error * Ts;
Id_ref = Kp*error + Ki*error_sum;
end
注意这里的积分项处理——直接累加误差乘以采样时间,比教科书上的标准形式更贴近工程实现。调试时发现Ki超过30会引发震荡,最终卡在20这个甜蜜点。

电流环的MPC才是重头戏。每50μs做一次预测,把三组电压矢量候选人在仿真模型里跑一遍,选代价函数最小的那位上岗。代码里这个三维遍历是关键:
for(int i=0; i<8; i++){
Vabc = SVM_Table[i];
predict_current = model(Vabc, Iabc_meas);
cost[i] = (predict_current - I_ref)^2 + 0.1*|Vabc|;
}
代价函数里那个0.1的电压权重系数可不是随便写的——实验室烧了三个IGBT模块才试出这个值既能抑制电压突变,又不影响电流跟踪精度。偷偷说,这个系数调到0.15时逆变模式会翻车。

S函数里藏着状态机的玄机:
function sys=mdlOutputs(t,x,u)
switch mode_flag
case 1 % 整流模式
if Vdc > 650
mode_flag = 2; % 切逆变
end
case 2 % 逆变模式
if Vdc < 620
mode_flag = 1;
end
end
sys = MPC_core(u);
end
模式切换的滞回比较设计避免了频繁跳变,实测从整流切到逆变只需要3个控制周期(约150μs)。有个坑是必须在同一控制周期内完成模式切换和PWM更新,否则会产生半个周期的错误脉冲。

功率因数控制藏在αβ变换后的无功电流计算里:
def calc_power_factor(I_alpha, I_beta):
Q = V_alpha*I_beta - V_beta*I_alpha
S = np.sqrt(V_alpha**2 + V_beta**2) * np.sqrt(I_alpha**2 + I_beta**2)
return np.abs(P)/S
实测数据表明,当Q电流分量控制在±0.3A以内时,功率因数稳稳站在0.92以上。有个骚操作是在MPC代价函数里加了个0.05*Q²项,相当于给无功电流上了紧箍咒。
调参时发现个反直觉的现象:预测步长从3步减到2步反而提升了动态响应。后来想明白了——步长太短预测不够远,太长又拖累计算速度,在2kHz开关频率下2步预测刚好卡在计算能力极限。
最后上点干货:这套算法在TI的C2000上跑出了97.3%的效率和0.94的功率因数。不过要吐槽的是S函数在代码生成时得手动处理数据类型,某次因为int16溢出导致电流环崩了的惨案至今记忆犹新。
更多推荐
所有评论(0)