FlexRay簇中本地时钟的同步基于以下事实:每个FlexRay节点从一开始就知道所有静态报文的发送和接收时间点。这可确保FlexRay簇的所有节点都能够校正相位和频率。经过几个周期的校正,所有FlexRay节点会在同一时间点并以同一速率启动所有通信周期

在FlexRay簇中,需确保2至15个FlexRay节点是同步节点,这些节点在每个周期内规定的静态时隙中传输同步报文。这些同步报文不是额外的报文,而是设置了同步帧指示符的静态报文。

所有FlexRay节点都会对比已知时间点与同步报文实际到达的时间点,测得与多个同步节点之间的时间偏差。然后,FlexRay节点创建按顺序排列的时间差列表,并使用FTM(fault tolerant midpoint,容错中点)算法根据该列表计算偏移校正值。

FTM算法剔除列表中的极值,确保偏差过大的本地时钟不会导致FlexRay簇中的通信陷入失调状态。如果同步节点数量不超过7个,剔除最小值和最大值即可。如果同步节点超过七个,则还要剔除次大和次小的测定值。

将剩余的测定值求和并取平均值,得到的结果就是相位校正值。计算频率校正值的方法同上,唯一的区别在于FlexRay节点会测量同步报文所在的周期长度。

相位校正和频率校正均基于以Microtick 为最小单位的本地时钟执行。相位校正通过在每个奇数周期末尾处的NIT中添加或删除一定数量的Microtick (与偏移对应)来调整时间。通过这种方式,FlexRay节点可以改变自己下一个周期的开始时间,使自己与其他FlexRay节点一致。

为确保频率校正不会与相位校正一样,FlexRay节点会将频率校正值均分给下一个偶数周期和下一个奇数周期。因此,所有FlexRay节点均可缩短或延长其周期。

最后修改: 2021年03月8日 星期一 10:00