can的波特率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了can的波特率相关的知识,希望对你有一定的参考价值。

参考技术A can控制器只需要进行少量的设置就可以进行通信,就像RS232那样。其中较难设置的部分就是通信波特率的计算。can总线能够在一定范围内容忍总线上can节点的通信波特率的偏差,这种技能使得can总线有很强的容错性,同时也降低了对每个节点的振荡器精度。

实际上,can总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200-300KB/S(具体取决于寄存器的设置)。

简单介绍一下波特率的计算,在can的底层协议里将can数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:位同步时间Tsync,时间段1Tseg1,时间段2Tseg2.

其中位同步时间占用1个Tscl;,时间段1占用(Tseg1+1)个Tscl;时间段2占用Tseg2+1个Tscl,所以can控制器的位时间TBit就是:

TBit = Tseg1+Tseg2+Tsync=(Tseg1+Tseg2+3)*Tscl,那么can的波特率canbps就是1/TBit。

但是这样计算出的值是一个理论值。在实际的网络通信中由于存在传输的延时,不同节点的晶体的误差等因数,使得网络can的波特率的计算变得复杂起来。can在技术上引入了重同步的概念,以更好的解决这些问题。

这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此can的波特率实际上有一个范围:

1/(TBit+TSJW) <= CANbps <= 1/(TBit-TSJW)

CAN波特率的值由以下几个元素决定:

1. 最小时间段Tscl

2. 时间段1  Tseg1

3. 时间段2  Tseg2

4. 同步跳转宽度 SJW

那么Tscl是怎么计算的呢?

这是总线时序寄存器中的预分频寄存器BRP派上了用场,Tscl = (BRP+1)/FVBP,FVBP为微处理器的外设时钟。

tscl = pclk。

Tseg1和Tseg2又是怎么划分的呢?

Tseg1和Tseg2的长度决定了CAN数据的采样点,这种方式允许宽范围的数据传输延迟和晶体的误差。其中Tseg1用来调整数据传输延迟时间造成的误差,而Tseg2则用来调整不同点节点晶体频率的误差。

但是他们由于过于灵活,而使初次接触CAN的人有点无所适从。TSEG1与TSEG2的是分大体遵循以下规则: Tseg2≥Tscl2,Tseg2≥2TSJW,Tseg1≥Tseg2

总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为: BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1)

最后,我们来说说如何计算波特率。

can总线有两个总线时钟寄存器BTR0、BTR1。

can系统时钟公式:

tscl = 2*tclk*(32*BRP.5 + 16*BRP.4 + 8*BRP.3 + 4*BRP.2 + 2*BRP.1 +BRP.0 + 1)

其中tclk=1/晶振频率=pclk。

同步跳转宽度:

Tsjw = “tscl”*(2*SJW.1 + SJW.0 + 1)

位周期T

TBit = Tseg1+Tseg2+Tsync=(Tseg1+Tseg2+3)*Tscl

Tseg1 = tscl*(8*TSEG1.3 + 4*TSEG1.2 +2*TSEG1.1 + TSEG1.0 + 1)

Tseg2 = tscl*(4*TSEG2.2 +2*TSEG2.1 + TSEG2.0 + 1)

CAN波特率=APB总线频率/BRP分频器/(1+tBS1+tBS2)。

比如:

总线时钟寄存器BTR0:0x2,;总线时钟寄存器BTR1:0x14。

TBit = tscl(1+5+2)=8tscl

tscl = 2tclk*(3) = 6tclk

TBit =48tclk

tclk = 1/48000000

TBit = 1/1000000

即can的波特率canbps就是1/TBit=1MHz。

56讲CAN——正点原子

总结:CAN总线相关参数的设置,可以计算波特率。一个Tq是0.1微秒,10个Tq就是1微秒,对应的波特率就是1M。

CAN总线中存在两个新名字:显性电平、隐性电平。

特点:显性电平的压差为2V,优先级为0;隐性电平的压差为0V,优先级为1;

作用:显性电平的优先级高于隐性电平的优先级;

数据帧与远程帧

 

仲裁段:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

技术图片

 

控制段:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

技术图片

 

 数据段:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

技术图片

 

ACK段:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

技术图片

 

 总线仲裁:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

技术图片

 

 //下面位时序和Tq数由我们软件设置好之后,硬件便自动去补偿接受或发送的误差

 技术图片

 

 技术图片

 

 

 

以上是关于can的波特率的主要内容,如果未能解决你的问题,请参考以下文章

请问CAN总线的速率为啥用波特率表示,而不用比特率表示?

CAN波特率计算公式

STM32——CAN总线波特率和位时序详解

linux can操作命令

56讲CAN——正点原子

《安富莱嵌入式周报》第290期:开源静电便携测试仪,开源音频功放,CAN高波特率设计,超级铁电产品,小米Vela系统,65W USB PD充电器参考设计