目录
1. 简介
2. CAN总线拓扑图
3. CAN硬件电路
4. CAN电平标准
5. CAN收发器-TJA1050(高速CAN)
6. CAN物理层特性
1. 简介
CAN总线(Controller Area Network Bus)控制器局域网总线,是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域。下图是车载网络的构想示意图:
2. CAN总线拓扑图
CAN 控制器根据两根通信线(CAN_H、CAN_L)上的电位差来判断总线电平(差分信号)。总线电平分为显性电平(逻辑0)和隐性电平(逻辑1),二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
CAN总线是:异步,半双工。其无需时钟线,通信速率由设备各自约定,并且由于其半双工通信可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序。
CAN总线的传输方式:广播式和请求式。
广播式传输方式,你可以理解为一个人拿着大喇叭分配工作(发送方发送数据),其他人都可以听到这个喇叭喊话的声音(接收方接收数据),如果此时喇叭喊“张三”(报文ID),那么张三会站出来(响应)。
请求式传输方式,也有一个人才分配工作,不过这个人不想拿着大喇叭主动吆喝别人过来(不主动发送数据),而是假如李四过来问能不能给我分配一个工作(接收方先请求),分配工作的人说可以,即可对李四分配工作(发送方发送数据)。
3. CAN硬件电路
在了解CAN总线的硬件电路之前我们先回顾一下其他通信协议:
名称 | 引脚 | 双工 | 时钟 | 电平 | 设备 |
USART | TX、RX | 全双工 | 异步 | 单端 | 点对点 |
IIC | SCL、SDA | 半双工 | 同步 | 单端 | 多设备 |
SPI | SCLK、MOSI、MISO、CS | 全双工 | 同步 | 单端 | 多设备 |
CAN | CAN_H、CAN_L | 半双工 | 异步 | 差分 | 多设备 |
USB | DP、DM | 半双工 | 异步 | 差分 | 点对点 |
串口硬件连接电路:
IIC硬件连接电路:
SPI硬件连接电路:
对于CAN总线的硬件电路,每个设备通过CAN收发器挂载在CAN总线网络上,CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连。CAN总线可分为高速CAN总线和低速CAN总线。
高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻,数据传输速率125k~1Mbps,传输距离小于40m:
其中两个120Ω终端电阻的作用:
①防止回波反射,使波形更平稳;若是不加中断电阻,反射波形可能如褐色所示,加入中断电阻如紫色所示:
②在没有设备操作时,使电压“收紧”,使其电压一致。这里的原理可以类比IIC通信的上拉电阻
嵌入式面试八股文(一)·define和const的区别以及IIC为什么要加上拉电阻,为什么使用开漏输出-CSDN博客
CAN总线是差分信号,所以终端电阻可以在没有设备操作时将两根线“收紧”至电压一致状态,代表就是默认的逻辑电平“1”,当设备想要“0”时,就去把总线拉开,当设备想要“1”时,就不去碰总线,在终端电阻的作用下,自动恢复到“1”:
低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻,数据传输速率10k~125kbps,传输距离小于1Km:
4. CAN电平标准
CAN总线采用差分信号,即两线电压差(-)传输数据位,前面我们也了解了,CAN总线的信号分为高速和低速两种:
对于高速CAN规定:压差为0V时表示逻辑1(隐性电平)
电压差为2V时表示逻辑0(显性电平)
对于这里的显隐性对应的逻辑状态可能会有人不解,因为通常情况下,我们应该显性对应1,隐性对应0,但是这里为什么反着来了呢?
这里主要是因为显性和隐性所表示的是总线的收紧状态,前面我们了解到CAN总线的默认状态是CAN_L和CAN_H两条总线收紧状态,不需要设备干预所以是隐性电平,又知道总线收紧时其所对应的电平状态为逻辑电平“1”,而总线张开,需要设备干预所以为显性电平,又知道总线张开时所对应的逻辑电平“0”,因此会出现隐性电平和逻辑“1”绑定,显性电平和逻辑“0”绑定。
简单点来说,显性电平和隐性电平表示的是总线的状态,而定义“0”和“1”是为了和电路约定俗成的规则相对应。
对于低速CAN规定:电压差为-1.5V时表示逻辑1(隐性电平)
电压差为3V时表示逻辑0(显性电平)
5. CAN收发器-TJA1050(高速CAN)
其数据手册引脚介绍:
简单翻译一下:
名称 | 引脚 | 描述 |
TXD | 1 | 传输数据输入,从CAN控制器读入数据到总线驱动器 |
GND | 2 | 电源地 |
VCC | 3 | 电源电压 |
RXD | 4 | 传输数据输出,从CAN控制器读出数据到总线驱动器 |
Vref | 5 | 参考电压输入 |
CAN_L | 6 | 低电平CAN总线 |
CAN_H | 7 | 高电平CAN总线 |
S | 8 | 选择输入高速/静默模式(相当于一个开关,可不用) |
6. CAN物理层特性
物理层 | ISO 11898(High speed) | ISO 11519-2(Low speed) | |||||||||||
通信速度 | 最高1Mbps | 最高125kbps | |||||||||||
总线最大长度 | 40m/1Mbps | 1km/40kbps | |||||||||||
总线单元 | 最大30 | 最大20 | |||||||||||
总线拓扑 | 隐性 | 显性 | 隐性 | 显性 | |||||||||
Min | Nom | Max | Min | Nom | Max | Min | Nom | Max | Min | Nom | Max | ||
CAN_High(V) | 2.00 | 2.50 | 3.00 | 2.75 | 3.50 | 4.50 | 1.60 | 1.75 | 1.90 | 3.85 | 4.00 | 5.00 | |
CAN_Low(V) | 2.00 | 2.50 | 3.00 | 0.50 | 1.50 | 2.25 | 3.10 | 3.25 | 3.40 | 0.00 | 1.00 | 1.15 | |
电位差(H-L)(V) | -0.5 | 0 | 0.05 | 1.5 | 2.0 | 3.0 | -0.3 | -1.5 | - | 0.3 | 3.00 | - | |
双绞线(屏蔽/非屏蔽) 闭环总线 阻抗(Z): 120Ω (Min.85Ω Max.130Ω) 总线电阻率(r): 70mΩ/m 总线延迟时间: 5ns/m 终端电阻: 120Ω (Min.85Ω Max.130Ω) | 双绞线(屏蔽/非屏蔽) 开环总线 阻抗(Z):120Ω (Min.85Ω Max.130Ω) 总线电阻率(Г): 90mΩ/m 总线延迟时间: 5ns/m 终端电阻: 2.20kΩ (Min.2.09kΩ Max.2.31kΩ) CAN_L与GND间静电容量 30pF/m CAN_H与GND间静电容量 30pF/m CAN_L与GND间静电容量 30pF/m |
STM32学习笔记_时光の尘的博客-CSDN博客
CAN总线数据帧格式详细介绍-CSDN博客
CAN总线_时光の尘的博客-CSDN博客