在上期中介绍了在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函数;
图1 simulink库中s函数相关模块
2. s函数与simulink的运行原理相似,要了解s函数是如何工作的,就要了解simulink 是如何进行模型仿真的, simulink模型的执行分几个阶段进行。 首先进行的是初始化阶段,在此阶段, simulink将库块合并到模型中来,确定传送宽度、数据类型和采样时间,计算块参数,确定块的执行顺序,以及分配内存。 然后, simulink进入到“仿真循环”,每次循环可认为是一个“仿真步”。 在每个仿真步期间,simulink 按照初始化阶段确定的块执行顺序依次执行模型中的每个块。 对于每个块而言,simulink 调用函数来计算块在当前采样时间下的状态,导数和输出。 如此反复,一直持续到仿真结束。
下图所示为一个仿真的步骤:
图2 simulink 执行仿真的步骤
3. s函数使用一种特殊的调用格式使其在 simulink方程求解器相互作用,s函数主要通过多种特殊格式的回调函数,用来表示仿真执行的初始化、输出、计算导数、结束等多个阶段。
02两电平逆变器调制的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函数终止时执行的函数,本例未使用。
多个回调函数的执行顺序如下:
图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波的占空比为:
图5 abc三相pwm波的占空比
在s函数的mdloutputs回调函数中采集了逆变器的模拟量,通过数组y_scope输出,其波形为:
图6 s函数的输出波形
AHKC-EKBDA霍尔传感器 响应快精度高 抗干扰能力强
基于NVIDIA Jetson的智能机器人开发
高性热插拔控制器LM25066的性能特性及应用电路分析
小米官方微博预告小米一亿像素手机即将登场 首发机型或为小米MIX4
全球CEO峰会&全球分销与供应链领袖峰会”在深圳圆满结束
两电平逆变器调制的S函数示例
RV线是什么电线,RV线的具体作用都有哪些
基于ARI_PI的一氧化碳气体浓度检测系统图解
探月工程新进展 嫦娥五号组合体成功分离即将月面软着陆
5g新时代:速度仅是基础,终将助力经济
2021年家电市场的三大挑战
谷歌欲建阿拉伯和以色列之间的光缆,以出口互联网
模拟设计本质已变,工程师何去何从
讲解一下通用可视化搭建平台整体的设计思路
如何使用Vitis AI Library来安装、使用和开发应用
碳化硅电力电子器件的发展现状分析
石墨烯的新进展,石墨烯实现表面纳米微孔成孔,孔径可控
筑波科技与美商泰瑞达携手ETS开创化合物半导体IC动态测试新纪元
如何制作一个简易的磁控门窗报警器?
民生通讯正式与中国电信在移动通信转售业务领域开展合作