
CAN总线详解[CAN简介&硬件电路]
CAN 总线(Controller Area Network Bus)详解
·
CAN总线 汇总入口:CAN总线详解[汇总]
一、CAN简介
CAN 总线(Controller Area Network Bus)即控制器局域网总线 是由 BOSCH 公司开发的一种串行通信总线,具有简洁易用、传输速度快、易扩展、可靠性高等特点,广泛应用于汽车、嵌入式、工业控制等领域。
其具体特征如下:
- 物理线路:采用(CAN_H、CAN_L)两根通信线,线路较少,且无需共地,使用差分信号进行通信,抗干扰能力强。
- 通信速率与传输距离: 高速 CAN(ISO11898):通信速率在 125k~1Mbps 之间,传输距离小于 40 米。 低速 CAN(ISO11519):通信速率在 10k~125kbps 之间,传输距离小于 1 千米。
- 通信方式: 异步通信,无需时钟线,通信速率由设备各自约定。 半双工模式,可挂载多个设备。当多设备同时发送数据时,通过仲裁判断发送的先后顺序。
- 报文 ID:具备 11 位或 29 位报文 ID,用于区分消息功能,同时也决定了消息的优先级。
- 有效载荷:可配置 1 至 8 字节的有效载荷。
- 传输方式:可实现广播式和请求式两种传输方式。
- 其他特性:具备应答、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’状态) (类似于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拉低。使总线产生电压差。
其他部分功能介绍
- S引脚, 静默或者高速。S引脚的下拉电压源,当S悬空,默认输入0。 最终是控制开关控制器
- 电流源上拉,类似上拉电阻,当TXD悬空时默认输出电平1,防止当TXD引脚电平不确定造成影响。
- TXD显性超时计时器: 当TXD输出出现异常,始终输出显性电平0, 那么CAN总线将始终输出显性电平0 , CAN总线将会瘫痪, 并且其他设备不可阻止。那么这个设备就是**收发器的保险,**当设备异常,始终拽着总线不放,那么过一段时间后,收发器会自动释放总线,防止总线瘫痪
- 温度保护,当温度异常时,会控制驱动器切断输出,以免干扰CAN总线
六、CAN物理层特性
更多推荐
所有评论(0)