最近突然用到了所以大致又复习了一下 写一写总结
CAN 总线的发展
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络
- 上世纪八十年代 由Bosch公司研发
- 目的是为了提高可靠性 安全性 和燃油效率
- 目前的版本为CAN 2.0 发布于1991
- CAN-FD (flaxable datarate)于2012年发布
- 目前CAN通信是汽车行业中非常重要的通信协议
CAN总线与非CAN总线架构对比☝️☝️☝️☝️☝️☝️☝️☝️☝️
CAN总线的优点
传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制器价格越来越低。
Ø 低成本:ECUs通过单个CAN接口进行通信,布线成本低。
Ø 高集成:CAN总线系统允许在所有ECUs上进行集中错误诊断和配置。
Ø 可靠性:该系统对子系统的故障和电磁干扰具有很强的鲁棒性,是汽车控制系统的理想选择。
Ø 高效率:可以通过id对消息进行优先级排序,以便最高优先级的id不被中断。
Ø 灵活性:每个ECU包含一个用于CAN总线收发芯片,随意添加CAN总线节点。
CAN总线网络拓扑图及终端电阻的作用
一般在CAN总线的终端两端都会匹配两个终端电阻 而一般根据各种规范手册里的规定基本都是120Ω或者两个60Ω的电阻
终端电阻的作用主要有:
1、提高抗干扰能力,让高频低能量的信号迅速走掉
2、确保总线快速进入隐性状态,让寄生电容的能量更快走掉;
3、提高信号质量,放置在总线的两端,让反射能量降低。
另外有时候为了考虑EMC等因素 会对总线的拓扑结构做一些改变优化
主要有以下几种:
(1)双终端总线。标准的双终端总线网络拓扑结构,在总线的两端分别接一个120Ω终端电阻,总线总阻值为60Ω。该拓扑结构接线简单,可靠性好,传输距离远,是目前电梯上最常用的总线拓扑结构。
(2)单终端总线。CAN总线匹配的最简单方法就是在总线上并一个60Ω的终端电阻。这种拓扑下,总线电阻为60Ω,阻抗匹配。但在这种拓扑结构中,很多节点实际上都不在总线而在支线上,其传输距离受限,这种拓扑结构的总线长度只有标准双终端总线接法总线长度的50%。
(3)分离总线。分离总线就是在双终端总线的基础上,将单个终端电阻分成两个阻值相同的电阻,在两电阻之间通过一个电容接地,分离总线并不改变总线的DC特性。分离总线有两种接地方式:1)将两个终端均采用分离形式并单独接地。这种拓扑结构可以优化通讯的高频性能。但是,将两个终端电阻都接地以后,可能会通过地电流形成干扰性的回路电流。在这种情况下可以考虑2)只将一个终端电阻接地,这种接法则在中频到低频的范围内有更好的传输特性。这种总线结构接线复杂,一般只在特定情况下使用。
(4)多终端总线。在某些应用场合,如需要额外增加一个分支时,需要采用不同于总线结构的拓扑结构。这时候的拓扑结构就类似于星型拓扑结构,在这种情况下,可以采用多终端接法。多终端结构就是把终端电阻(60Ω)分成两个以上的电阻,总线上的电阻仍保证为60Ω。图4所示是3个分支的星形拓扑结构,在这种情况下,每个分支都可以看出一个终端,每个终端电阻180Ω。
在这种拓扑结构下,如果去除其中一个终端,总线上的的阻抗将不再完全匹配。但是,在短距离传输情况下仍可以正常使用。因此,这种拓扑情况下,CAN总线通讯距离将远小于双终端拓扑结构。
CAN信号的表示
CAN总线采用两条双绞线CAN_HIGH和CAN_LOW进行通信 当没有数据进行通信时 两条线上的电压都为2.5 ,当有信号发送时,CAN_High的电平升高1V,即3.5V,CAN_Low的电平降低1V,即1.5V
信号分为显性 和 隐性
显性: 为逻辑 0 上图中Dominant段 这个时候CAN_H -CAN_L > 0.9V
显性: 为逻辑 1 上图中Recessivet段 这个时候CAN_H -CAN_L < 0.5V
CAN数据传输
CAN总线数据分为四种:
- 数据帧
- 遥控帧
- 错误帧
- 溢出帧
1)数据帧
数据帧共有7个段 分别是 :起始位 仲裁段 控制段 数据段 CRC段 ACK段 结束位
起始位: 一个Bit 显性位(0)
仲裁段: 解决总线竞争,分标准格式和拓展格式 有一位RTR位用来区别是发送还是接收
- 标准格式仲裁段由11Bit组成ID
- 拓展格式仲裁段由29Bit组成ID
- CAN总线通过比较 ID 进行仲裁 帧ID越小 优先级就越高
控制段: 控制段也分标准帧和拓展帧两种情况
- 标准格式:IDE(识别是否为拓展 0标准/1拓展)+R0(保留)+DLC(数据段长度4bit 大小0~8)
- 拓展格式:R0+R1(R0R1保留位用隐性填充)+DLC
数据段: 0~8 Byte (0.0-7.7)
CRC段: 用于数据检错 CRC值 + CRC界定符
ACK段: 用于接收节点 如果前面接收都没出错 则显性表示正确 如果是发送节点则用隐性填充
结束段: 7个隐性位
2)遥控帧
与数据帧基本一致 少了数据段 主要用于向远端节点发送数据请求 RTR位为1 由ID小的优先权限高的原则可知 当同一时间同一节点收发同时发生时 因为数据帧的RTR位为显性(0)所以ID比 遥控帧小 优先发送 数据帧 发送遥控帧的节点则进入只听模式等待
3)过载帧
当某一节点没有做好接受下一帧数据的时候 则发送过载帧
4)错误帧
当发生错误时 节点会发送错误帧