const int N=384;
float y[N]={0};
float e[N]={0};
float Kr=0.4;
const int K=4;
float err;//控制误差
float rpt;
//err相当与当前拍误差,e[0]相当于err的前N拍
//同理rpt相当于当前拍重复控制的输出量,y[0]相当于rpt的前N拍
//计算误差err
err=Vref-Vsample;
//计算重复控制输出
rpt=y[0]*0.95+e[K]*Kr;
for(int i=0;i
4 逆变器重复控制Matlab建模逆变器系统的Matlab模型如下。逆变器用单相半桥逆变桥拓扑结构,电池组分正负俩个电池组,每个电池组电压360V。逆变器输出电压有效值220V。电阻设置为6M,模拟空载电阻无穷大的情况。开关Breaker在0.5s时闭合,模拟突加RCD满载的情况。RCD电阻设置为6欧姆,电容设置为4000uF。
非线性负载模块详情
控制模块Control的详情如下。重复控制器采用嵌入式结构,嵌入在PI电压环前面。逆变控制采用电压外环PI控制,电流内环比例控制。1302是50%占空比,这个占空比补偿是用来是的半桥在无控制输入时输出电压保持为0。
重复控制模块的xiangq详情如下图。
5 控制仿真只用PI-P控制不用重复控制时输出电压和参考电压波形,之前俩个波形基本重合,到0.5s加了RCD负载后输出电压就比较糟糕:
输出电流波形,来看一下情况有多恶劣,电流峰值达到了200V:
输出电压THD,THD后面维持在10%左右:
采用重复控制以后 输出电压和参考电压波形 
输出电压的THD,稳定在4.5%附近:
输出电流波形:
总结 可见重复控制对于抑制RCD负载的效果非常好,带满载的时候THD都基本能稳定在4.5%左右。重复控制可调参数主要有幅值补偿系数和相位补偿系数。幅值补偿系数太过小的时候,重复补偿强度会很弱,效果不明显。重复控制系数过大的时候,重复控制会引起震荡。最终效果以在实际机器上调试为准,不过跟仿真基本差不离多少。下次有时间可以做一个用StateFlow编程驱动的更精确的模型出来。