【CAN总线原理与软件开发】

CAN总线原理及软件开发

一、CAN总线简介

CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种功能丰富的串行总线标准,最早是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,现在CAN已经形成国际标准,并已被公认为几种最有前途的现场总线之一。

二、CAN总线标准

CAN标准分为底层标准(物理层和数据链路层)和上层标准(应用层)两大类。

1、底层标准

CAN底层标准都相同,涵盖OSI模型中的物理层和数据链路层,与ISO/OSI模型的对应关系如下图所示:

在这里插入图片描述

ISO11898-1:数据链路层协议,描述CAN总线的基本架构,定义不同CAN总线设备在数据链路层通信方式
ISO11898-2:高速CAN总线物理层协议,最高数据传输速率1Mbps,应用为两线平衡式信号(CAN_H,CAN_L)
ISO11898-3:定义低速CAN总线(LS-CAN, Fault-Tolerant CAN)物理层标准,数据传输速率在 5Kbps~125Kbps 。Fault-Tolerant是指总线上一根传输信号失效时,依靠另外的单根信号也可以通信
ISO11898-4:定义CAN总线中的时间触发机制(Time-Triggered CAN,TTCAN),定义与ISO 11898-1 配合的帧同步实体,实现汽车ECU之间基于时间触发的通信方式。

2.上层标准

涉及到例如流控制、设备寻址和大数据块传输控制等,不同应用领域或制造商会有不同的做法,没有统一的国际标准,充电设备目前主要使用SAE-J939。

在这里插入图片描述

三、CAN协议

CAN协议和网络协议比较类似,进行了分层的设计思想;

在这里插入图片描述

四、物理层

1、差分信号

物理层就是CAN的电信号的传输过程。CAN是串行异步通讯,只有CAN_HIGH和CAN_LOW两条差分信号线,数据通过差分信号的方式进行通讯,其优点就是可以增加信号的抗干扰能力,抑制共模信号的干扰;具体如下图所示;

在这里插入图片描述

所以,信号在变成一个字节一个字节的数字信号之前,就是按照这种差分形式的模拟信号来传输的。我们可以简单地理解一下,当CAN_HIGH减去CAN_LOW大于某个阈值的时候,可以把它当做逻辑高,反之,当小于某一个阈值时,就变成逻辑低。

2、连接方式

充电设备上较为常见的是直线手拉手或者星型,需要特别注意的是在运用中常常把这两种方式用成树形拓扑

在这里插入图片描述

3.充电机常用的方式

充电设备比较常用手拉手的只线型总线,CAN总线支持多个节点挂载在总线上,比较类似I2C总线,可以在SCL和SDA上挂载多个从机,具体如下图所示;

在这里插入图片描述

不过CAN总线其实没有主从的概念,每个设备都是一个节点(Node),节点直接可以相互通讯,相较于I2C总线,CAN总线设置了终端电阻,常见的一种闭环连接模式,相对的还有开环的连接模式

4.CAN总线长度与信号速率关系
在这里插入图片描述

高速CAN的拓扑结构具体如下所示:
在这里插入图片描述

六、CAN节点

CAN节点通常分为三个部分;MCU/CPU;CAN控制器;CAN收发器;
通常一些单片机内部就集成了相应的CAN控制器外设,比如STM32,所以我们常见的结构一般是这样子的。

在这里插入图片描述

所以整体的流程是这样的,如下:
1)CAN总线上通过差分信号进行数据传输;
2)CAN收发器将差分信号转换为TTL电平信号,或者将TTL电平信号转换为差分信号;
3)CAN控制器将TTL电平信号接收,并传输给MCU;
那么,对于单片机开发者而言,需要关注的就是最终CAN控制器传输给MCU的数据,如何去配置CAN控制器,以及使用CAN控制进行数据的读取和发送。

七、传输层

CAN总线上的每个节点不需要设置节点的地址,而是通过消息的标识符(Identifier)来区别信息。因为CAN总线的消息是广播的(就是大家都可以收到消息),比如总线上有节点A,节点B,节点C,那么节点A发消息,节点B和节点C都会收到消息;节点B 和节点C 会根据消息中的标识符,以及B和C中的消息过滤规则进行比较,如果不满足规则,就不接受这条信息。
这里需要注意的是:
1)发送消息的时候,总线必须处于空闲状态;
2)标识符越小,则消息获取总线的优先级越高;

1、帧类型

在这里插入图片描述

2、位时序

我们可以对照UART串口的传输协议,他有起始位和停止位,然后大家都规定使用相同的通讯速率(波特率);其实CAN通讯也是类似的方式,它属于异步通讯,没有时钟信号线,所以所有节点之间要约定好使用相同的波特率来传输数据。在总线空闲一段时间后,在(起始位) 进行硬同步,同步方式是将每一位划分成多个称为量子的时间段(time quanta),并分配一定数量的量子到位中的四个阶段完成的。
这四个阶段分别为:

在这里插入图片描述

在这里插入图片描述

3、采样点

采样点是接受节点判断信号逻辑的位置,CAN通讯属于异步通讯。需要通过不断的重新同步才能保证收发节点的采样准确。
若采样点太靠前,则因为线缆原因,DUT外发报文尚未稳定,容易发生采样错误,若采样点太靠后,则因为SJW原因,也会引起接受节点同步跳转宽度的调整。调整不好就容易出现错误。
尤其在组网的时候,多个节点尽量保持同一个采样点,且最好在但不超过7/8位时间点上

在这里插入图片描述

推荐个波特率计算工具,可根据芯片计算波特率
http://www.bittiming.can-wiki.info/

4、波特率

关于波特率的计算公式:
CAN波特率 = CAN时钟/( (1 + TSEG1 + TSEG 2) * CAN_Prescaler)

八、对象层

1、消息过滤器

CAN总线上是广播式的,但并不是所有节点都会对总线上所有消息感兴趣。节点通过控制器中过滤码(Filter Code)和掩码(Mask Code),再检验总线上消息的标识符,来判断是否接收该消息(Message Filtering)。
以STM32为例,主要有两种工作模式:标识符列表模式和标识符屏蔽位模式
对于掩码,“1”表示该位与本节点相关,“0”表示该位与本节点不相关。

九、运用层

充电行业主要使用SAE-J939,与CAN 2.0的对应关系为下图

在这里插入图片描述

对于CAN总线中一些常见问题可以观看该博主写滴

为什么CAN总线终端电阻是120欧?

CAN总线软件部分代码测试看下一遍文章吧
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小殷学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值