CAN总线 汇总入口:CAN总线详解[汇总]

一、CAN简介

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

其具体特征如下:

  1. 物理线路:采用(CAN_H、CAN_L)两根通信线,线路较少,且无需共地,使用差分信号进行通信,抗干扰能力强。
  2. 通信速率与传输距离: 高速 CAN(ISO11898):通信速率在 125k~1Mbps 之间,传输距离小于 40 米。 低速 CAN(ISO11519):通信速率在 10k~125kbps 之间,传输距离小于 1 千米。
  3. 通信方式: 异步通信,无需时钟线,通信速率由设备各自约定。 半双工模式,可挂载多个设备。当多设备同时发送数据时,通过仲裁判断发送的先后顺序。
  4. 报文 ID:具备 11 位或 29 位报文 ID,用于区分消息功能,同时也决定了消息的优先级。
  5. 有效载荷:可配置 1 至 8 字节的有效载荷。
  6. 传输方式:可实现广播式和请求式两种传输方式。
  7. 其他特性:具备应答、CRC 校验、位填充、位同步、错误处理等特性 。

二、主流通信协议对比

名称 引脚 双工 时钟 电平 设备 应用场景
UART TX、RX 全双工 异步 单端 点对点 两个设备互相通信
I2C SCL、SDA 半双工 同步 单端 多设备 一个主控外挂多个模块
SPI SCK、MOSI、MISO、SS 全双工 同步 单端 多设备 一个主控外挂多个模块(高速)
CAN CAN_H、CAN_L 半双工 异步 差分 多设备 多个主控互相通信

三、CAN硬件电路

  • 每个设备通过CAN收发器挂载在CAN总线网络上
  • CAN控制器引出的TX和RX与CAN收发器相连, CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连
  • 高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻
  • 低速CAN使用开环网络CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻

高速CAN硬件电路图

  • 高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻 终端电阻的作用主要有两个:
  1. 防止回波反射(用于处理高频信号远距离传输时 信号在终端反射,干扰原始信号)
  2. 在没有设备操作时,将两个差分线的电压“收紧”, 使其电压一致。(在没有设备操作时,这个电阻会把两个差分线的电压拉到同一水平,也就是代表默认的‘1’状态) (类似于I2C的上拉电阻)
  • CAN控制器:比如STM32等
  • CAN收发器:一颗芯片,主要实现电平转换、输出驱动和输入采样的功能
  • CAN控制器的TX和CAN收发器的TX相连、RX与CAN收发器的RX相连,无需交叉

低速CAN硬件电路图

  • 这里的两颗2.2K的电阻,知识一端接到CAN总线上, 另一端是悬空的,这里也是用于防止回波反射。但是具体多大作用就不知道了~

四、CAN电平标准

CAN 总线采用差分信号,即通过两线电压差(V_CAN_H 减 V_CAN_L)传输数据位

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

两线“收紧”是默认状态,表示逻辑1, 所以叫隐性。 两线“张开”产生电压差,表示逻辑0,所以叫显性。

高速CAN和低速CAN的电压不一样哦。低速CAN是考虑传输速度更远,所以把电压的1和0的电压差距加大了

在日常中,有事也用逻辑电平来表示CAN的时序,但是要明白的是 实际的电路中 是通过差分电平来判断此时是隐性电平1 还是 显性电平0。 ”CAN的差分电平就像南通的腿,张开是0, 闭合就是1“

五、CAN收发器-TJA1050(高速CAN)

  • GND、VCC提供5V供电
  • TXD、RXD与CAN控制器相连
  • CAN_H、CAN_L与CAN总线相连
  • Vref 是参考电压输出,可以不用。
  • S 是选择高速模式还是静默模式,(理解成开关)

输入部分原理详解

  • RECEIVER 用于比较CAN_H与CAN_L的电压差, 当有电压差是输出1, 没电压差输出0.
  • 两个 MOSFET管 上管为Pmos,下管为Nmos 当RECEIVER输出1时,上管断开,下管导通,RXD与GND相连 ,输出 显性电平 ‘0’ 当RECEIVER输出0时,上管导通,下管断开,RXD与VCC相连 ,输出 隐性电平 ‘1’
  • 总的来说:当有电压差时输出 显性电平 ‘0’ ; 没有电压差时输出隐性电平 ‘1’。

输出部分原理详解

  • 两个25K的电阻,并联,他们各分得0.5倍VCC电压,也就是2.5V。这就会在没有外力影响时,将电压固定在2.5V。也就是隐性电平的 ‘0’。(两线“拉紧”的力,主要是靠外部的终端电阻。)
  • DRIVER会控制两个mos管(蓝色圆圈)的状态。 当TXD输入1时,上下两管同时断开,两根总线回归2.5V。 当TXD输入0时,上下两管同时导通,CANH被VCC拉高,CANL被GND拉低。使总线产生电压差。

其他部分功能介绍

  1. S引脚, 静默或者高速。S引脚的下拉电压源,当S悬空,默认输入0。 最终是控制开关控制器
  2. 电流源上拉,类似上拉电阻,当TXD悬空时默认输出电平1,防止当TXD引脚电平不确定造成影响。
  3. TXD显性超时计时器: 当TXD输出出现异常,始终输出显性电平0, 那么CAN总线将始终输出显性电平0 , CAN总线将会瘫痪, 并且其他设备不可阻止。那么这个设备就是**收发器的保险,**当设备异常,始终拽着总线不放,那么过一段时间后,收发器会自动释放总线,防止总线瘫痪
  4. 温度保护,当温度异常时,会控制驱动器切断输出,以免干扰CAN总线

六、CAN物理层特性

Logo

获取更多汽车电子技术干货

更多推荐