CAN通信基础知识

在某些场景下,由于串口、I2C等通信方式的速率、数据量的限制,或者布线限制等,用CAN通信在上述场景下进行数据交流。优点为传输距离较远(Max10km)、数据传输速率高(Max1Mb/s)和具备优秀的仲裁机制。

1.硬件

a.硬件接线

图1 CAN通信各设备接线图

图1中所有的设备挂载在CAN_H、CAN_L两条通信线上,左侧125kbps使用的是低速ISO11519-2标准,此标准下不需要两根线形成闭环,且每根线上接一个2.2kΩ的电阻;右侧500kbps使用的是高速ISO11898标准,此标准下,线要形成回路,且回路要接上两个120Ω(终端)电阻做导线的阻抗匹配,为了模拟无限远的传输线及减少回波反射。

每个节点包含三部分CAN通信的外设,分别为微控制器、CAN控制器和CAN收发器,经典的组合为51单片机+SJA1000+PCA82C250(5V供电),特别的像STM32已经集成了CAN控制器,所以只需要再增加一个CAN收发器即可,经典的组合为STM32+SN65HVD230(3.3V供电)。
在这里插入图片描述

图2 CAN控制器结构框图

发送报文时,由CAN控制器串转并;接收报文时,由CAN控制器并转串,当其接收到来自CAN收发器的数据后,会由接口管理逻辑向主控制器提起中断。

b.信号电平

在这里插入图片描述

图3 电平信号图

2.软件

a.帧结构

在这里插入图片描述

图4 帧作用图

CAN通信的一次通信过程包含5个帧,分别为数据帧、遥控帧、错误帧、过载帧和帧间隔。其中 由硬件完成,其他两帧需要配置。

起始帧:单个显性位(低电平)组成;

结束帧:7个连续隐性位(高电平)组成,结束帧EOF之后再等三个位的空闲(隐性位或高电平),总线才空闲或者才能开启下一帧;

遥控帧:发送给目标节点,以向目标节点请求数据(RTR为高电平,对应帧为遥控帧;反之,对应帧为数据帧),没有数据段。
在这里插入图片描述

图5 遥控帧组成图

在这里插入图片描述

图6 数据帧组成图

在这里插入图片描述

图7 帧各段作用图

仲裁段:此段存储的信息为CAN通信的ID,每一个挂在总线上的设备都有一个CAN控制器,在此控制器里可以设置过滤器,便于筛选出用户所需的ID,从而与此ID对应的设备通信。当多个设备同时发送数据时,需要进行仲裁(仲裁在发送的时候用,而过滤在接收的时候用),ID可以被认作地址,但并不一定是真正的地址,ID的两个作用:仲裁+过滤;
在这里插入图片描述

图8 仲裁段两种格式对比

左为标准ID,右为扩展ID。
RTR位用于表示是数据帧还是远程帧,IDE用于表示是标准帧还是扩展帧。

控制段:此段用于表示CAN通信的数据帧由多少字节组成,DLC有4位,DLC3~DLC0从0000到1000分别表示数据段有0-8个字节;

数据段:此段由CAN控制器对应的寄存器控制,将需要发送的数据填入发送缓冲区即可;

CRC段:接收方将接收到的15位CRC发送方的CRC对比,15位由此段前15位共同组成;
在这里插入图片描述

图9 CRC检验图

ACK段:发送方将ACK段置隐性位(高电平),接收方完成CRC校验后会将此段置显性位(低电平),当发送方回读到显性位时,证明接收方接受成功;
在这里插入图片描述

图10 ACK答复图

b.仲裁

关键:线与和回读。
在这里插入图片描述

图11-1 总线仲裁事例图

在这里插入图片描述

图11-2 总线仲裁事例图

(1)总线处于空闲状态时,最先开始发送数据的节点获得总线控制权,且发送过程不会被其他节点抢断;

(2)多个节点同时开始发送数据时,总线按如图1-11-1所示的过程进行仲裁;

(3)总线从忙到空闲状态时,ID优先级高(ID小)的节点会先获得总线控制权,即使其在ID优先级低的节点之后申请,如图1-11-2所示;

(4)具有相同ID的数据帧和遥控帧在总线上竞争时,仲裁段最后一位(RTR)位为显性的具有优先权,可以继续发送;

(5)标准格式的数据帧和与其具有相同ID的扩展格式的数据帧在总线上竞争时,标准格式的RTR为显性位的具有优先权,可以继续发送。

c.过滤器

STM32的每一组CAN都有14个过滤器,因此当接收到的ID满足其中的任何一个时,便可以被接收或者可以说接收方能接收至少14种不同的报文。

过滤器有标识符识别模式和屏蔽模式。其中前者要求只有报文中的ID要与过滤器设置的ID完全一致,此报文才能通过。后者的过滤器不仅有过滤器,还有屏蔽器,当屏蔽器某一位为1时,报文中的ID对应的位必须与过滤器设置的ID对应的位一致,报文中的ID的那一位才能通过;当屏蔽器为0时,报文中的ID可与过滤器设置的ID不一致,此时报文中的ID那一位也能通过。
在这里插入图片描述

图12 两种过滤器类型图

左图为标识符(ID)识别模式,右图为屏蔽模式。
每个过滤器又有2个32的寄存器,因此可以组成四类不同的过滤模式:
在这里插入图片描述

图13 四种过滤器模式图
表1 四种过滤器模式特点表

在这里插入图片描述
在这里插入图片描述

图14 Keil中滤波器配置例子

图中采用掩码模式配置了一个32位的过滤器,允许通过的ID通过两个16位过滤器设置,掩码也通过两个16位过滤器设置,图中掩码为111…111,表示32位ID必须与过滤器的32位ID全部相同。

d.报文

总线上传输的信息叫报文,是将数据按规定的标准格式“打包”后形成的“包裹”。
在这里插入图片描述

图15 报文定义图

e.波特率

1bit可由同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)、相位缓冲段2(PBS2)组成,而1段的时间又可以由若干TQ(最小时间单位)组成。
在这里插入图片描述

图16 1bit构成图

由于STM32把传播时间段和同步段合并了,所以其1bit由同步段(SYNC_SEG)、时间段1(BS1)和时间段2(BS2)组成,波特率的计算如图17所示:
在这里插入图片描述

图17 波特率计算图

通常控制(SS+BS1)/(SS+BS1+BS2)在75%~85%之间,其中SS为SYNC_SEQ的值。上述三段在CubeMX里的对应关系在“STM32G431xxxx系列CAN通信(二)”中列出。
在这里插入图片描述

图18 波特率事例图

在这里插入图片描述

图19 42MHz时钟下CAN通信常用波特率配置
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐