can总线不加末端电阻_一文了解嵌入式工程师常用的CAN总线协议

ee0ba8d31b27df6d9ff128b8c9abb0de.png

信息来源于网络

很难找到一篇能够适合初学者CAN总线原理的文章,因此本着通俗易懂的原则编写此文。

本文说的CAN即是一种总线,也是一种协议。因此,我们常听见CAN总线,也常听见CAN协议。

CAN协议和CANOpen协议是两套不同的协议。从软硬件层次来划分,CAN协议属于硬件协议,而CANOpen属于软件协议。

什么是CAN总线?

CAN总线应用于汽车,实现电子控制器和传感器之间的通信

l 高可靠性、低成本的通信协议。

l 最初由Robert Bosch于1986年开发。

l 主要应用于汽车、卡车、拖拉机、工业机器人。

想象一下,一辆汽车就像一个人:

Ø CAN总线是神经系统,使身体各部分之间的通信得以实现。

Ø ECU通过CAN总线连接,该总线相当于一个中央网络系统。

什么是ECU?

l 在汽车CAN总线系统中,ECUs可以是发动机控制单元、安全气囊或音频系统。

l 一辆现代汽车最多可以有70辆ECUs。

89510e405836954ce4f2bcbbfd7641e1.png

CAN总线5大特性

2b7105f74cebeffae97805a98e4038a3.png

l 低成本:ECUs通过单个CAN接口进行通信,布线成本低。

l 高集成:CAN总线系统允许在所有ECUs上进行集中错误诊断和配置。

l 可靠性:该系统对子系统的故障和电磁干扰具有很强的鲁棒性,是汽车控制系统的理想选择。

l 高效率:可以通过id对消息进行优先级排序,以便最高优先级的id不被中断。

l 灵活性:每个ECU包含一个用于CAN总线收发芯片,随意添加CAN总线节点。

89510e405836954ce4f2bcbbfd7641e1.png

CAN总线发展史

l 未出现前:汽车ECUs依靠越来越复杂的点对点布线。

l 1986年:Bosch公司开发了CAN总线协议作为汽车电子解决方案,并在SAE大会上发布。

l 1991年:Bosch公司发布了CAN2.0,包涵CAN 2.0A (11 位) 和CAN 2.0B (29 位)。

l 1993年:CAN总线列入标准(ISO 11898)。

l 2012年:Bosch公司发布了CAN FD 1.0

l 今天:几乎每一辆汽车都有CAN总线系统,它广泛应用于卡车、公共汽车、工业车辆、船舶、飞机和工业自动化。

89510e405836954ce4f2bcbbfd7641e1.png

CAN总线网络

6f74b6592157cb10382fdc9962d588e3.png

CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻,但是为什么是120欧姆呢?那是因为电缆的特性阻抗为120欧。

89510e405836954ce4f2bcbbfd7641e1.png

CAN收发器

CAN收发器的作用是负责逻辑电平和信号电平之间的转换。

45aeb4fed32343cb6c23de05e23e89ed.png

即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。具体的管教定义如下:

5960000f49193766297dc1633e4fbb8d.png

89510e405836954ce4f2bcbbfd7641e1.png

CAN信号表示

CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,分别是显性的(Dominant)逻辑0和隐形的(recessive)逻辑1,信号每一次传输完后不需要返回到逻辑0(显性)的电平。

c29097397e76f1212a793eecf79add95.png

CAN收发器有TXD,RXD是与CAN控制器连接的。发送器接到网络的是CL和CH。CL与CH是差分电路。CAN网络上是用CL于CH的电压差来表示逻辑“0”和逻辑“1”。所以CAN网络中只能单向传输。

89510e405836954ce4f2bcbbfd7641e1.png

CAN总线通信协议

协议格式 

0feb7a6c0e7173bc20dbc6febf97fbc4.png

818dd9e87234c18e8e24deedb7e44b00.png

如何解析

下面是使用CANLoggerX000的汽车的一个示例日志文件:

# Logger type: CANLogger2000

# HW rev: 6.xx

# FW rev: 5.51

# Logger ID: ID0001

# Session No.: 9

# Split No.: 3

# Time: 20170508T064128

# Value separator: ";"

# Time format: 4

# Time separator: ""

# Time separator ms: ""

# Date separator: ""

# Time and date separator: "T"

# Bit-rate: 500000

# Silent mode: false

# Cyclic mode: false

Timestamp;Type;ID;Data

08T064254150;0;34d;1003fafa000d00ff

如果我们查看上面的原始CAN总线数据样本,可能会注意到:

原始的CAN总线数据没有意义!

这是因为我们需要将数据转换成按比例计算的工程值——也就是人类可读的形式。

要做到这一点,我们需要知道一些事情: 

d0f58c5e31527de11501c69833638e9f.png

例如,在34d中的64位数据中,可能会有3个不同参数的数据,每个参数都有一个特定的起始点和位长。

针对这3个不同参数的数据,我们需要要知道如何解码:

每个参数都需要偏移量和刻度值

[数据值]=[偏移]+[刻度]x[原始数据值]

4bee6c9a8af0b0da769dc6f49a2c1e09.png

点赞

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值