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

2023-05-16

基于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写的第一个技术文章系列,存在的小问题很多,不过希望也存在些许借鉴意义吧。如果后面还有要改进的地方,应该会再出一篇文章的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • simulink搭建简单的陷波滤波器

    simulink搭建简单的陷波滤波器 陷波滤波器的设计模型的搭建通过matlab自带软件设计的滤波器与simulink自带滤波器模块对比 陷波滤波器的设计 具体设计方法可参见这篇 xff1a 算法学习笔记之50HZ陷波滤波器设计 下面给出各
  • 基于F28335的Simulink代码生成(七)——成果展示

    基于F28335的Simulink代码生成系列文章目录 基于F28335的Simulink代码生成 xff08 一 xff09 搞懂模型的运行逻辑 基于F28335的Simulink代码生成 xff08 二 xff09 EPWM模块同步设置
  • 基于simulink的svm-dtc-adrc控制建模与仿真

    目录 一 理论基础 二 核心程序 三 仿真结论 一 理论基础 永磁电机由于没有励磁绕组和励磁装置 xff0c 不消耗励磁功率 xff0c 对磁极设在转子的电机 如一般同步电机 还可省去滑环和电刷 随着永磁材料和控制技术的发展 xff0c 永
  • Keil+Simulink生成Xcp标定协议A2L文件

    Keil 43 Simulink生成Xcp标定协议A2L文件 由于最近要为ECU移植XCP协议 xff0c 所以记录一下 xff0c 我使用的MCU为NXP S32K144 IDE选用MDK 官方IDE S32DS无代码联想功能 xff0c
  • 使用Simulink进行无刷直流电机控制仿真

    这段时间刚开始接触Matlab中的Simulink仿真 xff0c 我就结合自己的专业 xff0c 利用Simulink进行了无刷直流电机的仿真 xff0c 因为Simulink工具箱里面有很多可用的模块 xff0c 所以建模过程变得非常简
  • 从Simulink到PX4——Simulink-PX4插件安装与环境搭建

    从Simulink到PX4 Simulink PX4插件安装与环境搭建 前言0 准备工作1 安装WSL2 Setting up the PX4 Toolchain on Windows3 Setting up the PX4 Tool Ch
  • Simulink中的Simscape

    Simscape是在Simulink环境下创建物理系统模型的工具和语言 8 它可以通过基于Matlab语法的Simscape语法来制作自己的物理仿真系统 如果使用Simscape中现有的基础库 xff08 Foundation Librar
  • 手把手教你使用simulink配合STM32CUBEMX (生成keil项目实战)

    本文的作者在自学过程中发现该类资料的缺少 以及前人叙述不够完善的情况下 进行了本文的创作 文章将一步一步的讲解如何使用simulink将F4的灯点亮 更多的功能我们一起探索 别的型号的 cpu 大家可以类比进行 1 首先是将MATLAB安装
  • 用simulink 模型自动生成代码之 SPWM

    正弦PWM的信号波为正弦波 就是正弦波等效成一系列等幅不等宽的矩形脉冲波形 其脉冲宽度是由正弦波和三角波自然相交生成的 正弦波波形产生的方法有很多种 但较典型的主要有 对称规则采样法 不对称规则采样法和平均对称规则采样法三种 第一种方法由于
  • 单相半桥逆变器仿真技巧

    1 拓扑与控制 单相半桥逆变器拓扑如下 电压环和电流环控制图如下 调制方式如下 2 仿真步骤 单相半桥逆变器的仿真应该遵循以下步骤 1 选择合适的滤波电感和滤波电容 一般是mH级别 2 选择合适的调制度 注意由于半桥电容电压波动过大 往往不
  • 单相Boost功率因数校正电路(PFC)设计与仿真(Simulink & Saber):第一章 PFC基础知识与电路参数设计

    写在前面 教程是根据Mathworks公司的有源功率因数校正教程 点这里跳转 和那日沙等老师编著的 电力电子 电机控制系统的建模及仿真 改写的 设计思路基本与之一致 嫌看文章麻烦的同学可以直接跳转看视频和查阅相关书籍 Simulink仿真部
  • Matlab Simulink 常用快捷操作和功能(1)

    1 快速查找library里面的模块 双击左键 然后输入要查询的模块名称 gt 2 block 和 signal 的命名修改 单击block 显示 修改名字 3 Simulink支持从块参数对话框中创建变量 可以在Simulink中创建MA
  • Simulink 学习(一)

    一 基本操作 Simulink多用于仿真 分为模块 输入 输出 matlab中 有两种方法打开 第一种就如图所示 第二种直接在命令窗口输入 simulink 模块库 例如 常量倍数放大利用Math Oprations中的Gain模块 双击可
  • matlab中的mod和rem的异同

    rem和mod是求余的 但是算法不同 差异在哪呢 就在于分别使用了fix和floor 函数fix和floor都是圆整用的 fix是向0的方向圆整 如fix 1 5 1 fix 1 5 1 而floor是向下圆整 如floor 1 5 2 f
  • 2021-02-28

    simulink控制器封装库 控制器封装库 一 封装库的安装和LADRC模块的使用
  • 1. 模型的代码生成 - 代码生成方法

    文章目录 1 模型的代码生成 代码生成方法 1 1 模型的解算器solver设置 1 2 生成的系统目标文件设置 1 3 其它生成代码的设置 1 3 1 硬件平台设置 1 3 2 Optimization页面的设置 1 3 3 Report
  • VSC/SMC(十六)——自适应鲁棒滑模控制

    目录 1 参数不定和扰动不定但有界的系统 2 滑模控制自适应律设计 2 1控制律设计总结 3 仿真分析 3 1 PD控制 3 2普通自适应律 3 3映射自适应律 3 4总结 4学习问题 1 参数不定和扰动不定但有界的系统 其中 2 滑模控制
  • 感应(异步)电机磁场定向控制电流环PI控制参数设计

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制速度环PI控制参数设计 目录 电机控制系列文章 前言 一 并联型PI与串联型PI 二 被控对象模型 三 电流环闭环传递函数 四 电
  • 将 Matlab Simulink 模型保存为带有紧密边界框的 PDF

    给定一个 Simulink 框图 模型 我想生成一个 屏幕截图 以便稍后在 LaTeX 文档中使用 我希望这个屏幕截图是带有紧密边框的 PDF 矢量图形 gt pdflatex 我的意思是图表周围没有不必要的空白 我搜索了网络 搜索了 st
  • 是否可以通过编程方式运行 Simulink 模型并测量其状态?

    我希望为现有 Simulink 模型设置一个测试集 理想情况下 我可以完全控制模型 明确地步进并测量模型中任何总线上任何信号的状态 正如可能已经收集到的 这是该模型的单元测试系统的前身 因此 我不能真正证明更改模型以适应测试是合理的 测试必

随机推荐