目录
前言
本期我们就开始学习CAN总线,本人是跟着江协科技学的,在学习过程中我会发布相关博客来去分享个人所学的知识以及感悟,本期内容是接着前面stm32专栏的后继内容,相关程序也是以stm32来去编写的。(相关视频:CAN总线入门教程 - 持续更新中_哔哩哔哩_bilibili)
一、基本概念
- 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,用于区分消息功能,同时决定优先级
- 可配置1~8字节的有效载荷
- 可实现广播式和请求式两种传输方式
- 应答、CRC校验、位填充、位同步、错误处理等特性
CAN总线我们可以理解为类似一直局域网通讯,也就是在这个“局域网”内所有设备都是可以互相发送信息的,这里并没有所谓的主从之分,大家都是平行设备进行相互通讯,所以在新能源汽车那边应用的相当广泛,当今新能源汽车也是市场需求很大,很多人去入行新能源汽车是必须学习CAN总线的。从上面的介绍我们可以看出,CAN通讯是通过差分信号来通讯的,而且相较于我们之前学的通讯方式,CAN通讯是只有两根通讯线的,非常少,再加上差分通讯,所以抗干扰能力非常强。CAN总线分为高速和低速,高速速度快但距离短,低速速度慢但距离远,不过当今来说高速是使用比较多的,所以我们是以学习高速CAN为主。
二、主流通信协议对比
名称 | 引脚 | 双工 | 时钟 | 电平 | 设备 | 应用场景 |
UART | TX、RX | 全双工 | 异步 | 单端 | 点对点 | 两个设备互相通信 |
I2C | SCL、SDA | 半双工 | 同步 | 单端 | 多设备 | 一个主控外挂多个模块 |
SPI | SCK、MOSI、MISO、SS | 全双工 | 同步 | 单端 | 多设备 | 一个主控外挂多个模块(高速) |
CAN | CAN_H、CAN_L | 半双工 | 异步 | 差分 | 多设备 | 多个主控互相通信 |
下图依次是USART、I2C、SPI通讯的通讯图。
三、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的时候,这里就无需对CAN_H和CAN_L进行任何操作,默认状态就是高电平1;当想发送0的时候,这时候CAN_H和CAN_L就会被分开,CAN_H和CAN_L之间就会有电压差实现发送0,如果发送了0之后紧接着发送1的时候,电路就会松开对CAN_H和CAN_L的控制,回归默认状态。
高速CAN 低速CAN
四、CAN电平标准
- CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位
- 高速CAN规定:
电压差为0V时表示逻辑1(隐性电平)
电压差为2V时表示逻辑0(显性电平)
- 低速CAN规定:
电压差为-1.5V时表示逻辑1(隐性电平)
电压差为3V时表示逻辑0(显性电平)
我们之前学过的通信方式都是使用的逻辑电平,而对于CAN通讯我们要学习一种新的电平,也就是差分电平,这是CAN总线在传输过程中使用的电平方式,其效果是跟逻辑电平一致的。下面我们可以看到对于高速CAN的电平是CAN_H和CAN_L默认为2.5V电平电压差为0,这里没有设备电路的干预所以表现为隐性;当发送表示逻辑0的时候,CAN_H和CAN_L就会分开,其之间电压差为2V,这时候是需要相关电路干预的表现为显性。(低速CAN分析也是类似的)
五、CAN收发器 – TJA1050(高速CAN)
引脚图:
引脚功能说明图:
物理层特性:
以上就是本期的全部内容了,我们下次见!
今日壁纸: