CAN-位同步-2: 同步时到底发生了什么 5W1H

目录

问题背景

引子:为什么接收方位时序可以提前于发送方?

正文:同步是什么- 5W1H

WHY:为什么需要同步

WHEN :同步操作何时被触发

硬同步触发

重同步触发

WHO:谁在操作,WHAT、WHERE:对什么操作

HOW :同步的调整示例

硬同步过程

重同步过程

参考文章


※※※ 

这篇文章主要是记录了我自己的理解,表达什么的可能会啰嗦或者有错误,如果觉得读起来不舒服,请大家直接去看参考文章,墙裂推荐一级棒~ 

※※※ 

问题背景

最近和CSDN上一位小伙伴聊到CAN重同步机制的一些细节,被问到为什么接收方的位时序可以提前于发送方(如下图)?

相对来说,接收方延后可以理解,因为一般的发送过程会存在时延;但接收方怎么会早于发送方呢——如果发送方还没有发送,那接收方接收到的是什么呢?

发现自己之前并没有思考过这个问题,只是简单地记住重同步两种情况下的PBS1、PBS2延长缩短的应对方法(CAN-位时间与同步_picoasis的博客-CSDN博客_can 位时间)。

今天借由对这个问题的探究,除了搞清楚了“为什么接收方位时序可以提前于发送方”,也对CAN的位同步的机制有了更为深入的理解,下面一一记录自己的理解。有问题的地方,欢迎大家一起来指正讨论呀~

AND—— 在这里(位同步 - 幕布)记录了整个的思考框架和相关细节,欢迎参考~

——————————————————————————————————————

引子:为什么接收方位时序可以提前于发送方?

先上结论。

这个位时序提前,是相位上的体现,并不是广义上的发送端还未发送,接收端已经接收到的概念。

简单来说,接收方接收到的位时序的延后或提前,直接原因是“相位误差”,相位误差有正有负,体现在位时序上就是有提前(正相位误差)有延后(正相位误差)。

而相位误差产生的原因,主要是两点:

  1. 一个是时延——信号在总线上传输的时延,电子控制设备内部的时延,以及一些噪声;时延通常导致正相位误差(延后),噪声是随机的,正负相位误差都有可能;
  2. 另一个是节点的振荡器漂移——这一点它的详细原理我还没去了解,大意上知道振荡器漂移的原因是电子元器件的晶振频率不稳定,(类似于噪声,是随机的或者根据环境情况有一定规律),导致发送节点与接收节点的时钟频率不完全一致,体现在结果上就是相较于发送节点的位时序,接收节点的位时序存在正、负相位误差。

正文:同步是什么- 5W1H

一言以蔽之,同步是由节点自身完成的(WHO),节点将检测到的来自总线的沿 与其自身的位定时相比较(WHEN),并通过硬同步或重同步(HOW)适配(调整)自身的位定时(WHAT),以保证正确地读取总线电平(WHY)

同步与位定时密切相关。

位定时是节点自身完成的(可编程),节点进行位定时的作用有三个:

  1. 确定位周期t_B,以便确定波特率,从而确定总线的网络速度;或在给定总线的网络速度的情况下确定t_B
  2. 确定1位的各个组成部分(SS,PTS,PBS1,PBS2)的时间长度,其中SS用于硬同步,位于PBS1与PBS2相交的点是采样点,用于保证正确地读取总线电平。
  3. 确定SJW以用于同步

WHY:为什么需要同步

一言以蔽之,因为节点需要正确识别总线电平。

我们知道,节点通过收发器连接控制器与总线。

可以简单理解收发器的作用:

  • 在发送过程中,CAN收发器将01离散值,转换为连续波形发送到总线上
  • 在接收过程中,CAN收发器将总线的连续波形,转换为01离散值

同步操作的发生,位于接收过程。

这里面主要涉及两个概念,一个是总线上连续的电流波形(称为总线位流),一个是节点自身通过类似“可变窗口”概念,设置“窗口”的参数,以正确识别总线上的电流波形电平。

在位时间内是总线上的电平值是连续值,而我们读取的值只是某个时刻的离散数值。由于噪声的存在,波形存在很多毛刺,那么将哪个时刻的电平值作为我们最终的读取值,是正确获取总线电平值的关键。也就是采样点的选取问题。这个问题,经过一系列的分析和实测,目前业界广泛使用的策略是位时间70%左右的位置是最佳采样点,对应在位时间的结构上,就是将PBS1与PBS2的交界处设置为采样点。

总线上的位流具有自己的位时间结构,节点如想要正确识别某位的电平值,就需要尽可能的在最佳采样点进行采样,而最佳采样点是由总线位流的位时间结构决定的(PBS1与PBS2的交界处)。

而我们知道由于振荡器漂移、噪声、时延等的存在,总线上所传播位流的位时间结构与节点自己预置的位时间结构并不完全相同(位时间的长度t_B,各段所占的tq个数 等)。因此为了能正确识别总线位流的最佳采样点,节点需要自己的位时间结构进行调整,使它尽可能与总线上的位时间结构一致。

这个调整自身位时间结构的操作就是同步,也是上面提到的位定时操作。

WHEN :同步操作何时被触发

我们已经知道,同步机制有两种——硬同步和重同步,这两者都是接收节点处理自己的位时序,他们在操作上的差别是硬同步对SS段处理,重同步对PBS1,PBS2处理。

那么什么时候会触发硬同步,什么时候触发重同步

在一般情况下,引起硬同步和重同步发生的、来自总线的沿。即总线位流波形只要有跳变沿(显性-->隐性,隐性-->显性),就会触发同步操作。

硬同步触发

硬同步是在总线空闲时,通过一个下降沿(帧起始)来完成。

任意节点在检测到总线的报文帧起始SOF时触发硬同步。

此时,总线由空闲状态转为报文传递状态,SOF意味着总线位流的连续隐性电平跳转为显性位,这个跳转的边沿将触发节点的硬同步操作。

硬同步是强制执行的,所有的节点在检测到这个跳变沿时,都会强制调整自己的SS段,使其与检测到的总线位流的SS段位置一致。

重同步触发

以数据帧的标准帧为例(如下图),根据当前帧的数据段长度(0~64bit),我们知道一帧有44~(44+64)个bit。

 总线位流的帧起始SOF跳变沿引起所有节点进行硬同步操作,而在这之后每一bit的总线位流波形,只要有跳变沿,就会使得节点对比自身位时间与总线位时间。

  • 当总线位流的跳变沿处于节点当前位时间的SS段内,则不需要进行调整;
  • 当总线位流的跳变沿处于节点当前位时间非SS段(PTS,PBS1,PBS2),则会触发重同步操作。

重同步操作将根据具体的沿相位误差情况,修改节点自身的PBS1长度或PBS2长度,使得采样点落在PBS1与PBS2的交界处。

WHO:谁在操作,WHAT、WHERE:对什么操作

同步这个动作,是节点在操作,操作的对象是,自身的一些预置参数。

也就是说,同步就是节点调整自身的预置参数,以达到某些要求

其中:

  • 调整的方法是通过编程修改参数。
  • 这些可调节的参数包括:位周期t_B长度,跳转宽度SJW,以及一个位周期各个组成部分(SS,PTS,PBS1,PBS2)的时间长度
  • 这个要求是指:使得节点在检测来自总线的位流时,能够正确地读取总线电平。

HOW :同步的调整示例

内容来自:姜重然,陈文平,徐斌山.CAN总线位定时和同步的研究与设计[J]

硬同步过程

所谓硬同步,就是由节点检测到的来自总线的沿,强迫节点立即确定出其内部t_B的起始位置(SS的起始时刻)。

硬同步的结果是,沿到来的前一时刻(以tq为量度)即成为节点内部同步段SS的起始时刻,并使内部t_B从同步段重新开始。

硬同步一般用于帧的开始,即总线上的各个节点的内部t_B的起始位置(同步段)是由来自总线的一个报文帧的帧起始的前沿决定的。

同步段SS的时间长度为1个tq。如图3所示,来自总线的引起硬同步的沿在 t1 时刻到来, 则节点检测到该沿,将 t1 的前一时刻 t0(以为 tq 周期)作为内部t_B同步段的起始时刻。

重同步过程

所谓重同步,就是节点根据沿相位误差的大小调整其内部,以使节点内部t_B与来自总线的报文位流的t_B接近或相等。

作为重同步的结果PTS1可以被延长,或者PTS2可以被缩短,从而使节点能正确接收报文。

重同步一般用于帧的位流发送期间,以补偿各个节点振荡器频率的不一致。

这里涉及到沿相位误差的概念, 沿相位误差由沿相对于节点内部t_B同步段SS的位置给定,以 tq 量度,其符号为e定义如下:

  1. 若沿处于SS之内,则e=0。
  2. 若沿处于采样点之前(PTS+PBS1内),则e >0。
  3. 若沿处于前一位的采样点之后(PBS2 内),则e<0。

下面通过图解深入理解节点如何进行重同步。图中SY就是SS,PR就是PTS,PS1就是PBS1,PS2就是PBS2。

假定 总线位流的第1位(帧起始,为“0”) 起始于t1、终止于t2,总线位流的第2位为“1”;从 第2位开始,总线位流的“隐性”(“1”)至“显性” (“0”)和“显性”(“0”)至“隐性”(“1”)的跳变沿均用于重同步。

  1. 在 t1 时刻,节点检测到总线的跳变沿,便进行硬同步,使 t1 时刻的跳变沿处于节点内部第1位t_B的同步段内。节点从第1位的同步段开始启动内部位定时,即根据系统要求的波特率给出内部t_B。
  2. 现假定,由于各节点振荡器频率的不一致,在 t2 时刻的跳变沿未处于节点第2位t_B的同步段SS内,而是处于PBS1内,即有e>0。这表明节点内部的t_B<总线位流的t_B。为了使节点能从总线上通过采样得到正确的位数值, 需使节点内部的 t_B 延长,以使节点内部 t_B与总线位流 t_B 接近或相等。因此,在这种情况下节点应采取的重同步策略为:使PBS1延长一定宽度(图中 PS1延长 2tq,即同步跳转宽度SJW 为≥2tq,如为3tq)。
  3. e<0的情况与之类似,只是PBS2会相应地缩短一定宽度。
  4. 这里需要注意的是,PBS只在当前的t_B内被延长或缩短,在接下来的 t_B内,只要没有重同步,各时间段将恢复编程预设值。

到这里,感觉对同步过程的实现终于理清了头绪 ,不知道还有没有哪里有忙点, 欢迎大家一起纠错&讨论~

PS:与位定时相关的,其实还有位定时参数的计算和设置的内容,暂时还没有弄透,改日梳理出来之后,再另起一篇单独介绍。

参考文章

  1. (讲得最清晰的一篇)姜重然,陈文平,徐斌山.CAN总线位定时和同步的研究与设计[J].低压电器,2009(03):39-42+55.DOI:10.16628/j.cnki.2095-8188.2009.03.016.
  2. 李芳,刘鲁源,吕伟杰.CAN总线位定时和同步机制的分析[J].电子产品世界,2005(09):106-107.
  3. 张立争,徐志军,曾德攀.CAN总线及其位定时的设定[J].军事通信技术,2003,24(04):39-42.
  4. CAN总线内容总结 干货 | 高手写的CAN总线内容总结
  5. CAN总线的特点和帧结构
  6. 精讲CAN总线通信---报文验收滤波、振荡器容差、位定时与同步
  7. CAN通讯之位定时与同步

END

  • 15
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

picoasis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值