当前位置: 首页 > news >正文

Simulink 自动代码生成电机控制:基于Keil软件集成

目录

系统软件架构

1.应用层全模型生成,底层手写代码

2.应用层模型生成,底层也是基于模型生成

3.Autosar

软件集成操作

接口配置

总结


系统软件架构

嵌入式软件开发包含应用层和底层,目前基于模型的开发软件架构总结为以下几种:

1.应用层全模型生成,底层手写代码

这种方法比较灵活,底层代码可以找芯片厂的Demo程序,也可以自己开发,通信协议可以集成也可以自定义,个人比较喜欢这种,切换芯片平台容易,可移植性强

2.应用层模型生成,底层也是基于模型生成

芯片厂家或者自己开发芯片底层的模型,通过Simulink直接生成可执行文件,elf或者hex,这个模型和底层关联性强,工具链关联性强,需要芯片厂家有相应的MBD tool box等一系列工具,优点是使用工具少,缺点是调试麻烦且对工具链依赖太高,比较灵活的外设使用无法满足需求,比如电源类开发,或者单电阻之类对底层需要很灵活的配置底层,这部分免不了手写代码。通信协议芯片厂家提供,当然也可以自己写,再通过Simulink进行模型化的集成,比较麻烦。

3.Autosar

Autosar是一个分工明确的架构,应用层可以通过Simulink生成带RTE结构的代码和Autosar底层代码相结合,底层代码可以通过专业工具配置MCU外设,比较灵活的发波中断等时序要求比较高的操作需要手写代码配合像CDD,像通信协议标定协议需要CCP或者XCP等其他类通信协议需要集成或者手写。这种方法汽车电子上应用较多,优点模块化集成,多人合作,V流程开发,符合一定的标准。缺点,成本很高,一个人只能做某一个部分,如底层,AutosarOS等,通信协议集成,应用层都需要不同的人来负责,工具使用多,低成本开发不适合,能运行Autosar架构的芯片少,局限于汽车电子应用。

Autosar架构代码可以参考:

Simulink代码生成:Autosar模型及代码生成_卡洛斯伊的博客-CSDN博客_simulink生成autosar代码

关于STM32代码生成 ,这里采用,应用层全模型生成,底层手写代码,模型方便移植到各种平台

软件集成操作

这里以Keil为例进行软件集成操作

操作步骤如下:

1. STM32通过CubeMX生成部分底层代码,如UART,ADC采样,中心对齐PWM,HALL中断和通道,IO口等。配置好后直接生成Keil的Project。如下图,除了Simulink_Model外,其他的都是CubeMX生成的底层项目文件和文件夹,之所以把Simulink_Model放在这个目录里,方便每次更改模型后生成代码可以直接编译,不需要手动复制粘贴。

 2.用Keil打开Project, 在MDK-ARM文件夹中

 生成代码的文件夹,用到的只有.c和.h

 3.Keil添加代码

添加.c文件,操作如下点1,弹出如下窗口,点2创建项目文件夹,如3是创建好的文件夹,点4找到Simulink生成代码的文件夹里除了ert_main.c外的所有.c,可以看到4窗口里都是simulink生成的.c.

 

 得到如下的目录,这时候还不能编译,还需要添加.h文件

 添加.h文件夹

 

 点上图的3,弹出如下窗口,这里点1创建一个文件夹,路径是Simulink生成代码的文件夹

 

 接口配置

Keil配置好后,还需要把底层代码接口和应用层代码的接口进行一一对应

1.电流采样,这里的运放增益是5, 参考电压是1.65V ,差分输入。采样电阻0.01R,ADC是12bit。

计算如下:

\frac{I\ast 0.01*5+1.65}{3.3}=\frac{ADC}{4096}

 把计算简化方便MCU计算,最后乘上一个常数即可。其他电压采样,温度采样根据实际硬件电路参数进行计算就好了

	Ia_A=((float)HAL_ADCEx_InjectedGetValue(&hadc1,1)-2043.0f)*0.01611328125f;
	Ib_A=((float)HAL_ADCEx_InjectedGetValue(&hadc1,2)-2043.0f)*0.01611328125f;
	Ic_A=((float)HAL_ADCEx_InjectedGetValue(&hadc1,3)-2043.0f)*0.01611328125f;

 计算出电流后,把电流值传递到simulink生成的代码变量接口

	rtU.Phase_CurrentABC[0] = Ia_A;
	rtU.Phase_CurrentABC[1] = Ib_A;
	rtU.Phase_CurrentABC[2] = Ic_A;
	rtU.Bus_Voltage=Bus_volt_V;//24

 在调用接口时,需包含Simlink相应的头文件

 

 2.PWM输出接口

 完成以上操作,软件的集成工作基本完成,更多的接口重复操作即可

总结

Simulink生成代码基于Keil的集成操作比较简单,其他的集成开发环境操作类似,把.c和.h配置好,接口配置好就好了。

关于通信协议有VOFA+

STM32 VOFA+串口调试助手提升电机控制调试效率(下位机代码和上位机操作演示)_卡洛斯伊的博客-CSDN博客_stm32 串口助手

Simulink 显示波形

Simulink串口调试助手的使用----显示电机运行的波形_卡洛斯伊的博客-CSDN博客_串口调试助手显示波形

Keil Array Visualization 显示波形

Keil调试显示波形方法_卡洛斯伊的博客-CSDN博客_keil看波形

相关文章:

  • LQ0103 子串分值【字符串】
  • 数据库实战经验分享(全量表,增量表,拉链表,流水表,快照表)
  • 【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件
  • [附源码]Java计算机毕业设计SSM电力公司员工安全培训系统
  • stm32f4xx-ADC
  • Linux命令老是记不住?一篇文章帮你解决。Linux常用命令汇总
  • 基于SPSS的医疗医保费用数据分析预测(C#)
  • 2022年科协第二次硬件培训总结
  • 计算机网络 性能指标 思维导图
  • 【初学者入门C语言】之编译预处理(十)
  • 【MySQL从入门到精通】【高级篇】(二十六)建了索引就能用么?我看未必。来看看几种索引失效的情况吧
  • leetcode47全排列2刷题打卡
  • HTTP首部的那些事,通用首部,请求首部
  • 【C基础篇】之C语言概述
  • 【运维】linux shell 编程之函数使用
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【Leetcode】104. 二叉树的最大深度
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Django 博客开发教程 8 - 博客文章详情页
  • Druid 在有赞的实践
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 搭建gitbook 和 访问权限认证
  • 规范化安全开发 KOA 手脚架
  • 将 Measurements 和 Units 应用到物理学
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 通过几道题目学习二叉搜索树
  • 我感觉这是史上最牛的防sql注入方法类
  • 写代码的正确姿势
  • 【干货分享】dos命令大全
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (06)金属布线——为半导体注入生命的连接
  • (6)设计一个TimeMap
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (solr系列:一)使用tomcat部署solr服务
  • (二)PySpark3:SparkSQL编程
  • (二)构建dubbo分布式平台-平台功能导图
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (一)WLAN定义和基本架构转
  • (转)iOS字体
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .FileZilla的使用和主动模式被动模式介绍
  • .net 获取url的方法
  • .NET 事件模型教程(二)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET单元测试
  • .NET构架之我见
  • [] 与 [[]], -gt 与 > 的比较