CAN总线的硬同步和再同步

3、接收方数据采样与同步问题

        挂载在CAN总线上的所有设备,初始都默认为接收方,当某一个设备想要广播自己的数据时,它就会主动出击,变成发送方,拉开或释放总线,使总线产生一段波形,其他的所有接收方该如何准确采样就是本节的知识点。

        CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长(在编程中保持一致)。

        发送方以约定的位时长每隔固定时间输出一个数据位;接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位。

        理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近(可调)。

        现实中,会出现各种问题,例如下。

        接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近。解决:硬同步。

        接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离。解决:再同步。

位时序

        为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成。最小时间单位由自己确定。定义位时序,是为了确定采样点的位置,为了同步。

        SS = 1Tq

        PTS = 1~8Tq

        PBS1 = 1~8Tq

        PBS2 = 2~8Tq

        其中SS段为同步段,如果数据跳变沿正好出现在SS段,说明当前设备与波形达成同步,如果数据跳变沿不在SS段,说明要调整当前设备的位时序,使跳变沿正好出现在同步段。例如,有个波形的数据跳变沿刚好在同步段,又因为定义的位时序就是一位的时间,所以下一位数据如果再跳变的话,它肯定会在下一个位时序的同步段,如果每次波形跳变沿都在同步段,那就说明当前设备的位时序与波形是同步的,即我在当前设备定义的一位时间正好与波形的一位时间重合,这样当前设备如果是接收方,那它直接在PBS1和PBS2之间采样。如果跳变沿出现在SS段之外,就需要通过后续的硬同步和再同步来调整当前设备的位时序,使跳变沿再次出现在SS段。

        PTS,意为传播时间段,用于吸收网络上的物理延迟。网络的物理延迟指发送单元的输出延迟、总线上信号的传播延迟和接收单元的输入延迟,PTS的时间为以上各延迟时间的和的两倍。(由于硬件电路的限制,这个信号输出到总线,总会后那么一点延迟,同理,数据输入和数据在总线上传输都会有一点延迟)。

        PBS1和PBS2意为相位缓冲段,这两段的作用就是确定采样点的位置,采样点会在PBS1和PBS2中间,如果PBS1给长点, PBS2给短点,采样点就会靠后。如果PBS1给短点, PBS2给长点,采样点就会靠前。

硬同步

        每个设备都有一个位时序计时周期,可以将位时序周期想象成一个秒表,总线上每个设备内部都有一个秒表,假设现在所有设备的的秒表就是同步转动的,有一个设备想作为发送方开始一段波形,那么发送方会在自己的秒表转到SS段时,开始一个新数据位,接收方内部也有一个秒表,并且它的秒表和发送方同步转动,所以接收方的秒表每次转到SS段,就知道一个新的数据位开始了,之后接收方直接在PBS1和PBS2之间进行数据采样。

        如何保证所有设备的秒表同步转动呢?当某个设备(发送方)率先发送报文,当发送方产生第一个跳变沿时,肯定在发送方自己的SS段,其他所有设备(接收方)收到SOF的下降沿(第一个数据跳变边沿)时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步。

        硬同步只在帧的第一个下降沿(SOF下降沿)有效。

        经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近。

        注:红线是发送方的,格子都是接收方的,上下两张图表示了硬同步的两个时间。

再同步

        若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值通过加长PBS1段,或缩短PBS2段,以调整同步。再同步补偿宽度值的最大限值为SJW=1~4Tq,如果SJW=2Tq,但是误差为1Tq,实际补偿1Tq。如果SJW=2Tq,但是误差为3Tq,实际补偿2Tq。

        设置SJW的目的是为了防止波形中噪声对位时序造成过大影响,例如在正常的一位波形中出现了电平抖动,如果不对再同步补偿宽度进行限制,则接收方可能认为这是2位甚至是3位数据,只不过这一位时间的误差非常大而已,如果接收方这样判断,那么原本一位的数据,接收方就会收到两位或者更多位,这样接收方解析二进制流数据肯定会出错,所以接收方不能激进调整位时序,位时序补偿必须有最大限制。这样可以避免接收方因为噪声干扰而补偿过度。

        再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。

注:蓝色线表示总线上发送方发出的波形,格子代表接收方。在硬同步后,刚开始时还同步,后面久了出现图中情形:上面的跳变沿出现在SS段以后,下面的跳变沿出现在SS段以前。

波特率计算

        波特率 = 1 / 一个数据位的时长 = 1 / (TSS + TPTS + TPBS1 + TPBS2)

        例如:

            SS = 1Tq,PTS = 3Tq,PBS1 = 3Tq,PBS2 = 3Tq

            Tq = 0.5us

            波特率 = 1 / (0.5us + 1.5us + 1.5us + 1.5us) = 200kbps

        波特率本来的单位是波特(Baud),意为码元/s,bps是比特率的单位,但是在二进制调制下,波特率的值=比特率的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值