最近在学 MPC(模型预测控制) ,看到b站一个视频讲解得挺好的:
MPC专题(一)_基于模型预测的并网变流器控制策略
本篇博客将参考视频给出Simulink仿真过程。
1.模型预测控制
Model Predictive Control (MPC)
概念:通过模型来预测系统在未来几个周期内的全部状态(有限个)来进行优化控制。
分类:按照是否需要调制单元可分为连续状态的模型预测控制(Continuous ControlSet-MPC, CCS-MPC)和离散状态的有限控制集模型预测控制(Finite Control Set-MPC, FCS-MPC) 两类。
2.有限控制集模型预测控制
Finite Control Set-MPC(FCS-MPC)
FCS-MPC 相比于 CCS-MPC 无需调制器、运算量小,而且无需综合考虑预测时域、控制时域、各时域目标函数权值系数的配合设计等,关键是直接利用了变换器的离散特性和开关状态有限的特性,将目标优化和开关状态决策过程优化成一步,这些显著的优点让其成为电力电子系统模型预测控制研究的热点。
步骤:
- 建立离散控制模型(欧拉前向离散化)
- 枚举并预测所有必需的变量(开关变量)
- 最小化成本函数
3.三相两电平并网逆变器
拓扑结构:直流电压源经三相电压型逆变器和L型滤波器并网。
开关器件:同相桥臂的开关器件不能同时导通。设开关信号1表示上桥臂导通,下桥臂关断,信号0表示上桥臂关断,下桥臂导通。
两电平逆变器具有八个开关状态,包括六个有源电压矢量和两个零电压矢量。
4.三相两电平并网逆变器模型预测电流控制
控制对象是并网电流(电感电流)
对于三相并网逆变器,代价函数为:
g i = ∣ i α ∗ ( k + 1 ) − i α ( k + 1 ) ∣ + ∣ i β ∗ ( k + 1 ) − i β ( k + 1 ) ∣ g_i = |i_\alpha^*(k+1)-i_\alpha(k+1)|+|i_\beta^*(k+1)-i_\beta(k+1)|gi=∣iα∗(k+1)−iα(k+1)∣+∣iβ∗(k+1)−iβ(k+1)∣
即预测电流和参考电流的误差。
g i g_igi 的下标 i 代表开关状态顺序(1-8),i α ∗ i_\alpha^*iα∗ 和 i β ∗ i_\beta^*iβ∗ 的下标 α , β \alpha,\betaα,β 为三相负载电流的 α , β \alpha,\betaα,β 分量(经过Clarke变换),上标 * 表示参考值。
(本篇博客实际仿真的时候没有考虑延时补偿)
⭐️步骤1:根据系统结构建立合适的系统模型。
⭐️步骤2:采集系统三相电流、电网电压值。
⭐️步骤3:根据系统模型建立离散化预测函数,预测变换器输出电流或并网功率。
⭐️步骤4:建立合适的代价函数,将8种开关状态依次带入代价函数。
⭐️步骤5:通过枚举的方式选择使代价函数最小的矢量所对应的开关状态进行下一控制周期的控制。
5.Simulink仿真
版本:matlab2019b
整体电路图:
仿真细节:
主电路:
坐标变换:
最优状态量生成:
Matlab Function:
function y = fcn(udc, ea, eb, ia, ib, iar, ibr) m = inf; L = 0.02; R = 0.05; T = 1/1e4; ua = 0; ub = 0; n = 1; for i = 1: 8 % 电压矢量 switch i % 0 0 0 case 1 ua = 0; ub = 0; % 0 0 1 case 2 ua = -udc/3; ub = -udc/sqrt(3); % 0 1 0 case 3 ua = -udc/3; ub = udc/sqrt(3); % 0 1 1 case 4 ua = -2*udc/3; ub = 0; % 1 0 0 case 5 ua = 2*udc/3; ub = 0; % 1 0 1 case 6 ua = udc/3; ub = -udc/sqrt(3); % 1 1 0 case 7 ua = udc/3; ub = udc/sqrt(3); % 1 1 1 case 8 ua =0; ub = 0; end % 负载电流预测 ia1 = (1-T*R/L)*ia+(ua-ea)*T/L; ib1 = (1-T*R/L)*ib+(ub-eb)*T/L; % 代价函数 g = abs(iar - ia1) + abs(ibr - ib1); if g < m m = g; n = i; end end y = n;
仿真结果:
电网侧电流(参考电流为6A):
FFT分析:
THD:4.07%
将电流参考值6A换成6A→3A,依旧能够实现跟踪参考值:
6.资源下载
7.后续
有小伙伴问在dq坐标系下该怎么做,其实这些都是类似的
原理图:
代码:
function [S1,S2,S3] = fcn(Vdc, theta, w, Eabc, Iabc, Iabcr, R, L, Ts) trans =2/3 * [cos(theta) cos(theta-2*pi/3) cos(theta+2*pi/3); -sin(theta) -sin(theta-2*pi/3) -sin(theta+2*pi/3)]; states = [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 1 1]; g = zeros(1,8); for i=1:8 Vabc = states(i,:)'*Vdc - Vdc/2; Vdq = trans*Vabc; Vd = Vdq(1); Vq = Vdq(2); Edq = trans*Eabc; ed = Edq(1); eq = Edq(2); Idq = trans*Iabc; id = Idq(1); iq = Idq(2); Idqr = trans*Iabcr; idr = Idqr(1); iqr = Idqr(2); id1 = (1-R*Ts/L)*id + Ts/L*(Vd-ed+w*L*iq); iq1 = (1-R*Ts/L)*iq + Ts/L*(Vq-eq-w*L*id); g(i) = abs(id1-idr) + abs(iq1-iqr); end [~,x_opt1] = min(g); S1 = logical(states(x_opt1,1)); S2 = logical(states(x_opt1,2)); S3 = logical(states(x_opt1,3));
参考
[1] DONG Q, WANG B, XIA L, et al. A Virtual Voltage Field-Weakening Scheme of Trajectory Correction for PMSM Model Predictive Control[J]. IEEE transactions on power electronics, 2023,38(3): 3044-3056.
[2] MPC专题(一)_基于模型预测的并网变流器控制策略_哔哩哔哩_bilibili[EB/OL]. [2022-8-11]. https://www.bilibili.com/video/BV1Fv4y1c7Ky/.