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

9 篇文章 3 订阅
8 篇文章 28 订阅

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

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



前言

其实这个系列我已经很久没接触了,当初做这个系列的主要目的也是为了自己适时的记录。当然,能够有幸接触到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写的第一个技术文章系列,存在的小问题很多,不过希望也存在些许借鉴意义吧。如果后面还有要改进的地方,应该会再出一篇文章的。

  • 12
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEODWL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值