逆变器的stateflow仿真

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。

逆变器的仿真框图如下:

逆变器的stateflow仿真_第1张图片

3 Char控制结构

,char的内部结构见下图

逆变器的stateflow仿真_第2张图片

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模块的参数设置见下图

逆变器的stateflow仿真_第3张图片

这里将chart模块的更新周期设置为Ts。这里Ts为52us。记得一定要将Action Language设置为C,这样chart才能使用类似于C语言的语法。值得一提的是,这里面的数组变量包括errArr和yArr,需要将它们设置的size设置为384。这是chart总定义数组的方法。

逆变器的stateflow仿真_第4张图片

Matlab函数limit是个限幅函数,定义如下:

function y = limit(x,down,up)
if xup
        y=up;
    else
        y=x;
    end
end

4 仿真

我这里用的是Matlab2017b版本,仿真时菜单选择Rapid Accelerator模式,否则仿真速度会很慢。

逆变器的stateflow仿真_第5张图片

仿真结果:

参考电压和输出电压:

逆变器的stateflow仿真_第6张图片

放大看:

逆变器的stateflow仿真_第7张图片

输出电压THD:

逆变器的stateflow仿真_第8张图片

你可能感兴趣的:(自动控制)