两电平逆变器调制的S函数示例

描述

在上期中介绍了在Simulink仿真中用S函数构建控制器,方便代码从仿真到嵌入式设备的迁移,本期则直接进入正题,通过两电平逆变器模型来介绍S函数在电力电子仿真中的应用。

01S函数的简单介绍

官方对S函数是这样介绍的:S-Function 可以使用 MATLAB®, C, C++, Ada,或 Fortran 语言来编写。 使用 MEX实用工具,将 C, C++, Ada,和 Fortran 语言的 S-Function 编译成MEX-文件,在需要的时候,它们可与其它的MEX-文件一起动态地连接到 MATLAB 中。

S-Function 使用一种特殊的调用格式让你可以与 Simulink 方程求解器相互作用,这与发生在求解器和内置 Simulink块之间的相互作用非常相似。 S-Function 的形式是非常通用的,且适用于连续、离散和混合系统。

这段话包含以下几层意思:

1. S函数可以用m语言,c语言等多种语言编写,Simulink库中的User-Defined Functions中的S-Function Example包含了多种语言的多种模板, S-Function Builder 是一个 Simulink 模块,可以通过设定自动生成c语言的S函数;

S函数

图1 Simulink库中S函数相关模块

2. S函数与Simulink的运行原理相似,要了解S函数是如何工作的,就要了解Simulink 是如何进行模型仿真的, Simulink模型的执行分几个阶段进行。 首先进行的是初始化阶段,在此阶段, Simulink将库块合并到模型中来,确定传送宽度、数据类型和采样时间,计算块参数,确定块的执行顺序,以及分配内存。 然后, Simulink进入到“仿真循环”,每次循环可认为是一个“仿真步”。 在每个仿真步期间,Simulink 按照初始化阶段确定的块执行顺序依次执行模型中的每个块。 对于每个块而言,Simulink 调用函数来计算块在当前采样时间下的状态,导数和输出。 如此反复,一直持续到仿真结束。

下图所示为一个仿真的步骤:

S函数

图2 Simulink 执行仿真的步骤

3. S函数使用一种特殊的调用格式使其在 Simulink方程求解器相互作用,S函数主要通过多种特殊格式的回调函数,用来表示仿真执行的初始化、输出、计算导数、结束等多个阶段。

02两电平逆变器调制的S函数示例

文章结尾的下载链接提供了两电平逆变器调制的S函数的示例程序,该示例主体程序部分如下:

S函数

图3 两电平逆变器调制的S函数主体部分

该S函数主要包含以下回调函数:

a. mdlInitializeSizes回调函数

对参数进行初始化设置,比如离散状态个数、连续状态个数、模块输入和输出的路数、模块的采样周期个数、状态变量初始数值等;

b. mdlInitializeSampleTimes回调函数

该函数设置S-Function模块的采样时间,决定了mdlOutputs多久执行一次;

c. mdlInitializeConditions回调函数

初始化时调用,对输入输出数组指针地址进行定义;

d. mdlOutputs回调函数

可以用来执行我们定义的函数,本例中执行了三个任务:

来自S函数的外部数据的输入;

执行100us的定时中断(计算输出电压相位,输出电压指令)、741us的定时中断(模拟PWM中断,调用两电平SVPWM调制算法)。

S函数输出(输出内部监视变量和PWM波占空比)

e. mdlUpdate回调函数

如果该块具有离散的状态变量,则在处理完所有块的输出函数之后的主要时间步中,将调用一次更新函数,本例未使用;

f. mdlTerminate回调函数

S函数终止时执行的函数,本例未使用。

多个回调函数的执行顺序如下:

S函数

图4 两电平逆变器调制的S函数回调函数执行顺序

完成S函数的c文件的编写后,需要在Matlab中调用编译器对S函数的c文件进行编译。 由于Matlab存在32位和64位,调用的编译器也不一样。 32位直接使用自带的lcc-win32即可,64位则需要额外安装的VS的C++编译器。 matlab通过mex-setup命令选择编译器。

本示例模型在Simulink的File->Model Properties->Model Properties->Callbacks->InitFcn中通过以下命令对S函数编译,使模式在每次运行时执行该编译命令生成格式mexw64的文件给Simulink模型调用:

-g -v InveterController.c Func_SVPWM_2L.c...

03仿真结果

运行仿真模型:INV_2L3Ph_SPWM.slx,在S函数的mdlOutputs回调函数中,调用Func_SVPWM_2L()调制函数之后,数组y_Scope输出ABC三相PWM波的占空比为:

S函数

图5 ABC三相PWM波的占空比

在S函数的mdlOutputs回调函数中采集了逆变器的模拟量,通过数组y_Scope输出,其波形为:

S函数

图6 S函数的输出波形

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分