CAN总线学习1--CAN简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16481211/article/details/81394305

1CAN原理

CAN是控制器局域网络(Controller Area Network,CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,是国际上应用最广泛的现场总线之一。
CAN控制器通过组成总线的两根线(CAN-H和CAN-L)的电位差来确定总线的电平,信号是以两线之间的差分电压形式出现。总线电平分为显性电平和隐形电平。
CAN总线采用两种互补的逻辑数值显性和隐性。显性数值表示逻辑0,隐性数值表示逻辑1。当总线上同时出现显性和阴性位时,最终呈现在总线上的是显性。
CAN总线采用两种互补的逻辑数值表示显性和隐性。显性数值表示逻辑0,隐性数值表示逻辑1。当总线上同时出现显性位和隐性位时,最终呈现在总线上的是显性位。
这里写图片描述
在隐性状态下,VCANH和VCAN L被固定为平均电平电压,Vdiff近似为零,此时VCAN H和VCAN L的标称值是2.5V。显性位以大于最小阈值的差分电压表示。VCAN H的标称值是3.5V,VCAN L的标称值是1.5V。
这里写图片描述
我们的控制器就是一个CAN节点,其中有两个引脚,一个是CAN接收,一个是CAN发送,通过CAN收发器转换为CAN_L和CAN_H。CAN收发器将TTL电平转换为了CAN总线电平。所有的节点都通过这两根线并联在一块。
当总线空闲时,所有的单元都可以开始发送消息(多主控制)。所有的消息都以固定的格式发送。

二、CAN报文帧结构

在CAN总线上,报文是以“帧”来发送的,CAN的报文传输由5个不同帧类型所表示和控制。

(1)数据帧:数据帧携带数据从发送器至接收器
 (2) 远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。
 (3) 错误帧:任何单元检测到一总线错误就发出错误帧。
 (4)帧间空:数据帧通过帧间空间与前述的各帧分开。
 (5)过载帧:过载帧用以先行和后续的数据帧(远程帧)之间提供一附加的延时。 

其中数据帧由7个不同的域组成。

1)帧开始(Start of Frame)
        这个域表示数据帧的开始。仅由一个“显性”位组成.
(2)仲裁域(Arbitration Frame)
        这个域表示一个帧的优先级,仲裁场由标识符和远程发送请求位(RTR位)组成。RTR位在数据帧中为显性,在远程帧中为隐性。
        IDE的全称是“识别符扩展位(Identifier Extension Bit)”,对于扩展格式,IDE位属于仲裁场;对于标准格式,IDE位属于控制场。标准格式的IDE位为“显性”,而扩展格式的IDE位为“隐性”。
(3)控制域(Control Frame):
        这个域表示保留位和数据帧长度代码(DLC),控制场由6个位组成,标准格式和扩展格式的控制场格式不同。标准格式里的帧包括数据长度代码、IDE位及保留位r0。扩展格式里的帧包括数据长度代码和两个保留位:r1和r0。
(4)数据域(Data Frame):
        这是数据内容,0~8个字节的数据能被发送,首先发送最高有效位。
(5)CRC域(CRC Frame):
        这个域用于检查帧的传输错误。
(6)ACK域(CRC Frame):
        是对帧已经被正常接收的一个证实。应答场长度为2个位,包含应答间隙(ACK Slot)和应答界定符(ACK Delimiter)
(7)帧结束(End of Frame):
        指示数据帧结束,这个标志序列由7个“隐性”位组成

三 、CAN通信波特率

CAN控制器只需进行少量设置就可以进行通信,其中较难设置部分就是波特率计算。CAN总线的波特率是一个范围。假如波特率为250KB/s,实际波特率可能为200~300KB/s.这样使得CAN总线有很强大容错性。
CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多时间段(Tscl),这些时间段包括:

A. 同步段(SYNC_SEG):位变化应该在此时间段内发生。只有一个时间片的固定长度(1 x tq)
B. 位段1(BS1):定义采样点的位置。其持续长度可以在 116 个时间片之间调整
C. 位段2(BS2):定义发送点的位置。其持续长度可以在 18 个时间片之间调整
D. 同步跳转宽度(SJW):定义位段加长或缩短的上限。它可以在 14 个时间片之间调整  

这里写图片描述

这里写图片描述
这里写图片描述
上面设置分频为Prescaler=9, BS1=5, BS2=6, SJW=1
CAN外接是接到APB1上面,设置系统时钟为216MHz时,APB1外设时钟为54MHz.
经过分频后的频率为54MHz / 9 =6MHz = ~ 166.666ns
CAN波特率为 54MHz / 9 / (SJW+BS1 +BS2 ) = 54MHz /9 /12 = 500KHz = 2000ns,即500KHz

猜你喜欢

转载自blog.csdn.net/qq_16481211/article/details/81394305