锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

一文带你了解 CAN 总线

时间:2023-07-24 15:07:00 传感器连接cancan总线的传感器

一、CAN 简介

CAN:Controller Area Network,德国最早控制局域网络 BOSCH(博世)发展,现在是国际标准(ISO 11898)是目前应用最广泛的现场总线之一。

BOSCH 主要是汽车电子,所以 CAN 一开始主要是为电子汽车准备的,事实也是如此。CAN 该协议已成为汽车网络的标准协议。当然了,CAN 不仅用于汽车电子,经过几十年的发展,CAN 该协议的高性能和高可靠性得到了业界的认可。目前,除汽车电子外,它还广泛应用于工业自动化、医疗、工业和船舶。

以汽车电子为例,汽车上有空调、车门、发动机、大量传感器等。 CAN车载网络结构如图所示:

图中各单元通过 CAN 总线连接在一起,每个单元都是独立的 CAN 同一个节点 CAN 网络中所有单元的通信速度必须相同,不同网络之间的通信速度可以不同。例如,在图中 125Kbps 的 CAN 网络下所有节点的速度都是 125Kbps 是的,整个网络由一个网关连接到其他网络。

CAN 协议具有以下特点:

1) 多主控制。在总线空闲时,所有单元都可以发送消息(多主控制),当两个以上单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 不是发送的目的地址,而是访问总线的优先级。当两个以上单位同时开始发送消息时,每个消息 ID 逐一仲裁比较每个位置。仲裁获胜(被判定为优先级最高)的单位可以继续发送信息,仲裁失败的单位可以立即停止发送并接收。

2) 系统的柔软度。连接到总线的单元没有类似于地址的信息。因此,当在总线上添加单元时,不需要更改连接到总线上其他单元的软硬件和应用层。

3) 通信速度快,通信距离长。 1Mbps(距离小于 40M),最远可达 10KM(速率低于 5Kbps)。

4) 它具有错误检测、错误通知和错误恢复功能。所有单位都可以检测错误(错误检测功能)。检测到错误的单位将立即通知所有其他单位(错误通知功能)。一旦发送消息的单位检测到错误,当前的发送将被迫结束。强制发送的单位将重复此消息,直到成功发送(错误恢复功能)。

5) 故障封闭功能。CAN 可以判断错误的类型是总线上的临时数据错误(如外部噪声等)还是连续数据错误(如单元内部故障、驱动器故障、断线等)。因此,当总线上的连续数据错误发生时,导致故障的单元可以从总线上隔离出来。

6) 多个连接节点。CAN 总线是可以同时连接多个单元的总线。理论上,可连接单元的总数没有限制。但实际上,可连接单元的数量受到总线上时间延迟和电气负载的限制。降低通信速度,增加可连接单元的数量;提高通信速度,减少可连接单元的数量。

二、CAN 电气属性

CAN 总线用两根线连接各单元:CAN_H 和 CAN_L,CAN 控制器通过判断这两根线上的电位差来得到总线电平,CAN 总线电平分为显性电平和隐性电平。此时显性电平表示逻辑0 CAN_H 电平比 CAN_L 高,分别为 3.5V 和 1.5V,电位差为 2V。此时,隐形电平表示逻辑1 CAN_H 和 CAN_L 电压都为 2.5V 左右,电位差为 0V。CAN 总线通过显性和隐形电平的变化发送具体数据,如图所示:

CAN 当总线上没有节点传输数据时,它总是处于隐藏状态,也就是说,当总线处于空闲状态时。CAN 网络中的所有单元都通过 CAN_H 和 CAN_L 如图所示,这两条线连接在一起:

途中所有的 CAN 采用节点单元 CAN_H 和 CAN_L 这两条线连接在一起,CAN_H 接CAN_H、CAN_L 接 CAN_L,CAN 总线两端各接一个 120Ω的端接电阻,用于匹配总线阻抗,吸收信号反射及回拨,提高数据通信的抗干扰能力以及可靠性。

CAN 总线传输速度可达 1Mbps/S,最新的 CAN-FD 最高速度可达 5Mbps/S,甚至更高,CAN-FD 不在本章讨论范围内,感兴趣的可自行查阅相关资料。CAN 传输速度与总线距离有关,总线距离越短,传输速度越快。

三、CAN 协议

通过 CAN 需要按照一定的协议进行总线传输数据,CAN 协议提供了 5 种帧格式来传输数据:数据帧、遥控帧、错误帧、过载帧和帧间隔。其中数据帧和遥控帧有标准格式和扩展格式两种,标准格式有 11 位标识符(ID),扩展格式有 29 个标识符(ID)。这 5 中帧用途见表:

1、数据帧

数据帧由 7 段组成:

①、帧开始,表示数据帧开始的段。
②、仲裁段表示帧优先级。
③、控制段,表示数和保留位的控制段。
④、一帧可以发送数据段、数据内容 0~8 字节数据。
⑤、CRC 检查帧传输错误段。
⑥、ACK 段,表示确认正常接收段。
⑦、帧结束,表示数据帧结束。

如图所示:

图中提供了两种帧结构:数据帧标准格式和扩展格式 D 表示显性电平 0、R 表示隐性电平 1,D/R 表示显性或隐性,即 0 或 1,我们来简单分析一下数据帧的这 7 个段。

①、帧起始

帧的开始非常简单。标准格式和扩展格式由一个位置的显性电平组成 0 表示帧开始。

②、仲裁段

仲裁段表示帧优先级,仲裁段结构如图所示:

从图中可以看出,标准格式不同于扩展格式的仲裁段。 ID 为 11 位,发送顺序是从 ID10 到 ID0,最高 7 位 ID10~ID4 不能全部隐性(1),即禁止 0X1111111XXXXX这样的 ID。扩展格式的 ID 为 29 位,基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0,基本ID 禁止与标准格式相同的最高格式 7 位都是隐性的。

③、控制段

控制段由 6 数据段的字节数、标准格式和扩展格式的控制段略有不同,如图所示:

图中 r1 和 r0 为保留位,保留位必须以显性电平发送。DLC 高位在数据长度之前,DLC 段有效值范围为 0~8。

④、数据段

数据段,即帧的有效数据,具有相同的标准格式和扩展格式,可以包含 0~8 个字节的数据,从最高位(MSB)开始发送,结构如图所示:

注意图中的数据段 0~64 为 bit,对应字节就是 0~8 字节。

⑤、CRC 段

CRC 段保存 CRC 校准值用于检查帧传输错误,标准格式和扩展格式相同,CRC 段结构如图所示:

从图中可以看出,CRC 段由 15 位的 CRC 值与 1 位的 CRC 定义符组成。CRC 值的计算范围包括:帧开始、仲裁段、控制段、数据段,接收方以相同的算法计算,然后计算 CRC 值与此 CRC 比较段落,如果不一致,就会报错。

⑥、ACK 段

ACK 用于确认接收是否正常,标准格式与扩展格式相同,ACK 段结构如图所示:

从图中可以看出,ACK 段由 ACK 槽(ACK Slot)和 ACK 由两部分组成的定义符。发送单元的 ACK,发送 2 隐藏位置,接收正确消息的单位在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束,称为发送 ACK/返回 ACK。发送 ACK 所谓正常消息,是指在所有接收单位中接收正常消息的单位,不包括填充错误、格式错误、CRC 这些接收单位既不处于总线关闭状态,也不处于休眠状态。

⑦、帧结束

最后是帧结束段,标准格式与扩展格式相同,帧结束段结构如图所示:

从图中可以看出,帧结束段非常简单 7 位隐性位构成。

2、遥控帧

当接收单元向发送单元请求数据时,使用遥控帧。遥控帧由遥控帧组成 6 个段组成:

①、帧开始,表示数据帧开始的段。
②、仲裁段表示帧优先级。
③、控制段,表示数和保留位的控制段。
④、CRC 检查帧传输错误段。
⑤、ACK 段,表示确认正常接收段。
⑥、帧结束,表示数据帧结束。

如图所示:遥控帧结构:

从图中可以看出,遥控帧结构与数据帧基本相同,主要区别在于遥控帧没有数据段。 RTR 数据帧是隐性的 RTR 它是显性的,所以可以通过 RTR 位来区分遥控帧和没有数据的数据帧。遥控帧没有数据,所以 DLC 表示要求的数据帧数据长度,遥控帧的其他部分可以参考数据帧的描述。

3、错误帧

当接收或发送误信息时,使用错误帧通知错误帧,错误帧由错误标志和错误定义符组成,错误帧结构如图所示:

主动错误标志有两种:主动错误标志和被动错误标志。主动错误标志是 6 个显性位,被动错误标志是 6 个隐性位,错误定义符号 8 隐性位组成。

4、过载帧

未完成接收准备的接收单元将发送过载帧,过载帧由过载标志和过载定义符组成,如图所示:

过载标志由 6 过载定义符由个显性位组成,与主动错误标志相同 8 个隐性位组成,错误帧中的错误界定符构成相同。

5、帧间隔

帧间隔用于分隔数据帧和遥控帧,数据帧和遥控帧可以通过插入帧间隔来将本帧与前面的任何帧隔开,过载帧和错误帧前不能插入帧间隔,帧间隔结构如图所示:

图中间隔由 3 个隐性位构成,总线空闲为隐性电平,长度没有限制,本状态下表示总线空闲,发送单元可以访问总线。延迟发送由 8 个隐性位构成,处于被动错误状态的单元发送一个消息后的帧间隔中才会有延迟发送。

四、CAN 速率

CAN 总线以帧的形式发送数据,但是最终到总线上的就是“0”和“1”这样的二进制数据,这里就涉及到了通信速率,也就是每秒钟发送多少位数据,前面说了 CAN2.0 最高速度为 1Mbps/S。对于 CAN 总线,一个位分为 4 段:

①、同步段(SS)

②、传播时间段(PTS)

③、相位缓冲段 1(PBS1)

④、相位缓冲段 2(PBS2)

这些段由 Tq(Time Quantum)组成,Tq 是 CAN 总线的最小时间单位。帧由位构成,一个位由 4 个段构成,每个段又由若干个 Tq 组成,这个就是位时序。1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和 Tq 数如图所示:

1 个位的构成如图所示:

图中的采样点是指读取总线电平,并将读到的电平作为位值的点。位置在 PBS1结束处。根据这个位时序,我们就可以计算 CAN 通信的波特率了。具体计算方法,我们等下再介绍,前面提到的 CAN 协议具有仲裁功能,下面我们来看看是如何实现的。

在总线空闲态,最先开始发送消息的单元获得发送权。

当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。实现过程,如图所示:

图中,单元 1 和单元 2 同时开始向总线发送数据,开始部分他们的数据格式是一样的,故无法区分优先级,直到 T 时刻,单元 1 输出隐性电平,而单元 2 输出显性电平,此时单元 1 仲裁失利,立刻转入接收状态工作,不再与单元 2 竞争,而单元 2 则顺利获得总线使用权,继续发送自己的数据。这就实现了仲裁,让连续发送显性电平多的单元获得总线使用权。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章