CAN学习笔记三

Can帧类型分4种:

分类型的目的是为适合不同的传输需求。

数据帧、远程帧、超载帧、错误帧

DLE:有效数据字节数

数据域:发送的实际数据

CRC:接受节点校验数据正确性

ACK:接收节点应答位

SOF:帧起始

EOF:帧结束

BUS-OFF状态

节点会对收/发的错误计数,当节点对“发送错误”或“接收错误”的计数>255时,自动退出总线通讯,此时进入BUS-OFF状态

CAN信号矩阵表

其有:信号所在子网、信号发送节点、信号名、信号名中文、信号所在CAN报文ID 、信号发送周期、信号二进制数据最低位在CAN报文数据域起始位、信号二进制位长度、信号二进制转换十进制后乘的系数、乘以系数后加的偏移量、信号接收节点

汽车CAN信号类型:

信号一般分为:连续物理量非连续物理量信号

连续物理量信号:

如车速、发动机转速、温度、前方车辆距离(adas相关)、方向盘转角

连续物理量信号用二进制表示,遵循转换公式:

信号原始二进制 转为十进制*系数 + 偏移量 = 实际物理量

非连续物理量信号:

各种信号的状态信号,如制动器的开启状态,发动机状态,油门状态。

直接定义某种状态对应哪个二进制数即可

CAN总线通讯特点:

  1. 广播式发送,大家都能听见,根据需要过滤,是否接受
  2. 一次只能一个发送,其他等待或接受
  3. 各节点主动自发竞争,没有主控方,总体协调控制。

物理层规定:

两根线(通常为双绞线)共同协调“收/发”;分为CAN高、CAN低;

每个CAN节点的CAN_H、CAN_L之间有120Ω终端电阻

显性信号 表示二进制0:CAN_H 3.5伏、 CAN_L 1.5伏

隐性信号 表示二进制1:CAN_H 2.5伏、 CAN_L 2.5伏

分高速CAN(500K~1M bps) 低速CAN(125K bps)

零部件测试:

主要为tier1(一级)供应商生产的零部件进行软件测试

测试方法:

台架测试

实车测试:静态和动态

整车测试

CAN通信中,通信矩阵(Communication Matrix)是描述CAN总线网络中各个ECU(电子控制单元)之间数据交互的重要工具。通信矩阵通常由DBC(Database CAN)文件示,包含了CAN网络中所有节点、报文、信号、数据格式、传输周期等信息。理解通信矩阵的结构和查看方法,有助于进行CAN总线的调试、数据解析和系统集成。 ### 通信矩阵的基本结构 一个典型的CAN通信矩阵通常包括以下部分: 1. **节点(Node)**:CAN网络中的各个ECU,例如发动机控制单元、车身控制模块等。 2. **报文(Message)**:每个报文对应一个CAN帧ID(如0x181),包含多个信号。 3. **信号(Signal)**:信号是报文中的具体数据字段,如车速、温度、开关状态等。 4. **信号属性**: - **起始位(Start Bit)**:信号在报文中的起始位位置。 - **长度(Length)**:信号的位数(如16位、32位等)。 - **字节顺序(Endianness)**:Intel格式(小端)或Motorola格式(大端)。 - **值类型(Value Type)**:有符号或无符号。 - **因子与偏移(Factor & Offset)**:用于将原始数据转换为物理值。 - **单位(Unit)**:信号的物理单位,如“km/h”、“℃”等。 5. **发送/接收关系**:标明哪些节点发送该报文,哪些节点接收该报文。 6. **周期(Cycle Time)**:报文的发送周期,单位为毫秒。 --- ### 示例说明 以下是一个简化版的通信矩阵片段示例: | 报文名称 | 报文ID | 信号名称 | 起始位 | 长度 | 字节顺序 | 有/无符号 | 因子 | 偏移 | 单位 | 发送节点 | |----------|--------|----------|--------|------|----------|------------|------|------|------|----------| | VehicleSpeed | 0x181 | Speed | 7 | 16 | Intel | unsigned | 0.001 | 0 | km/h | ECU1 | #### 解读说明: - **报文名称**:`VehicleSpeed` 是该报文的名称,便于识别。 - **报文ID**:`0x181` 是该报文的CAN帧ID,在总线上唯一标识该报文。 - **信号名称**:`Speed` 示该信号代车辆速度。 - **起始位**:从第7位开始(即第1字节的bit7),示该信号在报文中的起始位置[^2]。 - **长度**:16位,示该信号占用16个bit。 - **字节顺序**:Intel格式,即小端模式,低位字节在前,高位字节在后[^1]。 - **有/无符号**:无符号数,示数值范围为0到65535。 - **因子与偏移**:原始值乘以0.001后加上0,得到物理值。例如,原始值为3000时,物理值为3 km/h。 - **单位**:`km/h`,示速度单位。 - **发送节点**:该报文由`ECU1`发送。 --- ### 查看通信矩阵的方法 1. **使用DBC编辑工具**: - 工具如 **CANdb++ Editor**、**Vector CANoe**、**PCAN-Explorer** 等支持DBC文件的查看和编辑。 - 打开DBC文件后,通常可以查看: - `NODES`:定义网络中的节点。 - `MESSAGES`:查看每个报文的ID、长度、发送者等。 - `SIGNALS`:查看信号的详细信息,包括起始位、长度、字节顺序等。 - `VALUE TABLES`:定义信号的枚举值(如开关状态)。 2. **手动解析DBC文件**: - DBC文件本质上是文本文件,可以用文本编辑器打开。 - 常见的DBC语句包括: - `BO_`:定义报文 - `SG_`:定义信号 - `BU_`:定义节点 - `VAL_`:定义信号的枚举值 示例DBC片段: ```plaintext BO_ 417 VehicleSpeed: 8 ECU1 SG_ Speed : 7|16@1+ (0.001,0) [0|65.535] "km/h" ECU2 ``` - `BO_ 417` 示报文ID为0x191(417为十进制)。 - `SG_ Speed : 7|16@1+` 示信号`Speed`起始位为7,长度为16位,Intel格式(@1+)。 - `(0.001,0)` 示因子为0.001,偏移为0。 - `"km/h"` 是单位。 3. **结合代码解析**: 在C语言中,可以通过位操作提取信号值。例如,对于Intel格式的信号: ```c uint16_t get_speed(uint8_t *data) { return (uint16_t)((data[1] << 8) | data[0]); // Intel格式,小端 } ``` 若因子为0.001,则最终物理值为: ```c float physical_value = get_speed(data) * 0.001f; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值