前言:电机控制的开发验证有多种途径和方式,常见的分为模型仿真验证和硬件测试两大类。接下来以 MATLAB+CCS 的 IDE 开发环境来进行仿真模型框架的搭建和对比。
一、内容安排
本期文章主要介绍并对比几种不同类型的仿真框架搭建,模块化搭建、M 语言实现、C 集成和 CCS 工程代码搭建(硬件测试)。从几个方面来比较不同类型的仿真验证框架优势和缺点。
表 1 不同类型的仿真模型对比
在接下来的电机控制学习过程中,除控制理论外还需要加强自己的验证工具和编程能力的提高。
二、不同类型的仿真框架的搭建
学习本章内容的前提需要安装 MATLAB(内置 C 编译器)和 CCS 软件,并具备一定的 C 语言的编程能力。以前期文章介绍的 SVPWM 为仿真验证内容进行对比。
2.1 模块化仿真框架
MATLAB 模块化仿真,就是从封装器件库里直接拖取现成的作用模块,根据控制理论(一般是微分方程)进行搭建形成验证系统。但如果系统复杂,模块化仿真未必能够进行准确地模拟。
模块化仿真通用性差且不利于后续持续性开发。个人觉得搭建控制验证仿真框架,此类型的应当只是备选方案。
图 1.1 模块化搭建的 SVPWM 系统
图 2.2 马鞍波
2.2 M 语言实现的仿真框架
图 3.3 M 语言实现的 SVPWM 系统
图 4.4 马鞍波
M 语言实现的控制系统,像基本的硬件模拟(电机、逆变器)可以采用封装模块,控制部分可以采用 M 语言进行实现,过程简单方便且通用性强、利于后续的持续性开发。
2.3 C 集成类型的仿真框架
C 集成类型的仿真搭建具有一定的难度,本节简单介绍一下该类型的仿真框架的搭建过程。首先 MATLAB 得安装 C 编译器,模型代码存放得路径得全英文。
2.3.1 什么是 S-Function
S-Function
为你提供了一种在 Simulink 模型中增加自制块的手段,你可以使用 MATLAB 和 C 语言来创建自己的块。按照下面一套简单的规则,你可以在 S-Function 中实现自己的算法。在你编写一个 S-Function 函数,并将函数名放置在一个 S-Function 块中(在用户定义的函数块库中有效)之后,通过使用 masking 定制用户界面。
2.3.2 在模型中使用 S-Function
为了将一个 S-Function
组合到一个 Simulink 模型中,首先从 Simulink 用户定义的函数库中拖出一个 S-Function 块,然后在 S-Function 块对话框中的 S-Function name 区域指定 S-Function 的名字。如下图所示:
图 1.5 S-Function 块、对话框、及决定块功能的源文件之间的关系
在本例中,模型包含了两个 S-Function 块,这两个块使用同一个源文件(mysfun,可以是一个 C MEX 文件,或者是一个 M 文件)。如果一个 C MEX 文件与一个 M 文件具有相同的名字,则 C MEX 文件被优先使用,即在 S-function 块中使用的是 C MEX 文件。
2.3.3 S-Function 的工作原理
要创建 S-Function,你必须了解 S-Function 是如何工作的。要了解 S-Function 如何工作,则需要了解 Simulink 是如何进行模型仿真的,那么由需要了解块的数学公式。因此本节首先从一个块的输入、状态和输出之间的数学关系开始介绍。
仿真过程:
Simulink 模块的执行分几个阶段进行。首先进行的是初始化阶段,在此阶段,Simulink 将库块合并到模型中来,确定传送宽度、数据类型和采样时间,计算块参数、确定块的执行顺序,以及分配内存。然后,Simulink 进入到“仿真循坏”,每次循环可认为是一个“仿真步”。在每个仿真步期间,Simulink 按照初始化阶段确定的块执行顺序依次执行模型中的每个块。对于每个块而言,Simulink 调用函数来计算块在当前采样时间下的状态、导数和输出。如此反复,一直持续到仿真结束。
图 1.6 Simulink 执行仿真的步骤
2.3.4 S-Function 的回调程序
2.3.5 S-function 实现过程的解析
simstruc.h 文件定义了一个名为 SimStruct 的数据结构,Simulink 使用它来维护 S-function
的有关信息。simstruc.h 文件也定义了一些宏,可让你的 MEX 文件在 SimStruct 中设置某些值,或从 SimStruct 中获取某些值。
2.3.6 CMEX 仿真的搭建
只需要搞明白输入/输出即可,sfunction 内部的模板可以参考范例。
图 1.8 C MEX 仿真波形变化
2.4 CCS 工程代码实现的验证框架
使用 CCS 软件编程涉及到的就是硬件验证,后续会重点介绍 CCS 工程模板的搭建实现过程和配套硬件的验证内容。
三、总结
基于 MATLAB+CCS 的 IDE 开发环境,方便后续持续性开发,首选 M 语言实现或 C MEX 类型的仿真验证框架。
讨论:采用状态机类型的仿真类型在电机控制领域是否常见?
END
作者:浅谈电机控制
来源:浅谈电机控制
推荐阅读
更多电机控制技术干货请关注电机控制专栏。
迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。