汽车电子笔记之:基于AUTOSAR的电机控制器架构设计

目录

1、概述

2、AUTOSAR设计

2.1、SWC设计

2.2、PORT设计

2.3、Runnable设计

2.4、电机控制器OS实现


1、概述

        电机控制器应用层的软件架构较为复杂,主要包括PMSM(Permanent-MagnetSynchronous Motor)的矢量控制算法。根据PMSM的控制算法,对算法中的软件功能进行分析,将其划分为若干个软件模块,即可得到电机控制器的软件架构,并按照上述方法创建软件架构所需使用的各个软件组件。几个主要的软件组件及其功能见下表。

         根据所设计的电机控制器的功能,完成各个软件组件之间通信端口的设计,将各个软件组件连接起来,即可得到软件架构,如下图所示。这里的软件架构只是一个框架,对控制器算法的功能模块进行了划分,对其软件组件之间的通信内容进行了定义,但是软件组件内部并没有具体的功能。电机控制器的软件架构通过DaVinci Developer工具进行设计配置;在进行设计时,首先需要明确每个软件模块的功能作用选择合适的软件组件类型;而由于软件组件之间需要进行通信,因此需要给软件组件添加合适的通信端口,明确是S/R 还是 C/S端口,或是其他类型的端口,以及通信使用的数据类型;而最后需要对每个软件组件进行相关的功能设计,创建软件的功能实现最小单元--Runnable,实现电机控制器的预期功能。

 设计步骤

2、AUTOSAR设计

2.1、SWC设计

        在DaVinci Developer中,提供了一个库(Library),库中包含各种应用组件类型、数据类型、通信端口和常量等设计软件架构所需的元素。在Application Component Types上右击,即可创建软件组件,如下图所示。

         软件组件主要有Composition(组合)和Atomic(原子)两种类型,这是AUTOSAR规范中规定的软件组件类型。Composition是一个逻辑上的集合,可以将某些以实现特定功能的联系较为紧密软件组件放入同一个Composition中,便于开发。Atomic类型的软件组件又可分为如下图所示的几种类型,其中,Application用于应用软件算法的执行,SensorActuator主要用于传感器和执行器相关功能的软件,这两种类型的软件组件足以应付大部分的使用场景。

2.2、PORT设计

         由于各个软件组件之间要进行数据的交互,因此需要对这些软件组件进行通信端口(Port)的设计。在之前所示的库中,右击Application Port Interfaces,可以新建 S/R 端口接口。以用于电流控制的软件组件MDCC的发送端口为例,在Interface中,可以新建多个数据元素(Data Element),如下图所示。需要注意每个数据元素都要有相应的数据类型。

         当为软件组件添加通信端口时,所添加的端口为 Port Prototype,是以 Port Interface 为模板创建的。在软件组件上右击,即可新建端口,如下图所示。点击新建发送端口(SenderPrototype),会弹出如下下图所示的对话框,列出了所有的Interface,在这里选择相应的Interface,即可完成端口和接口的关联。

2.3、Runnable设计

        为了实现软件组件具体的功能,需要向其中分配功能实现的最小单元——可运行实体,也即Runnable,Runnable需要被映射到操作系统的Task中。点击软件组件,在中间的运行实体列表处即可进行 Runnable 的配置,如下图所示。

         Runnable 由 RTE事件触发,其触发形式有多种,例如初始化触发、周期事件、数据收发相关事件和操作调用事件等,如下图所示。常用的为周期与初始化Runnable。

         软件组件MDCC用于电流闭环控制,其中的Runnable 为 DoCurCtr,该 Runnable 的功能为计算出控制电压,得到三相导通时间,需要每100 us(PWM周期)触发一次,因此选择周期性触发。下表中列出了电机控制器软件架构中部分软件组件所包含的一些运行实体名称及其对应功能。MDFM为故障管理相关模块,包含母线电压过压和欠压判断、电机超速、过温判断等Runnable。

2.4、电机控制器OS实现

         在 DaVinci Configurator中,可以进行电机控制器基础软件部分的配置,包括 OS、通信等。由于本例 PMSM控制算法中的运行实体繁多,因篇幅所限,本节只简要阐述 OSApplication, Task的特性以及它们与各Runnable之间的相互关系。下图所示为与整个OS相关的通用属性,包括其可剪裁类、硬件所使用的CPU数量、调度类型是非抢占抑或全抢占、编译器类型,以及一些API函数。本例中,使用SC3的操作系统,且单片机的 CPU数量为 3(TC275)。

        在OS的钩子函数(Hook Routines)配置界面下图中,可以使能操作系统所需的一些Hook函数。其中,Startup Hook程序在操作系统的启动阶段被调用,也即在调用StartOS()之后和启动第一个任务之前;当操作系统中的函数返回的错误码不为 E_OK或者操作系统内部错误被检测时,Error Hook被调用;而Shutdown Hook在调用ShutdownOS()期间被调用。

         Protection Hook 在出现保护错误时被调用,如果将 SHUTDOWM 使能,则 ProtectionHook 会返回一个PRO_SHUTDOWN在OS Configuration配置界面,右击OS Applications,选择“Add”,可以添加OS Application,如下图所示。每个OS Application有各自的任务、中断、Alarm、计数器和调度表。由于该操作系统运行在三核的TC275上,因此需要通过Core Assignment来将该OSApplication与CPU关联。如果此OS Application是受信任的,则需要使能Trusted选项。

         在某个特定的OS Application下,右击Task,可以进行任务的创建。操作系统中任务的相关属性包括其调度方式(非抢占/全抢占)、优先级、任务类型(基本任务/扩展任务)、堆栈大小以及是否自启动等。以空闲任务Idle Task为例,具体内容如下图所示。

         如果任务的调度方式为全抢占式,那么,较低优先级的任务在运行状态下,若较高优先级的任务被激活,则调度程序将调度较高优先级的任务运行。任务堆栈大小的设置需要考虑该任务的复杂情况,确保不会溢出。空闲任务是AUTOSAR操作系统中规定的,每个OS Application都需要有一个空闲任务,该类型任务的优先级最低,且需要使能Task is Idle Task此时,OS Application和Task的基本框架已经搭建完毕,但是,Task中没有具体的任务代码。因此,需要将Runnable添加到相关的Task 中,如下图所示。

 至此,完成了电机控制器操作系统的实现,具体的任务分配如下列三图所示。

        至此 完成了电机控制器应用层软件架构配置和基础软件层的配置,接下来就是生成相应代码集成到编译器中。集成完代码后生成可执行文件,烧录到相应的硬件平台中,电机控制器的软件也就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/118883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java反编译工具jd-gui使用

文章目录 一、JD-GUI介绍二、下载三、安装四、使用教程五、免责声明摘抄 一、JD-GUI介绍 JD-GUI是一个独立的图形实用程序,显示“.class”文件的Java源代码。 使用JD-GUI浏览重构的源代码,以便即时访问方法和字段。 二、下载 MAC安装包:ht…

leetcode410. 分割数组的最大值(java)

分割数组的最大值 题目描述二分法代码演示 题目描述 难度 - 困难 410. 分割数组的最大值 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 1: 输入&…

Pyecharts数据可视化(二)

目录 1.绘制散点图 2.绘制饼图 2.1绘制实心饼图 2.2 绘制圆形饼图 2.3 绘制玫瑰图 3.绘制漏斗图 4.绘制仪表盘 5.绘制组合图表 本文主要介绍如何利用Pyecharts来绘制一些常用的可视化图形,比如散点图、饼图、漏斗图等等,具体的绘制方法请见下文。 …

jQuery成功之路——jQuery的DOM操作简单易懂

jQuery的DOM操作 1.jQuery操作内容 jQuery操作内容 1. text() 获取或修改文本内容 类似于 dom.innerText 2. html() 获取或修改html内容 类似 dom.innerHTML 注意: 1. text() 是获取设置所有 2. html() 是获取第一个,设置所有 <!DOCTYPE html> <html lang"zh…

Unity 状态机

Enemy状态以及切换图 程序架构 接口 public interface IState {void OnEnter(); //进入状态时void OnUpdate();//执行状态时void OnExit(); //退出状态时 }接口实现及状态切换类 public class IdleState : IState {private FSM manager;private Parameter parameter;public…

LiteOS qemu realview-pbx-a9 环境搭建与运行

前言 最近打算移植搭建 一些常见的 RTOS 的 qemu 开发学习环境&#xff0c;当前 RT-Thread、FreeRTOS 已经成功运行 qemu&#xff0c;LiteOS 初步验证可以正常 运行 qemu realview-pbx-a9&#xff0c;这里做个记录 首先学习或者研究 RTOS&#xff0c;只是看内核源码&#xff0…

TiDB x 安能物流丨打造一栈式物流数据平台

作者&#xff1a;李家林 安能物流数据库团队负责人 本文以安能物流作为案例&#xff0c;探讨了在数字化转型中&#xff0c;企业如何利用 TiDB 分布式数据库来应对复杂的业务需求和挑战。 安能物流作为中国领先的综合型物流集团&#xff0c;需要应对大规模的业务流程&#xff…

第 3 章 栈和队列(单链队列)

1. 背景说明 队列(queue)是一种先进先出(first in first out,缩为 FIFO)的线性表。它只允许在表的一端进行插入&#xff0c;而在另一端删除元素。 2. 示例代码 1&#xff09;status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果…

Arcface部署应用实战

1、概述 人脸识别的一个比较常用的网络arcface&#xff0c;依赖于其特殊设计的loss函数&#xff0c;使得模型在训练的时候能够实现类间距离增大&#xff0c;类内的距离不断减小&#xff0c;最终使得所训练的backbone能够获取鉴别性很高的特征&#xff0c;便于人脸识别。 本文…

Win11搭建 Elasticsearch 7 集群(一)

一&#xff1a; ES与JDK版本匹配一览表 elasticsearch从7.0开始默认安装了java运行环境&#xff0c;以便在没有安装java运行环境的机器上运行。如果配置了环境变量JAVA_HOME&#xff0c;则elasticsearh启动时会使用JAVA_HOME作为java路径&#xff0c;否则使用elasticsearch根目…

设计模式—简单工厂

目录 一、前言 二、简单工厂模式 1、计算器例子 2、优化后版本 3、结合面向对象进行优化&#xff08;封装&#xff09; 3.1、Operation运算类 3.2、客户端 4、利用面向对象三大特性&#xff08;继承和多态&#xff09; 4.1、Operation类 4.2、加法类 4.3、减法类 4…

【Unity】URP屏幕后处理UI模糊效果实现

这里Canvas(1)设置为Overlay能渲染出指定UI高清&#xff0c;其他UI模糊&#xff0c;然而这做法非常不好&#xff0c;如果此时再打开UI 以及 关闭模糊效果 要将这些置顶UI 恢复到原本Canvas里&#xff0c;也就是要管理2套Canvas using System; using System.Collections; using…

统一使用某一个包管理工具,比如yarn pnpm

原因&#xff1a;前端每个人的习性不一样&#xff0c;有人用npm 有人用yarn等包管理工具&#xff0c;混合下载插件容易出bug&#xff0c;就用个小工具锁住就行了&#xff0c;只能使用yarn或者pnpm反向下载依赖和下载插件。不然就报错 1.在项目主目录下创建preinstall.js // 如…

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测 目录 分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测分类效果基本介绍模型描述预测过程程序设计参考资料分类效果 基本介绍 MATLAB实现GRNN广义回归神经网络多特

Mybatis学习|多对一、一对多

有多个学生&#xff0c;没个学生都对应&#xff08;关联&#xff09;了一个老师&#xff0c;这叫&#xff08;多对一&#xff09; 对于每个老师而言&#xff0c;每个老师都有N个学生&#xff08;学生集合&#xff09;&#xff0c;这叫&#xff08;一对多&#xff09; 测试环境…

【小沐学Unity3d】3ds Max 骨骼动画制作(Physique 修改器)

文章目录 1、简介2、Physique 工作流程3、Physique 对象类型4、Physique 增加骨骼5、Physique 应用和初始化6、Physique 顶点子对象7、Physique 封套子对象8、设置关键点和自动关键点模式的区别8.1 自动关键点8.2 设置关键点 结语 1、简介 官方网址&#xff1a; https://help.…

Python Opencv实践 - 轮廓检测

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/map.jpg") print(img.shape) plt.imshow(img[:,:,::-1])#Canny边缘检测 edges cv.Canny(img, 127, 255, 0) plt.imshow(edges, cmapplt.cm.gray)#查找轮廓 #c…

AI助乡行——点燃乡村振兴新引擎

随着数字化浪潮的袭来&#xff0c;乡村振兴战略的推进离不开数字化、智慧化等现代化治理能力和方式&#xff0c;人工智能等高新技术正不断与农村经济、社会、治理等加速融合。在智慧农业的背景下&#xff0c;我们可以解决一系列困扰农民的问题&#xff0c;包括如何增加经济作物…

【jvm】运行时数据区

目录 一、运行时数据区一、作用二、说明三、线程共用与私有区域 一、运行时数据区 一、作用 1.内存是非常重要的系统资源&#xff0c;是硬盘和CPU 的中间仓库及桥梁&#xff0c;承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策…

基于Gin框架的HTTP接口限速实践

在当今的微服务架构和RESTful API主导的时代&#xff0c;HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大&#xff0c;接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能&#xff0c;接口限速成了一个重要的话题。 1 接口限速的使用场景 接口…