can的波特率

作者: 罗蓁蓁 | 来源:发表于2017-10-23 12:52 被阅读46次

    can的波特率

    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。

    相关文章

      网友评论

        本文标题:can的波特率

        本文链接:https://www.haomeiwen.com/subject/kxavuxtx.html