三相模型预测控制(MPC)逆变器,直流侧电压为650v,在dq坐标系下进行控制,电压外环采用PI算法

三相模型预测控制(MPC)逆变器,直流侧电压为650v,在dq坐标系下进行控制,电压外环采用PI算法,电流内环采用模型预测控制算法,通过matlab function实现,输出参考电压值可调。

三相逆变器的模型预测控制玩得溜,关键得把电压环和电流环整明白了。今天咱们就拆解一个650V直流侧电压的案例,看看怎么在dq坐标系里用PI+MPC玩转这个控制结构。

电压外环这个老伙计还是得靠PI镇场子。在同步旋转坐标系里,直流母线电压的波动会被PI控制器收拾得服服帖帖。这里有个小技巧------把PI输出直接当作电流内环的q轴参考值,这样电压环和电流环就实现了无缝对接。

matlab 复制代码
function [id_ref, iq_ref] = VoltagePI(vdc_ref, vdc_meas, Kp_v, Ki_v)
    persistent integral;
    if isempty(integral)
        integral = 0;
    end
    error = vdc_ref - vdc_meas;
    integral = integral + error * Ts;
    iq_ref = Kp_v * error + Ki_v * integral;
    id_ref = 0; % 保持d轴电流为零实现单位功率因数
end

这段代码里的Ts是采样时间,注意积分项要做饱和处理防止windup。这里直接把q轴电流参考交给电流环去追,比传统的双闭环结构少了一层耦合关系。

电流环才是MPC的主战场。咱们用离散化模型预测未来三个控制周期内的电流变化,在8个基本电压矢量里挑最合适的那个。这里有个关键点------得把逆变器的数学模型转换成离散状态方程:

matlab 复制代码
function [A_d, B_d] = create_model(L, R, Ts)
    A = [-R/L   377; 
         -377  -R/L];
    B = [1/L  0;
         0    1/L];
    sysc = ss(A, B, [], []);
    sysd = c2d(sysc, Ts);
    A_d = sysd.A;
    B_d = sysd.B;
end

注意这个377其实是电网角频率(60Hz系统),换成50Hz系统要改成314。拿到离散模型后,预测控制就能开干了:

matlab 复制代码
function [v_alpha, v_beta] = MPC_current(id, iq, id_ref, iq_ref, Vdc)
    candidates = [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 1 1]; % 8个基本矢量
    min_cost = inf;
    best_vec = 1;
    
    for k = 1:8
        % 矢量转换到αβ坐标系
        vec = candidates(k,:);
        [v_alpha, v_beta] = vec2alphaBeta(vec, Vdc);
        
        % 三步步长预测
        i_pred = [id; iq];
        for step = 1:3
            i_pred = A_d * i_pred + B_d * [v_alpha; v_beta];
        end
        
        % 成本函数计算
        cost = abs(i_pred(1)-id_ref)^2 + abs(i_pred(2)-iq_ref)^2;
        if cost < min_cost
            min_cost = cost;
            best_vec = k;
        end
    end
    [v_alpha, v_beta] = vec2alphaBeta(candidates(best_vec,:), Vdc);
end

这个预测窗口选了三步,实际调试时可以根据处理器性能调整。候选矢量的评估用了平方误差加权,想重点控制哪个轴电流可以加权重系数。

最后在Simulink里把这两个模块组合起来,记得做好坐标变换。调试时先调电压环的PI参数,保证母线电压稳定后再开电流环的MPC。实测发现这种结构在负载突变时恢复速度比传统PI快30%以上,但计算量确实上去了------得用至少200MHz的主频才能跑稳。

有个小彩蛋:修改MPC函数里的预测步长会影响动态响应和计算延迟。试过把三步改成两步,开关频率能降15%,不过电流THD会从1.8%升到2.5%,鱼和熊掌得看具体需求了。