自动驾驶(四十五)---------汽车标定-XCP简述
原标题:自动驾驶(四十五)---------汽车标定-XCP简述
原文来自:CSDN 原文链接:https://blog.csdn.net/zhouyy858/article/details/102628296
汽车标定是传统汽车行业很重的工作,需要大量人员从事标定工作,ECU中的程序由软件工程师进行设计,而工程师不可能把这些参数设置成合理的值,这些值是需要在实验中根据汽车数学模型进行设置,XCP就提供了这种标定的方式。
XCP提供了一种对ECU中某些值进行读取、写入操作的一种协议,一般是把支持XCP的软件与汽车的CAN总线相连,目前XCP主要使用的工具有Vector公司的CANape ITAS的INCA,Value CAN等工具。这里以INCA7.2作为介绍。
1. XCP工作流程
首先XCP是主从的工作结构,主节点即一个上位机(XCP工具),一个主节点可以连接多个从节点(Slave),以XCPOnCAN为例,可以通过CAN ID的方式来识别不同的从节点,一般从节点需要两个CANID,一个源地址,一个目标地址。那么硬件连接: Master(带上位机的笔记本)<-->CAN工具<-->Slave(ECU 可多个)
第一步我们要将Master和Slave连接起来,当然是通过发命令的方式建立连接,具体命令后面进行讲解。
第二步可以通过上位机工具监控之前定义好的一些变量,例如速度,转矩,电压等参数;
第三步可以进行一些在线标定功能,比如在台架上标定PID的一些参数,标定过程一般是先在一个存储区(RAM)定义的变量找出一个比较好的参数,然后将这个比较好的参数固化下来,擦除原来的数据写入到另外一个映射好的存储区(flash),这个是标定的一般过程;
当然也可以通过重新擦写一个数据区域,使用其编程的功能。
我认为映射关系可能是XCP中较核心的一个部分,下面我们讲一讲c步骤中的地址映射。
2. XCP概念和过程简介
首先我们介绍一些概念:
逻辑地址:为了XCP的逻辑应用定义的一块地址,就像我们给一个变量定义了一个名字一样;
物理地址:它是直接对应存储器上的一块地址比如RAM上的0x0000~0x0200一块地址;Flash 0x1000~0x1200;一块地址;
参考页: 你可以理解为定义的逻辑地址对应Flash上的一块地址,比如逻辑地址0x0000~0x0200对应Flash上一块0x1000~0x1200这个地址;那么参考页的属性在标定过程是可读不可写;
工作页:你可以理解为定义的逻辑地址对应RAM上的一块地址,比如逻辑地址0x0000~0x0200对应RAM上一块0x0000~0x0200这个地址;注意工作页的属性是可读可写(方便标定修改嘛)
激活页:就是指选择激活的一个页,比如激活工作页 或者激活参考页等。
完整的一个标定过程:首先激活参考页(仅可读),读取当前的参数,比如PID中的比例因子 P,然后呢切换激活页可读可写),这个时候就可以在线修改参数,来获得较好的PID曲线,从而确定优化后的参数P,最后,我们还是需要将原来参考页上的P参数参数,写入优化后的P参数,这样就完成了一个参数的标定。
3. XCP地址映射
硬件方式:有些芯片是支持硬件地址映射的,它的工作方式比较简单,就是在你切换激活的工作页时,操作寄存器,硬件完成地址映射。举个例子 假如Reg1 = 0时,激活页是参考页,逻辑地址0x000~0x200 对应的Flash中的0x100~0x300;切换激活页为工作页时,Reg1=1,对应逻辑地址0x000~0x200 对应Ram中的0x000~0x200;是不是超简单,但是相应芯片价格会贵一点。
软件方式:其实就是加入一个offset偏移量来实现。还是以上面的例子为例:
激活页->参考页 逻辑地址 0x000~0x200 -> Offset=0x100 Flash地址0x100~0x300 =(逻辑地址+Offset)
激活页->工作页 逻辑地址 0x000~0x200 -> Offset=0x000 Flash地址0x000~0x200 =(逻辑地址+Offset)
同样也不不复杂,但是会部分增加软件的维护工作。
激活页->参考页 逻辑地址 0x000~0x200 -> Offset=0x100 Flash地址0x100~0x300 =(逻辑地址+Offset)
4. XCP的命令简介
Master->Slave (上位机到下位机)总共0xFF条
名称 PID范围
CMD 0xC0~0xFF 指的是上位机下发给下位机的一些命令,比如连接命令FF,解锁,获取状态、下位机交互的命令;
STIM 0x00~0xBF 你可以理解为一种上位机下下位机大量发数据的一种方式,相当于反向的DAQ;
Slave ->Master(下位机到上位机)总共0xFF条
名称 PID范围
Response 0xFF 肯定应答,指的下位机答复上位机的命令;
Error 0xFE 否定应答上位机的命令;
Event 0xFD 事件,指下位机发生某事件时通知上位机;
Service 0xFC 指下位机在某些情况下,需要上位机执行一些动作,你可以理解为请求上位机服务。
DAQ 0x00~0xFB //ODT的序号 很显然,就是下位机上传数据给上位机。
5. XCP的A2L文件
A2L文件是啥呢?它其实就是一种方便XCP进行工作的描述性一个文件,你可以理解为一个通讯矩阵,包含了项目信息、ECU信息、标定变量信息、测量变量信息等等如下所示。
/begin PROJECT /*表示一整个项目,一个文件一个项目*/ /begin HEADER /*描述项目信息,包括项目编号,项目版本等信息*/ /end HEADER /begin MODULE Device/*描述ECU需要的所有信息,一个ECU对应一个MODULE块*/ /begin MOD_PAR /*管理ECU的数据,CPU 客户 编号等等,最重要的是内存的分段分页管理,类似DSP中的CMD文件*/ /end MOD_PAR /begin MOD_COMMON/*一般性描述信息,比如大小端,数据的对齐方式*/ /end MOD_COMMON /begin CHARACTERISTIC/*定义标定变量,包含被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*/ /end CHARACTERISTIC /*可定义多个*/ /begin AXIS_PTS /end AXIS_PTS /begin MEASUREMENT/*定义测量变量,包含了被测量的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*/ /end MEASUREMENT/*可定义多个*/ /begin COMPU_METHOD/*定义计算公式,及原始值和物理值之前的转换关系 如phy = ax+b*/ /end COMPU_METHOD /begin COMPU_TAB /*定义原始值和物理值的映射关系 一般是枚举变量*/ /end COMPU_TAB /begin FUNCTION /end FUNCTION /begin GROUP /end GROUP /begin RECORD_LAYOUT/*定义标定变量的物理存储结构(一维,二维表,三维表等)*/ /end RECORD_LAYOUT /end MODULE Device /end PROJECT
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com
热门资源
Python 爬虫(二)...
所谓爬虫就是模拟客户端发送网络请求,获取网络响...
TensorFlow从1到2...
原文第四篇中,我们介绍了官方的入门案例MNIST,功...
TensorFlow从1到2...
“回归”这个词,既是Regression算法的名称,也代表...
TensorFlow2.0(10...
前面的博客中我们说过,在加载数据和预处理数据时...
机器学习中的熵、...
熵 (entropy) 这一词最初来源于热力学。1948年,克...
智能在线
400-630-6780
聆听.建议反馈
E-mail: support@tusaishared.com