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

汽车电子笔记之:基于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 中,如下图所示。

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

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

相关文章:

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

目录 1、概述 2、AUTOSAR设计 2.1、SWC设计 2.2、PORT设计 2.3、Runnable设计 2.4、电机控制器OS实现 1、概述 电机控制器应用层的软件架构较为复杂,主要包括PMSM(Permanent-MagnetSynchronous Motor)的矢量控制算法。根据PMSM的控制算法,对算法中的软件功能进行分析&…...

Docker 可以共享主机的参数

命令 docker run -it --ipchost nginx:latest /bin/bashdocker run -it --nethost nginx:latest /bin/bashdocker run -it --pidhost nginx:latest /bin/bashdocker run -it --utshost nginx:latest /bin/bash 参考 Docker run reference | Docker Docs...

STL之list模拟实现(反向迭代器讲解以及迭代器失效)

这次是关于list的模拟实现的代码&#xff0c;先看看下面的代码&#xff1a; #pragma once #include <iostream> #include "reve_iterator.hpp" using namespace std; namespace cc {//链表节点template<class T>struct ListNode{T _val;ListNode *_next…...

Firewalld防火墙新增端口、开启、查看等

Linux操作系统中&#xff0c;Firewalld防火墙相关操作如下&#xff1a; 安装 yum install firewalld firewalld-configFirewall开启常见端口命令 新增防火墙端口命令&#xff1a; firewall-cmd --zonepublic --add-port80/tcp --permanentfirewall-cmd --zonepublic --add-…...

【腾讯云 TDSQL-C Serverless 产品测评】- 云原生时代的TDSQL-C MySQL数据库技术实践

一、活动介绍&#xff1a; “腾讯云 TDSQL-C 产品测评活动”是由腾讯云联合 CSDN 推出的针对数据库产品测评及产品体验活动&#xff0c;本次活动主要面向 TDSQL-C Serverless版本&#xff0c;初步的产品体验或针对TDSQL-C产品的自动弹性能力、自动启停能力、兼容性、安全、并发…...

计算机硬件基础

计算机硬件基础 教程&#xff1a;计算机硬件基础_哔哩哔哩_bilibili 一.计算机的分类 台式机、笔记本电脑、上网本、超薄笔记本、平板电脑、游戏本、智能手机、超级移动电脑、便携式电脑、车用电脑、工作站、服务器、工业电脑IPC、ECDIS 二.机箱 放硬件的地方、一般由钢和铝等…...

云计算和Docker分别适用场景

在大规模网络爬虫系统中&#xff0c;通过使用云计算和Docker技术&#xff0c;可以实现大规模网络爬虫系统的高效架构设计和部署。这种架构能够提供可扩展性、高可用性和灵活性&#xff0c;为爬虫系统的运行和管理带来便利。 云计算和Docker在大规模网络爬虫系统中有不同的业务…...

oracle 基础运用2

首先在电脑上安装PLSQL developer&#xff0c;这个是oracle图形化连接工具&#xff0c;然后安装win64_11gR2_client&#xff0c;这个是orace客户端&#xff0c;安装完成后可以在cmd命令行输入sqlplus命令进行验证&#xff0c;如图表示安装成功。 作为sys的连接应该是SySDBA或Sy…...

ThinkPHP 资源路由的简单使用,restfull风格API

ThinkPHP 资源路由的简单使用&#xff0c;restfull风格API 一、资源控制器二、资源控制器简单使用 一、资源控制器 资源控制器可以轻松的创建RESTFul资源控制器&#xff0c;可以通过命令行生成需要的资源控制器&#xff0c;例如生成index应用的TestR资源控制器使用&#xff1a…...

利用前缀树获取最小目录

一、任务名&#xff1a; 开发最小目录工具 二、任务描述 开发工具&#xff0c;从桶清单文件中列举出所有最小目录&#xff0c;并列举出每一个最小目录中包含的文件总数与文件总量。 最小目录的解释&#xff1a; 有以下几个目录 a/b/1.txt a/b/2/txt a/3.txt a/b/c/ 则&…...

Java【手撕双指针】LeetCode 18. “四数之和“, 图文详解思路分析 + 代码

文章目录 前言一、四数之和1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表, 堆…...

OpenCV处理图像和计算机视觉任务时常见的算法和功能

当涉及到OpenCV处理图像和计算机视觉任务时&#xff0c;有许多常见的具体算法和功能。以下是一些更具体的细分&#xff1a; 图像处理算法&#xff1a; 图像去噪&#xff1a;包括均值去噪、高斯去噪、中值滤波等&#xff0c;用于减少图像中的噪声。 直方图均衡化&#xff1a;用…...

Flutter实现StackView

1.让界面之间可以嵌套且执行动画。 2.界面的添加遵循先进后出原则。 3.需要使用AnimateView&#xff0c;请看我上一篇博客。 演示&#xff1a; 代码&#xff1a; Stack: import package:flutter/cupertino.dart;///栈&#xff0c;先进后出 class KqWidgetStack {final Lis…...

c++ future与promise

C11 标准中 头文件中包含了以下几个类和函数&#xff1a; Providers 类&#xff1a;std::promise, std::package_taskFutures 类&#xff1a;std::future, shared_future.Providers 函数&#xff1a;std::async()其他类型&#xff1a;std::future_error, std::future_errc, st…...

在x86机器上的Docker运行arm64容器

1. 引言 工作中常用电脑主机CPU为x86架构&#xff0c;有时由于产品需要&#xff0c;我们需要编译aarch64架构的SDK或者应用程序供使用或者测试。 一种比较快捷的方式是使用aarch64的CPU构建相应操作系统&#xff0c;实现真机运行。但在无arm架构CPU环境下&#xff0c;我们可否…...

centos7删除乱码文件

centos7删除乱码文件1. 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.解释 当文件名为乱码的时候&#xff0c;无法通过键盘输入文件名&#xff0c;所以在终端下就不能直接利用rm&#xff0c;mv等命令管理文件了。 但是每个文件都有一个i节点号&#xff0c;可以通过…...

uni-app里使用webscoket

实现思路和vue中是一样的。如果想看思路可以看这篇文章&#xff1a;websocket 直接上可以运行的代码&#xff1a; 一、后端nodeJS代码&#xff1a; 1、新建项目文件夹 2、初始化项目&#xff1a; npm init -y 3、项目里安装ws npm i ws --save 4、nodeJS代码&#xff1…...

jdk17+springboot使用webservice,踩坑记录

这几天wms对接lbpm系统&#xff0c;给我的接口是webservice的&#xff0c;老实说&#xff0c;这个技术很早&#xff0c;奈何人家只支持这个。 环境说明&#xff1a;JDK17 springboot2.6.6。网上很多教程是基于jdk8的&#xff0c;所以很多在17上面跑不起来。折腾两天&#xff0c…...

计算机网络文件拆分—视频流加载、断点续传

视频流加载 视频流加载的原理是通过网络传输和播放器解码来实现的。 首先&#xff0c;视频文件会被分成一系列小的数据包&#xff0c;通常是以流的形式传输&#xff0c;这些数据包通过网络传输到用户设备。在传输过程中&#xff0c;可以采用各种协议&#xff0c;如HTTP、RTSP…...

JVM 给对象分配内存空间

指针碰撞空闲列表TLAB 为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。 指针碰撞&#xff1a;&#xff08;Bump The Pointer&#xff09; 堆的内存是绝对规整的&#xff0c;内存主要分为两部分&#xff0c;所有使用过的内存被放在一边&#x…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...