0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MBDT实现PIL测试步骤

冬至子 来源:autoMBD 作者:autoMBD 2023-07-13 10:03 次阅读

1 从零新建一个MBDT工程

  • 按键中断检测S32K144 EVB上的按键SW2,每按下一次,红色LED灯切换一次亮灭状态;
  • 周期中断 :每0.5秒(2 Hz)进入一次周期中断服务函数,切换绿色LED灯亮灭状态,绿色LED灯会亮灭交替闪烁。

从零开始创建MBDT工程可以分为七个步骤:

**1. **将S32K144 EVB连接到电脑上,注意检查OpenSDA端口号和磁盘中S32K144 EVB盘号;

**2. **选择合适的位置作为MATLAB的工作空间,新建Simulink模型,并命名保存;

**3. **在模型中添加必要模块,包括MBD_S32K1xx_Config_Information、Digital_Input_ISR、Periodic_Interrupt_Timer和两个Function-Call Subsystem,如下图:

图片

添加模块到新建工程中 - From autoMBD

**4. **配置模块的参数,各个模块的配置可以参照以下截图(未给出截图的地方保持默认即可):

图片

MBD_S32K1xx_Config_Information配置1 - From autoMBD

图片

MBD_S32K1xx_Config_Information配置2 - From autoMBD

图片

Periodic_Interrupt_Timer配置 - From autoMBD

图片

Digital_Input_ISR配置 - From autoMBD

**5. **构建中断中执行的功能,本示例执行的功能较为简单,仅控制灯的亮灭。具体的模型如下(两个模型实际上是一样的,只不过输出的引脚不一样):

图片

周期中断的中断函数模型 - From autoMBD

图片

按键中断的中断函数模型 - From autoMBD

**6. **选择固定步长,配置工程的步长为0.001 s,设置求解器为离散求解器。工程的步长根据实际需要进行配置,但也要考虑模型的运算量。如果运算量大,在设置的步长内不能完成计算,会导致错误结果。

图片

工程求解器配置 - From autoMBD

**7. **至此MBDT的工程已经完成,可以生成代码了。在“C CODE”标签中点击“Build”(快捷键ctr + B),Simulink编译后会将代码自动下载到S32K144 EVB中,并运行起来。一切正常的话,下载后可以看到绿色LED灯在不断闪烁,按压SW2按键,可以控制红色LED灯的亮灭。

从零开始新建一个MBDT工程的基本步骤就是这样的了。

使用模型来构建自己的函数,最常用到的是Simulink中的 Stateflow ,它可以高效的产生和控制各种信号(Signal)、事件(Event)和状态(State)。后期会专门针对Stateflow开一期,欢迎关注。

2 使用S32DS下载生成的代码

可能有读者会疑惑,为什么需要使用S32DS下载生成的代码,Simulink不是已经下载好了吗?原因我总结有以下三点:

  • 最重要的一点是 ,底层驱动并不适合通过模型的方式来实现,最高效的还是使用S32DS来配置底层。一般建议将算法部分和底层驱动分开,这样的话需要有一个集成的过程,这就避免不了使用S32DS;
  • 使用S32DS进行debug更加高效和便捷,功能也更加强大;
  • 通过S32DS还可以对生成的代码进行扩展,扩展一些其它库或者技术栈。

从我目前了解到的,一个完整的基于MBD的开发,还很难摆脱对IDE的依赖,所以这里给出使用S32DS下载生成的代码的示例。同样给出一个视频教程时长约4 min 44 s。

使用S32DS下载生成的代码,一共有6个步骤:

**1. **打开S32DS,新建一个空白工程,并删去main.c文件。注意新建工程时不要选择SDK,因为生成的代码中已经包含了SDK,其他保持默认即可。

图片

*新建S32DS工程(不选择SDK) * - From autoMBD

但如果你在 模型中使用了AMMCLIB的相关模块 ,可以在新建的时候添加相应的AMMCLIB库:

图片

*添加AMMCLIB工具 * - From autoMBD

当然也可以通过添加库的方式添加AMMCLIB,添加库的方法是:选中工程,右键选择“Properties”,找到Paths and Symbols中的Library Paths和Libraries,添加S32K14x_AMMCLIB.a文件和路径即可(其他扩展库也是这样的方法添加):

图片

*添加AMMCLIB工具 * - From autoMBD

需要注意的是路径和库文件的格式,以我自己安装的AMMCLIB1.1.24为例,格式如下:

  • 库文件为 英文的冒号+文件名 ,不包含路径

图片

*添加库文件 * - From autoMBD

  • 库路径为 路径所在目录 ,不包含库文件

图片

*添加库路径 * - From autoMBD

视频展示的例程没有使用到AMMCLIB库,所以没有上述过程。

**2. **将Simulink生成的代码复制到S32DS工程中去,生成的代码在Simulink工作空间一个标题为 “工程名”+“_mbd_rtw” 的文件夹中。生成的代码源文件有:

  • common文件夹内所有文件
  • inc文件夹内所有文件
  • S32K144文件夹内所有文件
  • src文件夹内所有文件
  • 目录内所有***.c和.h文件***

将上述所有源文件复制到新建的工程中去:

图片

*复制生成的代码到S32DS工程中 * - From autoMBD

**3. **下一步,添加编译路径。需要添加的具体路径如下:

  • ${ProjDirPath}/src
  • ${ProjDirPath}/src/common
  • ${ProjDirPath}/src/inc
  • ${ProjDirPath}/src/S32K144/include
  • ${ProjDirPath}/src/src/clock/S32K1xx
  • ${ProjDirPath}/src/src/power/S32K1xx

值得注意的是, 如添加了库,那么库的include文件也需要包含到路径中 。还是以AMMCLIB1.1.24为例,库的包含路径为:

  • C:NXPAMMCLIBS32K14x_AMMCLIB_v1.1.24include

同样视频中也没有这个步骤。添加库的方法是:选中工程,右键选择“Properties”,找到Paths and Symbols中的“Includes”,依次添加上述路径即可。如下图所示:

图片

*添加必要的编译路径 * - From autoMBD

**4. **将startup.c、system_S32K144.c从编译路径中移除,因为这些文件和新建的S32DS工程有重复,编译会报错。从编译路径移除的方法是:选中要移除编译路径的文件,右键选中Buidl path -> Remove from -> Debug_FLASH。

移除编译路径的文件并没有被删除,但不会被编译,同时文件会变成灰色。如下图所示:

图片

*移除编译路径的文件 * - From autoMBD

5. 至此生成的代码已经成功导入到S32DS中了,可以点击编译查看是否有错误。

图片

*编译S32DS工程 * - From autoMBD

**6. **点击Debug虫,开始下载代码

图片

下载S32DS工程* * - From autoMBD

下载成功后,即可开始Debug,下图方框中的按钮分别是:运行、暂停、终止、断开连接、步入、步进、步出。

图片

*S32DS Debug调试 * - From autoMBD

通过S32DS下载的代码,功能和Simulink下载的是完全一样的。

3 基于MBDT实现PIL测试

通过MBDT,实现PIL(Processor In the Loop)是比较简单的。

PIL的基本原理是,Simulink在下载代码的同时,会在代码中包含一段通信协议。该通信协议可以接受Simulink发送的指令,并传输代码运算的结果到Simulink。

在Simulink的每一个步长中,Simulink会将输入信号发送到MCU,MCU计算好后,再将结果传回Simulink,周而复始实现PIL测试。一般采用的是串口通信方式,本示例中使用的是UART通讯。

**Tips:**该通信协议被称为rtiostream,是Simulink开发的,有兴趣的可以去了解一下。

这里要提一下,在MCU的应用中,是没必要做SIL(Software In the Loop)的,因为SIL是在电脑上跑(跑的是exe文件),而实际代码是在MCU中跑。这样的SIL测试结果没什么意义。MCU的应用中,一般只需要执行PIL和HIL。

开展PIL测试需要创建两个工程:Model工程是被测工程,会生成代码,并下载到MCU中运行;Top工程上位机工程,用于产生Model工程的输入信号,并与MCU进行数据交互。

本示例中对 AMMCLIB中的Sin函数进行PIL测试 ,测试其在MCU中的运行效果。开展PIL测试一共分为了四个步骤:

**1. **首先将S32K144 EVB连接到电脑上,并为MATLAB选择合适的工作空间。前文已经提到过,这里不再赘述。

**2. **创建Model工程。Model工程比较简单,可按以下步骤进行创建:

  • 添加MBD_S32K1xx_Config_Information模块,并配置参数;
  • 添加GFLIB_Sin_FLT、输入和输出模块;
  • 配置工程步长为0.001 s。

创建的Model工程如下图所示:

图片

*PIL测试的Model工程 * - From autoMBD

**3. **创建Top工程。可按以下步骤创建:

  • 添加Model模块,并关联到需要测试的model工程;
  • 添加对照模块,斜坡输入(斜率π,初始值-2π)作为输入信号;
  • 配置工程步长为0.001 s。

值得注意的是,PIL的输入信号要转换为单精度数,因为MCU处理的是单精度数据。创建的Top工程如下:

图片

*PIL测试的Top工程 * - From autoMBD

**4. **至此PIL测试的模型搭建已经完成了。将仿真总时长设为6 s,点击Run即可开始PIL测试。测试过程中的现象可查看上面的视频,这里给出一个测试结果的图:

图片

*PIL测试的结果 * - From autoMBD

由于斜坡输入的斜率为π,初始值-2π,总仿真时长为6π,那么测试的输入信号范围是-2π到4π。从上图可以看到,-2π到2π之间的曲线是吻合得较好的,当输入信号大于2π时,MCU的Sin函数计算结果开始出现失真。

查看AMMCLIB的手册说明,找到GFLIB_Sin_FLT的说明

图片

*GFLIB_Sin_FLT的说明 * - From AMMCLIB手册

可以看到这里要求的输入范围是-π到π。一般对于MCU来说,算力非常紧张,所以这种非线性的数学函数会有特殊的要求,如果不满足就会出现失真,结果不正确。所以我们在使用这类函数的时候一定要注意使用要求,从而保证最佳的性能。

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

    关注

    22

    文章

    1554

    浏览量

    107032
  • simulink仿真
    +关注

    关注

    0

    文章

    75

    浏览量

    8457
  • 按键中断
    +关注

    关注

    0

    文章

    14

    浏览量

    6412
  • MCU芯片
    +关注

    关注

    3

    文章

    221

    浏览量

    11144
  • S32DS
    +关注

    关注

    0

    文章

    8

    浏览量

    686
收藏 人收藏

    评论

    相关推荐

    MBDT实现电机控制设计

    本期也属于MBDT(Model-Based Design Tools)上手的一部分,主要是进阶一点的电机控制算法。
    发表于 07-13 09:39 405次阅读
    <b class='flag-5'>MBDT</b><b class='flag-5'>实现</b>电机控制设计

    如何在集成模型级别上使用S32K114评估板执行PIL

    怎样才能正确设置集成模型以便能够取回探查器结果?在集成级别上完全运行 PIL 的正确步骤是什么?我应该注意哪些约束以及应该考虑的总体最佳实践。 请注意,我使用的是特定架构,我在其中运行 MIL/SIL
    发表于 04-14 08:41

    尝试运行集成模型时出现PIL编译错误怎么解决?

    我正在使用 S32K144 和 MBDT 工具箱。我已经成功地在单个 Simulink 模型上执行 PIL,但是当拥有多个模型时,我会遇到一些我不清楚如何解决的问题。它是基于配置的还是执行 PIL 时需要考虑任何架构限制?
    发表于 04-20 06:41

    Matlab 2022b无法运行简单的 PIL S32CT示例是怎么回事?

    我正在为 Matlab 2022b 上的 S32K3** 版本 1.3.0 使用 MBDT 尝试一个简单的 PIL S32CT 示例。我正在开发的电路板是 NXP S32K3x4EVB-Q257
    发表于 04-21 07:31

    NXPs32k144 evb上的PIL仿真问题如何解决?

    确信所有的设置选项都是正确的(求解器,我配置硬件实现的设置,目标块是正确的......),但我不知道为什么我会遇到这个错误。 奇怪的是,如果我通过嵌入式编码器应用程序构建代码,我在刷新 evb 时不会遇到任何问题。 使用 harnest 和 SIL/PIL
    发表于 05-19 07:50

    为什么无法为“State_Machine”执行处理器在环 (PIL) 仿真?

    使用测试框架启动模型的 PIL 测试时,出现以下错误: 无法为“State_Machine”执行处理器在环 (PIL) 仿真。修复此错误,更新配置参数或创建支持的连接配置。请参阅产品帮
    发表于 05-22 07:44

    如何设置PIL模拟的环境以及在哪里包含我的C代码项目?

    我看到 MBDT 用于生成基于 Simulink 模块的 C代码,以减少原型设计过程。就我而言,我想 在 Simulink 中的 PIL(处理器在环)仿真中测试我自己的 C 代码项目。我想
    发表于 06-08 08:47

    关于MIL、SIL、PIL和HIL之间的联系和异同分析

    SIL和PIL是等效性测试测试的目的是为了验证自动生成的代码和模型具有相同的行为,既然如此,对于SIL和PIL测试用例就没有功能意义上的
    的头像 发表于 09-17 11:51 1.4w次阅读
    关于MIL、SIL、<b class='flag-5'>PIL</b>和HIL之间的联系和异同分析

    看直播 | 电机控制:如何使用恩智浦MBDT实现快速设计、开发和部署?

    直播预告 6月8日  15:15–15:45 MATLAB EXPO 2023年6月8日,恩智浦的技术专家将在MATLAB EXPO上发表题为 《电机控制:使用恩智浦 MBDT实现快速设计、开发
    的头像 发表于 06-04 13:45 778次阅读

    PiL测试实战(上)| 单元级代码的PiL测试

    作者:酷兔本兔小编:吃不饱对于嵌入式代码,为了测试软件能否在目标芯片上实现预期的功能,通常需要进行PiL测试(Processor-in-the-Loop-Testing)。目前市面上较
    的头像 发表于 11-22 10:19 599次阅读
    <b class='flag-5'>PiL</b><b class='flag-5'>测试</b>实战(上)| 单元级代码的<b class='flag-5'>PiL</b><b class='flag-5'>测试</b>

    PiL测试实战(下)| PiL阶段的闭环测试

    作者:酷兔本兔小编:吃不饱上篇我们介绍了单元级软件的PiL测试,对于集成级的PiL测试,其流程和单元阶段基本一致。然而,对于一些带有反馈控制逻辑的集成
    的头像 发表于 12-15 10:31 481次阅读
    <b class='flag-5'>PiL</b><b class='flag-5'>测试</b>实战(下)| <b class='flag-5'>PiL</b>阶段的闭环<b class='flag-5'>测试</b>

    TPT19新特性之在虚拟环境中执行PiL测试

    使用TPT 19,您可以获得一些PiL测试(处理器在循环测试)的新特性。在C平台上,您现在可以直接为您的PiL构建目标代码,并在目标板上或仿真环境中执行它。
    的头像 发表于 05-05 15:54 351次阅读
    TPT19新特性之在虚拟环境中执行<b class='flag-5'>PiL</b><b class='flag-5'>测试</b>

    MBDT快速上手

    基于模型的设计(Model-Based Design,MBD)的实战系列从MBDT开始。
    的头像 发表于 07-13 09:34 571次阅读
    <b class='flag-5'>MBDT</b>快速上手

    如何安装Python图像处理PIL

    安装PIL库 要使用PIL库,我们首先需要安装它。有两种方法可以安装PIL库: 方法一:使用pip命令,在终端或命令行中输入以下代码: pip install Pillow 方法二:从官网下
    的头像 发表于 09-12 17:15 1346次阅读
    如何安装Python图像处理<b class='flag-5'>PIL</b>库

    如何实现PIL和OpenCV之间图像数据的转换呢?

    PIL图像数据格式转换成OpenCV图像数据格式
    的头像 发表于 02-25 13:43 501次阅读