1 FlexRay时钟的概念
FlexRay的时间单位是从大到小分级的:通信Cycle、通信宏拍(Macrotick,MT)和微拍(Microtick)。每一个节点中的振荡器,经过分频之后,产生一个本地的微拍时钟单位,它与位采样数及位采样时钟周期有关,所以节点中最小的时间单位是位采样时钟周期。各个节点可以有不同的微拍,簇内共同的时间单位是MT,每个节点组态时定义正常时每MT内本地微拍的个数。本地MT的生成有专门的逻辑,在每一本地微拍时执行一次,以实现本地MT的修正,以保证MT尽量全局一致,并且可以保证频率的校正均匀分布在整个cycle中。
2 FlexRay收发的同步
在收发过程中还有字节的位同步和帧开始同步来解决可能的抖动与延迟,它们极大地缓解了时钟同步的精度要求。
在以字节为单位的帧数据传送时,每个字节的开头有由“10”构成的字节开始序列(BSS),这个1/0跳变沿是位时间同步用的:发现跳变沿后位采样计数器就设为2,当位采样计数器=5时,zVotedVal的值就作为当时的位值。位采样计数器为9后溢出复位为1。显然,若因收发有时钟差,而要在下一个BSS的1处采错,需要差4个位采样时钟周期时才会发生。也就是说,时钟差5%才会发生。
FlexRay的同步帧是在静态段中传送的,一个时隙(slot)内实际上有很多空闲时间。首先,每个帧是在称为actiON point offset处(gDACtionPointOffset)开始发送,这是一个全局参数。帧开始是“0”表示的传送开始序列TSS,经过1位“1”的帧开始序列FSS,再是第一个字节开始序列BSS,它由“10”二位组成。接收节点要正确检测到第一个字节开始序列BSS的1/0跳变沿才作帧接收的同步。帧的最后是“01”构成的帧结束序列FES,然后发送器被禁止了。发送器禁止后30 ns总线处于高阻状态。在帧传送结束后发送节点要有长度为11位的通道空闲分界符(cChannelIdLEDelimiter,实际上总线高阻时,经50~250 ns接收节点会发现总线空闲,然后输出RxD=“1”。然后总线一直在空闲状态。由于FlexRay的物理连接有可能通过有源星型耦合器,在总线空闲到总线上传送0有一个启动过程,再加总线上位置不同的传送延迟差别、收发器的延迟,发送节点的TSS长度会与接收节点的长度不同,接收节点看到的TSS会比发送节点的TSS短,称为TSS截短。只要接收节点看到的TSS在1~(gdTSSTransmitter + 1)之间,TSS就是有效的。所以gdActionPointOffset之前,总线也是空闲的。因此,若节点时钟差不使总线上的传送提前使gdActionPointOffset前的空闲消失,或落后使cChannelIdleDelimiter后的空闲消失,就不会产生2个发送帧的重叠而影响正常收发。
图1 求取相位差的时间关系
帧的gDACtionPointOffset是全局参数,但是由于TSS截短的影响,同步帧接收节点见到的TSS的1/0跳变沿的时间与接收节点ActionPointOffset时间之差并不是节点的时钟差,所以它用第一个BSS中的1/0跳变沿来倒推发送节点ActionPointOffset,如图1所示。倒推是该时刻减去常数pDecodingCorrection和pDelayCompensation得到发送节点TSS的开始时刻。PDecodingCorrection内含有TSS、FSS、BSS、总线滤波延迟和位采样延迟各项。pDelayCompensation内含有收发器延迟、星型耦合器延迟和电缆长度的传输延迟。pDelayCompensation的数值取簇中的最小者。由此倒推出的发送节点的动作点称为primaryTRP,发送和接收的节的动作点的时间偏差就被记录下来。
接收节点对每一个同步帧都加记录,该同步帧接收是否正确也记录在案。只有接收正确的偏差才能用于校正计算之中。
FlexRay有相位与频率的校正,为了频率校正,需要连续2个cycle的同一同步节点所发的帧的偏差,所以校正是以2个cycle为周期进行的。频率校正的计算结果在每个奇数cycle内完成,下一个cycle开始生效,在MT形成过程中实行,因此是均匀分布的。相位校正在奇数cycle的末尾完成,在该cycle的网络空闲段实行。
4 FlexRay算法的问题
图2 同步节点位置分布举例
时钟偏差推算是造成飘移的原因。图2中有4个同步帧发送节点1~4,各相距8 m,节点5是普通非同步帧发送节点。按规定,pDelayCompensation是一个预定的常数,该按最小值选取,对图2的情况,就是节点5和节点2间的延迟,即接近为0。这样,对实际发生的延迟是补偿不足的。不足部分可写为:
节点间的延迟,按每米10 ns计,最大距离为24 m,那么此补偿不足量有0.24 μs。
在图1中,假定同步帧在cycle的第一个static slot,对static slot的开始时间有一个标准的参考点,发送节点和接收节点各有相位差TT(0)和TR(0),此时接收节点得到的偏差将含有延迟补偿不足的部分:
由于距离不同,接收节点得到的URT也是不同的。
FlexRay规定,发同步帧的节点在属于自己的slot上的相位误差登记为0。假定节点间原来已处于接近同步的情况,对节点1而言,e11=0最小,e14最大,按算法它们将被丢弃,于是校正量将按(e12+ e13)/2计算:
当节点初始相位比参考节点2、3的平均相位早时,应该推迟本节点下一cycle的开始,实现负反馈。就应有T1(1)= T1(0)-Corr1。为了分析问题的需要,假定只作一部分校正,即:
其中系数c≤1,对FlexRay而言c=1。于是有:
推而广之,将各节点的相位差写为向量,可以得到状态方程:
对T1而言,系数a11=1-c,a12= c/2,a13= c/2,a14=0,B=-c,U1=120 ns。对节点2而言,它丢弃最大的e24和最小的e22,U2=80 ns。类似可确定其他节点的系数。所以矩阵A有:
同时有B=-c和U=[120ns 80ns 80ns 120ns]T(6)
对A求取特征根得到:λ1=1,λ2= 1-c,λ3=λ4=1-1.5c。
然而在FlexRay中URT是一个系统性偏差,并不因一次校正而消失,因此按(4)式工作时时钟差会不断移动。当U不变时有:
令(7)式中的第二项为S,则有:
(8)式右边各项均为有限值,而因为A的特征根有λ1=1,(I-A)是不可求逆的,所以S将含有不定值,所以随着n的增加, T(n+1)是不断漂移的。
漂移使通信时钟离标准时钟越来越远,通信时钟初始相位的负值代表它比标准时间延迟(如图1所示)。在延迟超过1个cycle时就会使上次写入的帧还未发出就被覆盖。以cycle=5 ms、100次校正漂9.3 μs计,53763次校正会漂1个cycle,这就是说,8.96 min会产生一次丢帧。由于节点都是同步的,每个slot都会发生丢帧,如果每个cycle有91个静态slot,那么意味着每8.96 min丢失91个帧--平均每6 s丢一帧。而且,如果host时钟是偏快方向漂移,那么丢帧的频度还要增大。
补偿过头时URT为负值,通信时钟将比标准时间提前。这种情况一般不会发生,因为规定选延迟的最小值作pDelayCompensation。但是这里又出现了host时钟的漂移问题:所有同步帧的内容是由host写入的,host必须在相应slot的开始前使同步帧的内容就绪。最坏情况是原来host在slot开始前写入,漂移超过了gDACtionPointOffset就会产生同步帧未写入的情况。FlexRay的帧头部有一位标志null frame. indicator,当帧内容未更新时,这一位自动设为0,同步帧还是发出去,所以并不影响同步帧的个数。
6 频率校正中的问题
频率校正时采用了连续2个cycle的同一同步节点的相位差,将这两个相位差的差作原始数据,用类似算法计算校正量,然后按死区与限幅的方法实施校正。在同一同步节点的相位差的减法中,系统性偏差URT互相抵消,因
上一篇:GPRS网络电能表的设计方案
下一篇:支持向量回归机在风电系统桨距角预测中的应用