CAN-BUS协议粗浅学习

CAN-BUS(Controller Area Network)

控制器局域网是一种广泛用于车辆的总线标准,被设计用与在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通讯。它基于消息传递协议,CAN创建了基于信息导向的传输协定的广播机制(Broadcast Communication Mechanism)上。其根据信息的内容,利用其独特的信息标识符(Message Identifier)来定义内容和消息的优先顺序进行传递,而并不指定特定的地址(Station Address)。

1、CAN总线概述

CAN-BUS技术本身就是为车辆行业而生,现代的汽车会为其子系统配备多达70个的电子控制器,其中有些是独立的子系统不需要与其他通讯,而有一些需要于其他子系统进行通讯,例如控制驱动器或接受传感器的反馈信息。CAN的出现解决了传统电缆直连的成本高,布线复杂的问题。由于CAN控制器和处理器价格低廉,CAN总线同样可应用于普通自动化环境的现场总线中。同时由于其较高的实时性、可靠性、强大的检错纠错能力而被广泛用于航空、航海、工业自动化控制等各行各业。
目前又开发出了LIN总线标准,用于在非关键系统中的应用,例如空调和信息娱乐系统等数据传输速度和可靠性不是很重要的系统中。

1.1 标准架构

CAN是一个用于连接电子控制单元(ECU)的多主机串行总线标准。电子控制单元有时也被称作节点,CAN网络上至少需要两个节点才可以进行通信。可以只是简单的输入输出设备;也可以是包含有CAN交互器并搭载了软件的嵌入式组件;还可以是一个网关,允许普通计算机通过USB或以太网端口与CAN网络上的设备通信。
1993年,国际标注化组织(ISO)公布了CAN标准ISO11898,后来CAN标准被重新编译分为两个部分。ISO11898-1涵盖链接层;ISO11898-2涵盖了高速CAN总线的物理层。ISO11898-3涵盖了低速CAN总线的的物理层规范以及CAN总线的容错规范。现在CAN通过ISO11898及ISO11519进行了标准化,已经成为了欧洲汽车网络的标准。

1.2 外设与CAN总线的连接

所有节点间的连接都依靠两根相互平行的总线,实际上这里使用一跟导线就可以完成通信功能,但是采用两条电线组成一条双绞线,是为了抵抗外界的干扰,这一部分在之后会讲到。
ISO11898为高速CAN总线,传输速率为125K~1Mbps(每秒传输的bit数量),是闭环总线,最大总线长度小于等于40m,最多可连接30个单元。
ISO11519为低速CAN总线,传输速率为10K~125Kbps,是开环总线,最大总线长度小于等于1km,最多可连接20个单元。
另外总线的长度会直接影响传输的速率,总线越长最大传输速率就越慢。
在这里插入图片描述在这里插入图片描述

1.3 CAN总线上的信号

1、在CAN总线上的电平变化:
这里 按照高速CAN总线的CAN2.0B规范说明:
总线逻辑为1: 在隐性状态下,CAN两条导线上有相同的预先设定值,该值称为静电平,这个值大约为2.5V。静电平也称为隐形状态,因为所有的控制单元均可以修改它。
总线逻辑为0: 在显性状态下,CAN-High线上的电压值会升高一个预定值(对于CAN驱动数据总线来讲,这个值至少为1V)。而CAN-Low线上的电压值会降低一个同样的值(对于CAN驱动数据总线来讲,这个值至少为1V)。于是CAN驱动总线上,CAN-High线就处于激活状态,其电压不低于3.5V((2.5+1)V);CAN-Low线上电压值最多降为1.5V(2.5-1V)。
综上在隐性状态下,CAN_H与CAN_L压差为0
在显性状态下,CAN_H与CAN_L压差为2V
ISO11898高速CAN总线电平信号:
在这里插入图片描述
ISO11519低速CAN总线电平信号:

在这里插入图片描述
2、CAN收发器上的信号处理:
外设通过CAN收发器与总线相连,在收发器接受侧有一个接受器,本质是一个差动信号放大器。差动信号放大器用CAN_H减去CAN_L线的电平,得出输出的电压。
在这里插入图片描述
用这种方法可以消除静电平或其他重叠的电压:双绞线可以使干扰脉冲有规律地作用在两条线上。做差分后有效避免了信号的干扰。
在这里插入图片描述

2、CAN协议

2.1、CAN协议特点

1.多主带有优先级控制:在CAN总线空闲时的各个节点(或单元,以下称单元)都可以向总线发出消息,最先抢到总线的单元取得访问权;当多个单元同时发送消息时,判断发送单元的优先级,优先级高的继续发送,而优先级低的停止发送进行接受。
2.系统灵活性:于总线相连的单元没有类似于“地址”的信息,这就使得在CAN总线上增加或减少单元都不需要改变软硬件层和应用层。
3.通信速度:根据整个网络中的规模和功能,可以设定合适的通行速度。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元通信速度与其他的不一样,此单元也会输出错误信号,妨碍整个通信的网络通信。不同网络间可以有不同的通信速度。
4.远程数据请求:可通过发送“遥控帧”,请求其他单元发送数据。(打电话)
5.错误检测功能·错误通知功能·错误恢复功能:所有单元都可以检测错误(错误检测功能)。
检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。
正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
6.故障封闭:CAN可以判断出错误的类型时总线上暂时的数据错误(如外部噪声)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
7.连接:CAN总线是可以同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

2.2、各单元将信号CAN总线通信依靠5种不同的帧进行

帧名 作用
数据帧 用于发送单元向接受单元传送数据的帧
遥控帧 用于接受单元向具有相同ID^注1的发送单元请求数据帧
错误帧 用于当检测出错误时向其他单元通知错误的帧
过载帧 用于接受单元通知其尚未做好接受准备的帧
帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的帧

[^注1]: 其中数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11位标识符(Indentifer:ID)。扩展格式有29个标识符。

每个单元节点就像一个车站,拥有五种不同的列车。而CAN总线就像单轨道的列车道,每次只允许一辆列车行驶在路上。各个车站都依靠运行在这条列车道上的列车进行通信。接下来我们就看看这些列车究竟有那些区别

在这里插入图片描述
在这里插入图片描述
我们选比较重要的数据帧和遥控帧来说 ,它们都有两种格式。这两种格式都大同小异,以标准格式为例。首先是帧起始,是一列车的车头,标志着有一列车要上列车道了。若是只有一列车说我要上高速,那么你就直接可以上路。而同时有多列车请求上高速时,我们就要接下来就需要仲裁段来看看列车的等级,等级(也就是优先级)高的列车先行。着两点对于数据帧和遥控帧都是相同的。
而接下来"控制段"就有所不同:数据帧表示数据段的字节数,就像一辆客车,在这里告诉我们它搭载有几个乘客。
遥控帧是没有数据段的,只是向相同ID的单元发送一个请求。所以在控制段表示的是要请求数据的字节数。即告诉相同ID的停车场,派一辆有多少乘客的客车过来。
接下来的数据段只有我们的大客车(数据帧)有。这里就是我们所要运载的乘客了,也就是我们要传输的数据喽。我们一辆大客车有64个座位(8个字节),每个作为座一个bit大小的乘客。要是乘客太多,我们只能再派一俩客车出来,可不能超载哦!
接下来的CRC段是检查帧传输错误的帧。CRC顺序是根据多项式生产的CRC值,CRC的计算范围包括帧起始、仲裁段、控制段、数据段。接受方以同样的算法计算CRC值并进行比较,不一致会通报错误。相当于一个检查员,检查在运输过程中客车和乘客的完整性。如果发生意外会进行报警。
接下来的ACK段表示正常接受的段发送单元的ACK段没有什么作用,而接受单元接受到正确消息的单元通知发送单元正常接受结束。也就是乘客到达目的地时通知起始车站乘客安全送达。
最后的帧结束表示该帧的结束的段。就是这辆列车的车尾了。

2.3、优先级的决定

在总线空闲时,最开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。
在这里插入图片描述
图中D表示显性电平,R表示隐形电平
一般情况下,具有相同ID的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性的数据帧具有优先权,可继续发送。

2.4、CAN总线错误

在CAN总线特点中提到有很多关于错误的方面,在应用中这也是CAN的很大优势之一,所以CAN总线在这个方面也有很多较为复杂的设定,接下来我们就来看一下。

4.1 错误的状态
CAN总线中的设备每个单元始终处于三个状态之一。
(1) 主动错误状态
主动错误状态时可以正常参见总线通信的状态。
处于该状态的单元检测出错误时,输出主动错误标志。
(2) 被动错误状态
被动错误状态是一种容易引起错误的状态。
处于被动错误状态的单元虽能参加总线通信是,但为了不妨碍其他单元的通信,接受时不能积极地发送错误的通知。
处于被动错误的单元即使检测出错误,而其他处于主动错误状态的单元如果没报错,整个总线也认为没有错误。当检测出错误时输出被动错误标志。另外,处于被动错误状态的单元在发送结束后不能马上再开始发送。在下次发送前,在间隔期间内必须插入”延迟传送“。
(3)总线关闭状态
总线关闭态是不能参加总线上通信的状态。
信息的接受和发送均被禁止。
以上的三种状态依靠发送错误计数和接受错误计数来管理,根据计算值决定进入何种状态。发送错误计数值和接受错误计数值根据一定的条件发生变化。具体可查阅附件中CAN入门书。
在这里插入图片描述
在这里插入图片描述
那有哪些错误呢?在谈这个问题之前我们需要首先了解一个为防止突发错误而设定的位填充功能,当同样的电平持续5位时则添加一个位的反型数据。
在这里插入图片描述
(1) 发送单元的工作
在发送数据帧和遥控帧时,SOF~CRC段间的数据,相同电平如果持续5位,在下一个位(第6个位)插入1位与前5位反型的电平。
(2) 接收单元的工作
在接收数据帧和遥控帧时,SOF~CRC段间的数据,相同电平如果持续5位,需要删除下一个位(第6个位)再接收。如果这个第6位和前5位相同,将被视为错误并发送错误帧。

我们来看一看错误的种类:
在这里插入图片描述
当检测出上述错误时,我们车站中的第三种列车错误帧就要发车了。它由错误标志和错误界定符构成。
在这里插入图片描述
(1) 错误标志:包括主动错误标志和被动错误标志两种。

  • 主动错误标志: 6个位的显性位。处于主动错误状态的单元发现错误输出
  • 被动错误标志: 6个位的隐性位。处于被动错误状态的单元发现错误输出
    (2) 错误界定符
    错误界定符由8个隐性位构成。
    当发送单元发送完错误帧后,将再次发送数据帧或遥控帧。

2.5、位时序与同步

由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为4段。

  • 同步段 (SS)
  • 传播速度段 (PTS)
  • 相位缓冲段1 (PBS1)
  • 相位缓冲段2 (PBS2)

这些段又由Time Quantum(Tq) 的最小时间单位构成。
1位分为4个段,每个段又由若干个Tq构成,这成为位时序。
1位由多少个Tq构成以及每个段又由多少个Tq构成都可以任意设定。通过设定位时序,多个定位时序,多个单元可以同时采样,也可以任意设定采样点。
各段的作用和Tq数如下表所示:
在这里插入图片描述
在这里插入图片描述
同步的方法:CAN协议的通信方法为NRZ(NOR-Return to Zero)方式。各个位的开头或者结尾都没有附加的同步信号。单元以与位时序同步的方式开始发送数据。另外,接受单元根据总线上的电平变化进行同步并进行接收工作。但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差。因此接受单元通过硬件同步或者再同步的方法调整时序进行接受。
(1) 硬件同步
接受单元在总线空闲状态检测出帧起始时进行同步调整。
在检测出边沿的地方不考虑SJW的值而认为是SS段。
在这里插入图片描述
(2) 再同步
在接收过程中检测出总线上的电平变化时进行的同步调整。
每当检测出边沿时,根据SJW值通过加长PBS1段,或缩短PBS2段,以调整同步。若边沿落在PTS与PBS1之间,说明总线上的信号与接受单元之间有两Tq的延迟,在PBS1后插入SJW得长度(2Tq),若边沿落在PBS2中,说明总线上的信号与隐性电平有2Tq的提前,则在PBS2中减少SJW的长度以调整同步。但如果发生了超出SJW值得误差时,最大调整量不能超过SJW值。
在这里插入图片描述

参考资料:

  1. CAN入门书 百度云自取:https://pan.baidu.com/s/1FDzAegpBm_2OowK6vfokgA 提取码:w5tl
  2. 总线技术及应用 https://wenku.baidu.com/view/380a5c728e9951e79b892778.html?sxts=1576399303389
发布了2 篇原创文章 · 获赞 2 · 访问量 172

猜你喜欢

转载自blog.csdn.net/SiriusMoon/article/details/103547893