该文为Momenta Paper Reading 第一季第四期回顾,始发于2017年3月17日。分享视频回放链接:Momenta Paper Reading 第一季PPT及论文等资料请见文末,添加小助手微信获取
主讲人
费晓天
Momenta视觉算法研究员
引言
这次分享的内容是时间同步(或是说时钟)的传感器系统的构建。分享几个时间同步的小知识。希望能够给大家以后构建无人驾驶的传感器系统时带来一些启发。
因为每一个传感器都需要连接自己的处理器(processer: MCU,ECU等),这次讨论的内容限定于,讨论如何实现这些处理器之间的时钟(定时器)如何完成同步。
因为讨论的是传感器系统,每个传感器和处理器不能独立的的工作。这些处理器之间都会发生信息的交互,一定会互相通讯。这次讨论的同步方法,是在已有的通讯协议基础上,在设备之间相互通讯“握手的过程”实现时间同步。

以上图的OSI 模型为例子,MAC层是实现准确“握手”的重要部分。
接下来主要介绍无线传感器网络,如何实现时间同步。因为无线传感器网络结构清晰简单,能够相对清晰的介绍清楚。
如果需要开发在基于UDP/IP的传感器系统应用,可以尝试一下IEEE 1588-2008 协议。这个协议适用于计算机网络,最近推出很多网卡、交换机等设备都支持这个协议。比如NVIDIA 的PX2也搭载了支持该协议的网卡与交换机。
在汽车领域CAN总线已经成为的事实标准,最后会简单探讨,在CAN通讯协议的基础上实现时间同步。
FTSP无线传感器网络的时间同步

什么是无线传感器网络?如上图,无线传感器网络一般由数量众多的无线传感器节点组成,这些节点大多硬件成本低廉且非常适合大量部署。网关设备(又称为基站节点)是无线传感器网络与互联网沟通的接口,通过网关设备可以将无线传感器网络收集的数据传递到互联网服务器中存储分析。
FTSP:The Flooding Time Synchronization Protocol,是在无线传感器网络中被广泛使用的时间同步协议,主要解决了3个问题:
1、 两个设备之间的时间对齐:时间戳同步
2、 两个设备之间晶体振荡器的对齐
3、 同步网络中所有的设备
时间戳对齐


论文中,分析是节点从应用层发出指令一个数据包,直到接收方应用层收到数据包,可以能的延时。上图分析了各部分的传输延时。可以看到收发、接入信道可能需要几百毫秒的时间。
为了在收发数据包过程中,进行准确“握手的目标”。协议设计时收发数据包的双方都在Preamble结束后,记录时间戳。考虑无线信号以光速传播,可以认为两台设备记录的是相同的时刻。

在FTSP里面将这样的一个数据包称之为,数据同步数据包。通过发送和接收这样一个数据包,并分别记录时间戳。然后将交换各自的时间戳,2台设备之间可以完成一次时间握手。
晶振的校准
一般购买的晶振振荡器精度是:10~20ppm(ppm: part per million, 表示百万分比),即使2个设备通过一次通讯完成一次握手,因为晶振的周期偏差,100秒后就会有1~2ms的误差,而且这个误差会越来越大。
FTSP的解决方案是周期性的广播时间同步数据包。在网络中定义了一个root节点,这个节点的时间称为global时间,其他节点自身时间一个local时间。
每一次非root节点收到时间同步数据包时,记录这次收到的全局时间G,一个本地时间L, 定义L与G之间的固定偏差为Offset,与频率偏差k,可以得到下列公式:
因为root节点周期性发送时间同步包,做一个多点的线性回归就可以算出k与Offset
FTSP论文做了2个实验,一个实验发送不同周期性时间同步数据包,观察同步效果。另一个实验验证关闭周期性的时间同步包,2个节点之间时间同步精度是否会下降。

上图是统计无线传感器节点晶振在30s,300s,为同步周期的情况下,时间同步的误差情况。可以看到,经过线性回归的校准,无线传感器的最大误差不会超过10us。

上图,描述的是如果在0:35分时停止时间同步数据包的广播,2个设备的定时器的偏差会持续增加。
全网的所有节点同步
FTSP实现为了实现无线网络中稳定的时间同步,使用广播方式发送时间同步包。已经同步非root节点,也会定期向外发送时间同步数据包,将网络中同步的节点范围逐步扩大。网络中还回定义多个备份root节点,当正在工作的root节点失效时,会更新root节点,让网络平稳过渡。
论文给出了最终测试的效果:

当网络中root节点更换、设备重启、更新旧设备等事件发生后,整体的时间同步拍那个叫误差控制在10us内,最大误差70us以内。对大部分传感器的应用是已经足够了。
CAN总线时间同步
CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。
最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理、变速箱控制器、仪表装备系统中,均嵌入CAN控制装置。
CAN是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达到10Km时,CAN 仍可提供高达50Kbit/s的数据传输速率。
由于CAN总线具有很高的实时性能,因此,CAN已经在汽车工业、航空工业、工业控制、安全防护等领域中得到了广泛的应用。
我们希望在CAN网络设备之间实现时间同步,根据上述无线传感器网络的经验,首先寻找CAN协议MAC层寻找,用于对齐时间的可能位置。

从上图中我们知道找到CAN的4中数据包的帧类型:数据帧、遥控帧、错误帧、过载帧。

我们发现,数据帧最适合用于构建时间同步“握手”信息。
而且CAN收发器必须保持同步才能收发数据,所以能够通讯就表明,总线上设备同一时刻收发数据包。所以使用的CAN设备,根据datasheet寻找如何获取SOF中断即可。即使硬件没有SOF位置的中断,CAN总线协议数据包长度是固定长度,也可以使用完成接收数据的中断。所以可以选择CAN数据帧,用作时间同步数据包。
找到时间戳握手方式后,利用定期广播用于时间同步的数据包,进行晶振的校准。最后CAN总线是由2根线构成的单一网络,所以网络中只需要一个root设备发送同步数据包,就可以让整个网络中所有设备同步。
总结
主要讨论在已经的通讯方式的基础上,构建一套时钟同步的系统(微秒级):在MAC层记录准确的时间戳,对晶振的误差进行校正,设计一个让整个网络所有设备同步的机制。
总的来说,时间同步系统构建的原理不复杂,但是需要从通讯协议的MAC出发,一步一步构建。
Momenta更多信息请关注 https://www.zhihu.com/org/momenta-3/activities
