汽车电子笔记之:基于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.hqwc.cn/news/91299.html

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

相关文章

高忆管理:新手炒股入门零基础学?

炒股是一些人为了取得高额回报和更好的财政自由而进行的活动。但对许多新手而言,这是一个全新的领域,需求掌握许多根底常识才能够开始加入炒股商场。本文将为零根底的新手炒股入门供给一些主张和技巧: 一、学习根底常识 关于炒股入门的新手而…

头歌MYSQL——课后作业6 函数

第1关:数值函数 任务描述 本关任务:对表达式取整 相关知识 四舍五入的函数 ROUND(X,D) 返回X,其值保留到小数点后D位,而第D位的保留方式为四舍五入。 若D的值为0,则对小数部分四舍五入。 若将D设为负值,保留X值小数…

200 套基于Java开发的Java毕业设计实战项目(含源码+说明文档)

文章目录 简介前言第一部分第二部分部分截图源码咨询 简介 博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 前言 对于java方向的毕业设计题目选题&#xf…

分布式定时任务框架Quartz总结和实践(2)—持久化到Mysql数据库

本文主要介绍分布式定时任务框架Quartz集成SpringBoot持久化数据到Mysql数据库的操作,上一篇文章使用Quartz创建定时任务都是保存在内存中,如果服务重启定时任务就会失效,所以Quartz官方也提供将定时任务等信息持久化到Mysql数据库的功能&…

jdbc235

概念:java database connectivity java数据库连接 java语言操作数据库 定义了一套操作所有关系型数据库的规则(接口) 本质:其实是官方公司定义了一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接…

根据身高重建队列【贪心算法】

根据身高重建队列 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返…

2009-2022年商业银行资产利息相关数据

2009-2022年商业银行资产利息相关数据 1、时间:2009-2022年 2、来源:整理自wind 3、指标:利息支出、资产总计、员工总数、固定资产、存款总额、应付职工薪酬、营业支出、营业收入、扣除人员开支后的营业支出 银行:平安银行兰州…

Python教程(11)——Python中的字典dict的用法介绍

dict的用法介绍 创建字典访问字典修改字典删除字典字典的相关函数 列表虽然好,但是如果需要快速的数据查找,就必须进行需要遍历,也就是最坏情况需要遍历完一遍才能找到需要的那个数据,时间复杂度是O(n),显然这个速度是…

Spooling的原理

脱机技术 程序猿先用纸带机把自己的程序数据输入到磁带中,这个输入的过程是由一台专门的外围控制机实现的。之后CPU直接从快速的磁带中读取想要的这些输入数据。输出也类似。 假脱机技术(Spooling技术) 即用软件的方式来模拟脱机技术。要…

Java监听mysql的binlog 报错解决办法

报错:com.github.shyiko.mysql.binlog.network.AuthenticationException: Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决方案:在mysql中执行以下命令 alter user rootlocalhost identi…

postgresql类型转换函数

postgresql类型转换函数 简介CAST 函数to_date 函数to_timestamp 函数to_char 函数to_number 函数隐式类型转换 简介 类型转换函数用于将数据从一种类型转换为另一种类型。 CAST 函数 CAST ( expr AS data_type )函数用于将 expr 转换为 data_type 数据类型;Post…

element-plus指定el-date-picker的弹出框位置

此处记录一下,通过popper-options指定popper出现的位置