1 Stateflow是什么Stateflow是simulink的一个模块,在
char模块可以在simulink library-->stateflow-->chart路径中找到。chart可以使用状态流的方式实现对外部世界的编程,还可以使用Malab语言和c语言的语法来进行编程,以模拟真实单片机的编程环境。Simulink使用Stateflow编程来进行仿真,可以最大限度的模拟真实环境的物理行为。
2 逆变器的Simulink建模参见前篇博客
《逆变器的重复控制》,逆变器采用PI双闭环和嵌入式重复控制。
逆变器输出电压有效值220V。电阻设置为6M,模拟空载电阻无穷大的情况。开关Breaker在0.5s时闭合,模拟突加RCD满载的情况。RCD电阻设置为6欧姆,电容设置为4000uF。滤波电感1mH,滤波电容50uF。逆变器的仿真框图如下:
3 Char控制结构,char的内部结构见下图
chart首先计算Verr,Verr等于参考电压Vref和输出电压Vo之差,再扩大10倍(即采用10倍定标)。重复控制传递函数为写成差分方程形式为
设Kr=0.3,K=4,则重复控制量为:rpt=(yArr[0]*95+30*errArr[4])/100;
紧接着stateflow在一个383重循环里更新误差数组和重复控制数组。然后将重复控制输出叠加到输出误差。接着是一个对误差的判断,如果误差绝对值大于500,则丢弃,否则加入电压积分。这是一个典型的限幅式的PI。剩下的就是PI-P双闭环控制结构了。char模块的参数设置见下图
这里将chart模块的更新周期设置为Ts。这里Ts为52us。记得一定要将Action Language设置为C,这样chart才能使用类似于C语言的语法。值得一提的是,这里面的数组变量包括errArr和yArr,需要将它们设置的size设置为384。这是chart总定义数组的方法。
Matlab函数limit是个限幅函数,定义如下:function y = limit(x,down,up)
if xup
y=up;
else
y=x;
end
end
4 仿真我这里用的是Matlab2017b版本,仿真时菜单选择Rapid Accelerator模式,否则仿真速度会很慢。
仿真结果:参考电压和输出电压:
放大看:
输出电压THD: