1.2 位时间1.2.1 位时间的概念所以: 首先了解一下CAN总线系统中的两个时钟:晶振时钟周期和 CAN时钟周期 晶振时钟周期:是由单片机振荡器的晶振频率决定的,指的是振荡器每震荡一次所消耗的时间长度,也是整个系统中最小的时间单位。 CAN时钟周期:CAN时钟是由系统时钟分频而来的一个时间长度值,实际上就是一个时间份额Tq。可以按照下面的公式计算: CAN时钟周期=2×晶振时钟周期×BRP 其中BRP叫做波特率预分频值(baudrate prescaler)。 1.2.2 位时间的分段如上文所述,在CAN的位定时中,一个CAN时钟周期称为一个时间量子 — Tq。 1)同步段(Synchronization Segment):
2)传播段(Propagation Segment):
3)相位缓冲段1(Phase Buffer Segment1):
4)相位缓冲段2(Phase Buffer Segment2):
于是: tBit=tSS+tPS+tPBS1+tPBS2 tBit=tSS+tPS+tPBS1+tPBS2 tBit:位时间;tSS:同步段时间;tPS:传播段时间;tPBS1:时间段1;tPBS2:时间段2。 在CAN通信中,有两种同步机制:硬同步与重同步。 2.1 、同步的规则 ☆ 一个位时间内只允许一种同步方式,要么硬同步要么重同步; ☆ 任何一个从“隐性”到“显性”的下降沿 都可以用于同步; ☆ 硬同步发生在报文的SOF位,所有接收节点调整各自当前位的同步段,使其位于发送的SOF位内; ☆ 重同步发生在一个报文SOF位之外的其它段,当下降沿落在了同步段之外时发生重同步; ☆ 在SOF到仲裁场发送的时间段内,如果有多个节点同时发送报文,那么这些发送节点对跳变沿不进行重同步 2.2 硬同步 硬同步发生在SOF位,所有接收节点调整各自当前位的同步段,调整宽度不限 (1)发送节点Node_A在发送SOF位时,SOF位的下降沿在SS段; (2)这个时候接收节点Node_B发现自己当前位的SS段和发送节点SOF位的SS段不同步。也就是说当Node_A产生SOF位SS段时,Node_B的当前位的SS段已经在5个Tq之前产生了; (3)于是接收节点Node_B强行将自己当前位的SS段拉到与SOF位的SS段同步。 2.3 重同步 重同步发生在一个报文SOF位之外的其它位场内,当接收节点Node_B当前位的下降沿落在了发送节点Node_A当前位的同步段之外时发生重同步。 重同步会导致相位缓冲段1的延长或者相位缓冲段2的缩短,从而保证采样点的准确。 2.3.1 PBS1延长 发的晚(慢),收的早(快),导致PBS1延长。 如上图所示: (1)发送节点Node_A比接收节点Node_B的时间慢了,也就是说Node_A当前位的ss段产生的时候,Node_B 当前位的ss段已经在2个Tq之前产生了; (2)所以这个时候接收节点Node_B就将PBS1延长2个Tq的时间; (3)于是这个时候Node_A当前位的采样点就和Node_B的采样点同步了。 2.3.2 PBS2缩短 发的早(快),收的晚(慢),导致PBS2缩短。 如上图所示: (1)发送节点Node_A当前位的SS段诞生2Tq时长之后,接收节点Node_B的当前位才产生SS段; (2)于是,接收节点Node_B当前位的PBS2段缩短, (3)这样就会导致接收节点Node_B的下一位能够提前2个Tq,从而Node_B的下一位采样点和Node_A下一位的采样点能够同步。 2.3.3 同步跳转宽度 在重同步时,有个同步跳转宽度(SJW,Synchro Jump Width)的概念,表示的是PBS1和PBS2重同步时允许跳转的最大宽度。 同步跳转宽度必须满足以下几个条件: SJW必须小于PBS1和PBS2的最小值; SJW最大值不能超过4; 位定时的参数主要涉及以下几个: (1)位速率:单位为bps、Kbps、Mbps 1Mbps=1000Kbps=1000000bps 1Mbps=1000Kbps=1000000bps (2)位时间:tBit,单位一般为纳秒(ns) tBit = 1/位速率 (3)时间量子(Tq): Tq=1/NBT
(5)相位缓冲段 相位缓冲段的时间长度分为两种情况: if (NBT-1-tPTS_Tq)/2==偶数 PBS1_Tq = PBS2_Tq = (NBT-1-tPTS_Tq)/2 else PBS1_Tq = (NBT-1-tPTS_Tq)/2 PBS2_Tq = PBS1_Tq + 1 (6) 同步跳转宽度 以下面的例子来讲述位定时参数的确定方法: MCU晶振16MHz,位速率1Mbps,总线长度20m,单位总线延迟5ns/m,物理接口的发送接收延迟150ns (1)晶振时钟周期:T=1s/16MHz = 62.5ns (2)位时间 :tBit = 1/1Mbps = 1000ns (3)BPR和NBT:考虑到 T = 125ns,tBit = 1000ns,所以BPR只能取值为1,才能满足NBT∈[8,25],于是预分频数BPR=1; (4)CAN时钟周期Tq = 2 × 62.5 × 1 = 125ns (5)NBT = 8 (6)传输延迟时间tPTS tPTS=2×(20×5+150)=500ns 所以 tPTS_Tq=tPTS/Tq=500/125=4 于是NBT=8个Tq的长度中需要有4个Tq用于补偿传播延迟,于是还剩下4个Tq, SS同步段长度固定占据1个Tq,还剩3个Tq,于是PBS1分配一个Tq,PBS2分配2个Tq。 SJW=min{PBS1,4}=1 (8)晶振误差 版权声明:本文为CSDN博主「weixin_40528417」的原创文章,遵循CC 4.0 BY-SA版权协议,获得作者的转载权限。 |
|