7.1 控制器局域网总线(CAN总线)

CAN简介

CAN总线(Controller Area Network Bus)控制器局域网总线 CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域。

CAN总线特征:

两根通信线(CAN_H、CAN_L),线路少,无需供地*。(*虽然差分信号无需供地,但实际中通常还是会共地,防止让收发器承受较高的共模电压)

差分信号通信,抗干扰能力强。

高速CAN(ISO11898):125k~1Mbps, <40m。

低速CAN(ISO11519):10k~125kbps, <1km。

异步,无需时钟线,通信速率由设备各自约定。

半双工*,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序。(*不可以同时发送和接收)

11位/29位报文ID,用于区分消息功能,同时决定优先级*。(*ID号越小,优先级越高)

可配置1~8字节的有效载荷。

可实现广播式和请求式两种传输方式 应答、CRC校验、位填充、位同步、错误处理等特性。

CAN总线即继承了UART的方便易用,又拥有项I2C一样的多主机特性,在差分信号上,又和RS485异曲同工。

CAN总线硬件电路

CAN控制器:

CAN控制器引出的TX和RX与CAN收发器相连。(例如STM32)。

CAN收发器:

就是一个芯片,主要实现电平转换、输出驱动和输入采样的功能。CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连 。

闭环CAN总线:

CAN总线串联每个节点后,它的两端要分别接一个120Ω的电阻,使CAN总线形成一个闭合的环路,所以叫做闭环CAN总线。

为什么要加入这两个终端电阻呢?

1、防止回波反射,尤其是高频信号、远距离传输的场景,回波反射是不能忽略的问题。如果不加电阻,信号波形会在线路终端反射,进而干扰原始信号。

2、在没有设备操作时,将两根差分线的电压收紧*(*它的意思是就是,在没有设备操作总线的情况下,终端电阻就像弹簧一样,会将两根线的电压拉到同一个水平),使其电压一致,因为CAN总线是差分信号,有两根线,所以两边的终端电阻可以将两根线“收紧”至电压一致的状态,代表就是默认的“1”状态,并且这两个电阻的阻值不大,收紧的速度很快,使得CAN总线的最大速率也比较快,但代价就是CAN总线的功耗也就比较大。例如,当某个CAN控制器想要发送“0”,他就会操作总线,把总线“拉开”使其呈现“0”状态,当这个控制器想要发送“1”时,就不去碰总线,总线在终端电阻的收缩下,自动归位默认状态“1”。

不理解?查看更加通俗的解释

CAN 总线通讯是用两根线(常称 CAN_H、CAN_L)来传递信号的,每个比特周期中,总线要么处于“隐性”状态(逻辑 1),要么处于“显性”状态(逻辑 0)。

  • 隐性(recessive,逻辑 1)
    • 任何节点都不主动驱动 CAN_H/CAN_L,线是释放的状态。
    • 线对线之间的电压差 ΔV ≈ 0 V(或很小),也就是 CAN_H ≈ CAN_L。
    • 这时总线就处于“空闲”或“逻辑 1”状态。
  • 显性(dominant,逻辑 0)
    • 某个节点把 CAN_H 拉到高电平(≈3.5 V),同时把 CAN_L 拉到低电平(≈1.5 V)。
    • 这样两线之间就产生 ΔV ≈ 2 V 的差分信号。
    • 接收端一看 ΔV > 某个阈值,就判定为“0”。

开环CAN总线:

低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻。

这个终端电阻的接法比较特殊,其中一端接在总线,另一端悬空,根据电路的原理,这个电阻应该是没有任何作用的,因为电路只有形成回路才有效,但在这里他有防止回波反射的作用。

CAN电平标准

CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位。

高速CAN规定: 电压差为0V时表示逻辑1(隐性电平) 电压差为2V时表示逻辑0(显性电平)。

低速CAN规定: 电压差为-1.5V时表示逻辑1(隐性电平) 电压差为3V时表示逻辑0(显性电平)。