基于F28335的Simulink代码生成(七)——成果展示

2024-01-20 21:30

本文主要是介绍基于F28335的Simulink代码生成(七)——成果展示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于F28335的Simulink代码生成系列文章目录

基于F28335的Simulink代码生成(一)——搞懂模型的运行逻辑
基于F28335的Simulink代码生成(二)——EPWM模块同步设置问题
基于F28335的Simulink代码生成(三)——EQEP模块获取光电编码器的速度与角度信息
基于F28335的Simulink代码生成(四)——如何链接可以访问底层文件的外部源文件和头文件
基于F28335的Simulink代码生成(五)——DMA的使用
基于F28335的Simulink代码生成(六)——如何修改变量的存储类型
基于F28335的Simulink代码生成(七)——成果展示


目录

  • 基于F28335的Simulink代码生成系列文章目录
  • 前言
  • 1 设计初心
  • 2 模型展示
    • 2.1 位置传感器配置
    • 2.2 可变频率电角度配置
  • 3 执行效率对比
  • 总结


前言

其实这个系列我已经很久没接触了,当初做这个系列的主要目的也是为了自己适时的记录。当然,能够有幸接触到Simulink代码生成这玩意儿也是源于一次合肥出差的经历,所以在这还得感谢合肥智能研究院的薛工,给予了我在代码生成上的快速起步,薛工实乃我心目中的工程老炮!
在这篇博客里,我会展示模型的部分组成和相关介绍。


1 设计初心

在这里我用一张图来总结我设计基于MBD设计的FOC代码生成。值得说明的是,完成了FOC的基本框架,那么在上面加各种算法都是极其容易的,就如同仿真一般,这也是我的主要目的。


2 模型展示

目前做的还比较简单,系统的话是简单的前后台系统,电机的实时控制都主要放在10kHz的EPWM中断中,使用System initalize以及Model source等模块应用一些外部IO的初始化和宏定义的声明。另外为了方便选择,将开闭环以及编码器的选择做成了列表的形式,看起来更加的直观。除此之外还有全局变量的声明,实际上全局变量的使用应该是越少越好的,但是为了在CCS中方便的选择变量进行观测,我将调试以及应用时需要用到的变量全部声明成了全局变量的存储方式。
在这里插入图片描述
在中断模块之中就是整个电机控制程序的核心所在了,除了一些基本的,也就是之前系列文章里提到的模块配置,包括EPWM,ADC,QEP、DMA等等,剩下的就是FOC算法、位置传感器的配置以及模拟开环角度的配置。模拟开环角度的配置是十分必要的,因为在使用位置传感器之前往往需要对传感器的零位以及电机的零位进行偏差校准(可以参考我之前的文章——关于电机转子初始位置检测的方法)

![在这里插入图片描述](https://img-blog.csdnimg.cn/c730909a24ee46d2b44d409689b408ea.png#

2.1 位置传感器配置

这部分的内容试我花的时间最久的,其他底层的配置都相对基础,但是位置传感器就出现了很多问题。首先是光码的配置,这还相对简单,一般来说使用QEP模块就能实现他的数据读取,不过需要另开一个中断,清除他的计数寄存器(貌似,记不太清了。)这也会导致一些问题,中断的打架等。
然而旋变的问题就更大了,在原本手写的代码中,旋变已经配置好了,需要SPI去读取信息,然后回读的数据拿来计算,但是本身SPI通信的时候问题就很多,直接调用SPI的模块显然无法完成我的需求,所以我当时只能通过外部调用文件的方式,直接调用源文件了。调用源文件的方法我也试了很久,网上介绍的都是调用普通的源文件,却没有相关的如何调用需要访问底层的源文件的方法,在自己的不断摸索中,最终找到了办法,见我之前的博客——(基于F28335的Simulink代码生成(四)——如何链接可以访问底层文件的外部源文件和头文件)
最终利用system out模块就可以直接调用添加进来的源文件的函数了,然后赋值给定义好的全局变量即可。这里也有点讲究,为什么存储类型一定要是全局的,也就是所谓的ExportedGlobal,原因在于只有这样,变量的名字才是确定的,如果是默认的存储类型,变量名是属于与你的simulink工程名同名的结构体类型下的。这显然对于移植不是很友好。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 可变频率电角度配置

这部分的话主要是调用了Simulink库中自带的几个锯齿波生成模块,因为电机的电角度实质上也就是幅值在(0~2pi)rad的锯齿波,不过他的频率是跟转速相关的,另外为了能够顺利启动,频率的设置需要循序渐进,从小到大,从而能够让电机的频率与设定的位置角频率能够匹配。这里也不多说了,见图吧。
在这里插入图片描述


3 执行效率对比

对于Simulink代码生成的话,还有一些点值得研究,例如其软件在环,硬件在环测试。另外其在生成代码时会考虑代码的执行效率以及运行时间,为了验证代码生成是否存在这么个优点,我特意对比了自己手写的代码和生成的代码之间的中断运行时间。在绝大多数条件一致
的情况下,我测到了如下波形对比,快了10us多。可以看到,MBD生成的代码执行效率的优势还是有的,毕竟几微妙对于单片机也能干很多事情了。
在这里插入图片描述

总结

这大概就是这个系列的最后一篇文章了,也是我在CSDN写的第一个技术文章系列,存在的小问题很多,不过希望也存在些许借鉴意义吧。如果后面还有要改进的地方,应该会再出一篇文章的。

这篇关于基于F28335的Simulink代码生成(七)——成果展示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/627389

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数_matlab pmsm-CSDN博客

Matlab simulink建模与仿真 第十章(模型扩展功能库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、模型扩展功能库中的模块概览         注:下面不会对Block Support Table模块进行介绍。 二、基于触发的和基于时间的线性化模块 1、Trigger-Based Linearization基于触发的线性化模块 (1)每次当模块受到触发时,都会调用linmod或者dlinmod函数

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示; 代码如下: Demo07.jrxml <?xml version="1.0" encoding="UTF-8"?><!-- Created with Jaspersoft Studio version 6.6.

AMEsim和Simulink联合仿真生成新的.mexw64液压模型文件

AMEsim和Simulink进行联合仿真非常重要的就是AMEsim经过第四阶段Simulation会在相同文件下面生成一个与AMEsim液压模型相同名字的.mexw64文件,在Simulink进行联合仿真的S-Function需要找的也就是这个文件,只不过输入的时候除了液压模型名字之外,后面有一个短下划线。 简而言之: AMEsim和Simulink联合仿真, 首先是需要AMEsim软

Matlab/Simulink和AMEsim联合仿真(以PSO-PID算法为例)

目录 安装软件和配置环境变量 Matlab/Simulink和AMEsim联合仿真详细流程 非常重要的一点 Simulink模型和AMEsim模型用S-Function建立连接 从AMEsim软件打开Matlab Matlab里的设置 Matlab的.m文件修改(对于PSO-PID算法) 运行程序 我印象中好像做过Matlab/Simulink和AMEsim联合仿真的分享似的