Simulink搭建C语言仿真模型

1、 在library库中查找S-Function Builder模块,拖入到空白区;
2、 该模块即为C语言代码模块,双击该模块,在Initialization栏,设置sample mode为离散采样,采样时间间隔Sample time value为控制周期,本示例设置为0.0001s,即10kHz控制频率;
Simulink搭建C语言仿真模型*-LMLPHP

3、 在Data Properties栏添加模块的输入输出端口,设置端口名称,为了方便理解,本示例将输入输出端口都设置成为1-D维度(单一维度),为了尽量贴近单片机的运行效果,Data type attributes将数据类型设置为single;
Simulink搭建C语言仿真模型*-LMLPHP

4、 在libraries栏添加仿真需要使用的.h文件和.c文件,注意文件中包括注释都不要出现中文字符,否则可能会报错;
Simulink搭建C语言仿真模型*-LMLPHP

5、 在Outputs栏编写输入输出端口与执行代码,这里可以将仿真的C代码精简为一个函数,在函数中编写算法,可以简化本栏的内容,将输入信号赋值给内部变量,将文件输出变量赋值为输出端口,注意,输入输出端口都是指针形式,要以数组形式操作
Simulink搭建C语言仿真模型*-LMLPHP

6、 其余栏可以留白,点击右上角build按键,如果没有报错,就成功了。
Simulink搭建C语言仿真模型*-LMLPHP

7、 我在搭建这个模块的过程中碰到的报错问题主要有:未定义变量(注意头文件的引用或者是中文字符)、端口变量要使用指针操作、未定义的方法(注意不要遗漏.c文件)等等,添加C代码时,要一部分一部分的添加,每添加一部分就编译一次,因为模块提示的错误很不清晰,不好定位问题;
8、 遗留:有些代码中包含有些初始化的内容,比如变量或者结构体初始化,在新的simulink版本中,这个模块有一个start栏可以添加用户初始化代码,但本人所使用的是2014版本,没有找到哪里可以添加初始化代码,因此本人将初始化代码以状态机的形式放在了算法函数中。此外,每一次运行仿真,都需要重新build一次该模块,否则下一次运行仿真,有些变量不会从初始化状态开始。
9、 最后的模型搭建结果如下图所示。
Simulink搭建C语言仿真模型*-LMLPHP

设置采样与控制频率为10kHz,PWM生成模块与电机的仿真补偿为1us,电机采样使用零阶保持器和数据类型转换器,产生10kHz的single类型采样数据,传递给仿真的C代码模块。

09-16 12:29