本发明涉及无线网络领域,特别是一种无线网络设备间时钟同步的方法。
背景技术:
无线自组网、无线传感器网络因其简单可靠、部署方便、成本低廉等优点在物联网、智能工业、智能交通、智慧城市和智能家居领域中得到越来越广泛的应用。目前市面上存在的无线自组网、无线传感器网络大部分是一种非同步通讯网络,各个设备节点采用各自独立的晶振和系统时钟运行无线网络协议,并且采用主从问答的方式进行信息交互、指令传输,这些非同步无线通讯设备由于硬件晶振偏差,温度飘移、传输延迟误差等多种因素,无法保证无线网络中设备节点间的同步信息采集和同步动作执行;而在某些应用环境中,对于信息的同步采集和动作同步执行至关重要,这些非同步无线通讯设备则无法胜任这些工作。
目前市面上存在采用无线令牌技术设计的无线网络,这种无线网络只能在令牌命令能够达到的无线空域内实现设备间的同步,不能实现无线网络多级级联的设备间同步,且同步精度依赖于设备节点各自独立的晶振和系统时钟,同步精度不高且误差大;随着温度的变化和运行时间延长,各个设备节点的晶振频率会出现偏移,导致同步误差会进一步加大。
在无线自组网、无线传感器网络领域存在较多的无线时钟同步技术,但这些无线时钟同步技术要么实现过程复杂、要么对无线网络设备的硬件有特殊要求、要么受软件操作延迟影响导致时钟同步精度不够高,这些无线时钟同步技术难以在无线自组网、无线传感器网络、低功耗无线网络领域得到很好的应用。
当前很多无线联网的应用中,为了进行设备节点的时钟同步,会采用传统的NTP、SNTP协议进行时间同步,该同步方式虽然实现简单,但其仅能实现点对点设备的时间同步,仅能用于日历时间的同步,不能实现系统时钟的频率和相位同步,受无线传输多径干扰严重,同步精度较低;对于同步精度较高的应用环境,通常会在每个设备上增加GPS时钟同步硬件实现高精度的时钟同步,该同步方式虽然同步精度高,但需要增加昂贵的GPS时钟同步硬件,且对CPU处理器有较高的要求。
电池供电的低功耗无线自组网、无线传感器网络设备的应用环境中,无线设备进入休眠需要配置一个统一的休眠时钟,若休眠时钟不同步,会造成部分设备被唤醒,部分设备还处于休眠状态,如此情况下进行无线通讯,会造成部分设备无法接收通讯指令的问题;若过长保持设备的唤醒状态,则又会增大设备的耗电量,减少电池供电设备的继航时间,如果增加昂贵的时钟同步芯片,又会进一步增加设备的耗电量。
技术实现要素:
本发明所要解决的技术问题是提供一种无线网络设备间时钟同步的方法,时钟同步实现过程简便、无特殊硬件要求、同步误差小,通过该时钟同步方法可以实现无线网络设备间系统时钟和任务调度时钟的同步,对于无线设备间的多级级联应用也能够保证很好的时钟同步精度。
为解决上述技术问题,本发明所采用的技术方案是:一种无线网络设备间时钟同步的方法,包括以下步骤:
一、时钟源设备与至少一个时钟从设备网络互连;
二、时钟源设备获得基准时钟,时钟从设备获得未经同步的基准时钟;
三、时钟源设备与时钟从设备之间通过时钟同步帧进行时钟信息的交互;
四、时钟源设备将包括基准时钟频率和相位的信息传输到时钟从设备,时钟从设备中的CPU处理器计算出时钟源设备的基准时钟,并根据基准时钟来校正自身的基准时钟;
通过以上步骤实现无线网络设备间的时钟同步。
优选的方案中,所述的时钟从设备为多个,时钟源设备与多个时钟从设备组成多级树状拓扑结构;
其中,时钟源设备同时向多个时钟从设备进行时钟同步;
时钟从设备从多个时钟源设备中选择时钟精度高的时钟源设备进行时钟同步。选择依据是根据时钟源级别和Offset级别。
优选的方案中,所述的时钟源设备包括无线通讯模块、CPU和硬件晶振或CPU时钟;
无线通讯模块用于进行无线网络的数据通讯和无线时钟同步信息的传输;
CPU用于处理任务调度和无线时钟同步信息,并进行时钟同步计算及校正;
硬件晶振或CPU时钟为CPU处理器运行提供一个基础的本地时钟。
优选的方案中,步骤二中:
a、时钟源设备将来源于外部或内部的时钟信号接入CPU的IO中断管脚,并配置为双边沿触发模式,记录时钟信号的脉冲宽度标准时间(t0);
b、CPU通过配置定时器对CPU内部运行的主时钟频率进行n分频,产生一个定时器中断;
c、CPU内的计数器对定时器中断进行+1累计计数;
由以上步骤获得基准时钟。
优选的方案中,还包括校准基准时钟的步骤:
外部或内部的时钟信号输入至CPU的IO中断管脚后,触发IO管脚中断服务,在正边沿中断时,记录基准时钟的计数器的数值t1;在负边沿中断时,记录基准时钟的计数器的数字t2,然后计算测量得到时钟信号脉冲宽度时间t3;
比较输入的时钟信号脉冲宽度时间t0和测量时钟信号脉冲宽度时间t3;
若t0与t3之间误差不超过设定的计数,则可以判定基准时钟计数器计数精度满足要求,标记为基准时钟同频可用;
若t0与t3之间误差超过设定的计数,则计算定时器的分频偏移值,然后用分频偏移值修正定时器达到标准的的定时精度,重复以上步骤,进行定时器的精度修正,始终控制基准时钟计数器的计时时间同步到标准的基准时钟,直到标记的基准时钟同频可用为止。
优选的方案中,还包括基准时钟的相位同步步骤:
CPU的IO中断管脚接收到输入时钟信号,在每秒的0起始时刻的上升沿或下降沿中断时,CPU将基准时钟的计数器取整,实现对每秒的0起始时刻进行同相位处理,保证基准时钟的计数器的每秒的0起始时刻和输入时钟信号的0起始时刻同步,完成秒相位同步,标记基准时钟同相可用;
同频可用和同相可用后,作为主时钟源的无线设备对时钟从设备进行时钟频率和相位的同步操作。
优选的方案中,所述的时钟从设备包括无线通讯模块、CPU和硬件晶振或CPU时钟;
无线通讯模块用于进行无线网络的数据通讯和无线时钟同步信息的传输;
CPU用于处理任务调度和无线时钟同步信息,并进行时钟同步计算及校正;
硬件晶振或CPU时钟为CPU运行提供一个基础的本地时钟;
时钟从设备的CPU配置一个定时器对CPU内部运行主时钟频率进行n分频,产生一个定时器中断;
CPU内的计数器对定时器中断进行+1累计计数;
时钟从设备中由以上步骤获得未同步的基准时钟,由无线接收中断接收到时钟源设备发送过来时钟同步帧中的两个严格控制发送间隔的概略时钟帧来校准基准时钟的同频,由时钟同步帧中的同步请求帧和同步时钟帧来校准基准时钟的同相位和同频的二次微调。
优选的方案中,所述的时钟同步帧包括概略时钟帧、同步请求帧和同步时钟帧;
概略时钟帧包括秒时间段和基准时钟段,秒时间段记录从某时刻离当前时刻的秒数,基准时钟段为时钟源设备的计数器的时钟计数;概略时钟帧同时通知时钟从设备,时钟源设备的时钟是否已经同步到标准时钟,是否可以进行时钟同步;概略时钟帧帧每隔固定时段定时发送两次,两次的时间间隔由基准时钟严格控制;用于时钟从设备的无线接收中断进行定时器的校准;
时钟从设备在初次上电后、重启或者时钟失步的情况下,收到主时钟源A的概略时钟帧后,需要进行无线时钟同步时,向时钟源设备发起同步请求帧;或者在时钟从设备的基准时钟每隔固定时间向时钟源设备发起同步请求帧;同步请求帧包括帧头、帧类型、从设备地址和从设备状态信息。
同步时钟帧为时钟源设备接收到时钟从设备的同步请求帧后,记录计数器的数字t2信息,在一个时间段后向时钟从设备发送同步请求帧;同步请求帧包括帧头、帧类型、时钟源地址、时钟源级别、Offset级别、从设备地址和计数器的数字t2信息。
进一步优选的方案中,通过时钟源设备与时钟从设备之间的时钟同步帧交互,修正时钟从设备的定时器达到标准的中断时间,抵消帧传输延迟,获得校准后的同频可用同相可用的基准时钟。
进一步优选的方案中,同步请求帧和同步时钟帧进行时钟同步交互时,记录多次的Offset时钟差值;若判断Offset时钟差值始终为正数,则判断得出时钟从设备的定时器的计时时间比校准计时时间长,微调从设备定时器的计数时间变短;修正定时器达到标准的定时精度;
若判断Offset时钟差值始终为负数,则微调定时器的计时时间变长,修正定时器达到标准的计数时间精度;
通过对Offset时钟差值的多次判断比较,对定时器的计时时间进行二次微调。
本发明进行时钟同步的众多设备中,将提供基准时钟的设备定义为时钟源设备,以下简称时钟源;利用时钟源设备的基准时钟进行时钟同步校正的设备定义为时钟从设备,以下简称从设备;时钟源和从设备通过时钟同步帧进行时钟信息的交互,时钟源设备将基准时钟频率、相位等信息传输到从设备上,从设备中的CPU计算出时钟源设备的基准时钟,并根据基准时钟来校正自身的系统时钟,从而达到无线网络设备间的时钟同步目的。
本发明提供的一种无线网络设备间时钟同步的方法,同步的基准时钟可以用于CPU的系统任务同步调度、同步控制指令执行、外部信号高精度同步测量、高速移动物的同步测量,例如高速移动过程中的车辆行驶速度的测量、无线通讯中的高速同步跳频通讯等。本发明的方法能够针对更低廉更低速的运行主频的CPU,例如运行主频<32KHz的超低功耗CPU的应用,例如将定时器T1的定时设定为0.25ms,依旧能够实现时钟同步误差<1ms的时钟同步,足以满足基本的无线任务调度,满足超低功耗应用中设备的同步唤醒任务。
本发明的方法不仅可以完成无线网络设备间日历时间的同步,还能够实现无线网络设备间系统时钟频率和时钟相位的同步;即使各个无线网络设备中CPU处理器晶振出现频率严重偏差、温度飘移的情况下,也能够保证无线网络设备间系统时钟的同步和一致性。
本发明可以在任意具有定时器中断和IO中断的CPU处理器上实现时钟同步。
本发明的时钟源设备在同一时刻,利用一帧无线时钟同步帧可以同时向8个从设备进行时钟同步;利用分帧方式,每个时钟源可以实现多达1000个从设备的时钟同步。
附图说明
下面结合附图和实施例对本发明作进一步说明:
图1为本发明的多级级联拓扑结构示意图。
图2为本发明中时钟源设备和时钟从设备的硬件结构示意图。
图3为本发明中时钟源设备基准时钟产生过程示意图。
图4为本发明中时钟源设备和时钟从设备时钟同步帧交互和修正示意图。
图5为本发明中同步时钟帧交互时时钟差值修正的示意图。
图6为本发明中时钟同步流程图。
图7为本发明中的多时钟源选择流程图。
图8为本发明中的中断处理逻辑流程图。
图9为本发明中定时器T1的计时时间中断流程图。
具体实施方式
实施例1:
本发明提供了一种无线网络设备间时钟同步的方法。
一种无线网络设备间时钟同步的方法,包括以下步骤:
一、时钟源设备与至少一个时钟从设备网络互连;
二、时钟源设备获得基准时钟,时钟从设备获得未经同步的基准时钟;
三、时钟源设备与时钟从设备之间通过时钟同步帧进行时钟信息的交互;
四、时钟源设备将包括基准时钟频率和相位的信息传输到时钟从设备,时钟从设备中的CPU处理器计算出时钟源设备的基准时钟,并根据基准时钟来校正自身的基准时钟;
通过以上步骤实现无线网络设备间的时钟同步。
优选的方案中,所述的时钟从设备为多个,时钟源设备与多个时钟从设备组成多级树状拓扑结构。
如图1中所示,本发明的时钟同步方法,可以实现多级时钟同步,如提供基准时钟的时钟源A向从设备B、C进行了时钟同步,从设备B完成了时钟同步后,经过授权处理后,从设备B可以做为时钟源向从设备D、E、F进行时钟同步;如图1中所示。本发明将时钟源A定义为第0级时钟源,简称主时钟源,从设备B定义为第1级时钟源,如此设备D、E、F还可以作为第2级时钟源给其它无线设备提供时钟同步;本发明的时钟同步方法完成的时钟同步误差<0.3us,在保证整个无线网络设备时钟同步精度<1us时,至少可允许设备进行3级级联时钟同步,在保证整个无线网络时钟同步精度<1ms时,且控制时钟源无线信号覆盖距离,本发明可允许高达3000级级联时钟同步。
本发明中的时钟源和从设备进行时钟同步,由无线通讯模块、CPU、硬件晶振三部分组成,如图2中所示,无线通讯模块用于进行无线网络的数据通讯和无线时钟同步信息的传输,CPU用于处理无线设备任务调度和无线时钟同步信息,并进行无线设备时钟同步计算及校正,硬件晶振为CPU处理器运行提供一个基础的本地时钟。
本发明的无线网络中第0级主时钟源的基础时钟可以来源于卫星时钟、GPS时钟、以太网时钟等更高级别、更高精度的外部时钟,也可以来源于时钟源设备自身的硬件晶振时钟,如图3中所示;各个无线网络设备,通过本发明将其自身系统时钟和主时钟源进行时钟频率和相位同步后,无线网络中的所有设备就可以按照统一的时钟频率、统一的时刻同时进行信息采集、动作执行、任务调度、同步休眠唤醒、同步无线发送接收、同步跳频通讯等工作。
本发明中主时钟源基准时钟产生过程,如图3、5中所示:
1、将来源于GPS等外部高精度的时钟信号接入到主时钟源CPU处理器的IO中断管脚,并配置IO中断管脚配置为双边沿触发模式,同时记录外部高精度的时钟信号高(低)脉冲宽度的标准时间t0。
2、CPU通过配置定时器T1对CPU内部高速运行主时钟频率进行n分频,产生一个0.1us的定时器中断,并准备一个32位的计数器,在定时器T1中断服务中对该计数器进行+1累计计数,计数器每加1表示经过0.1us的时间,该计数器命名为基准时钟计数器,用符号BTC(Base Tick Count)表示;因BTC每0.1us进行一次累计计数,由此T1定时器中断累计计数过程中可以产生一个10MHz的基准时钟,用符号BSC(Base Source Clock)表示。
3、在外部高精度时钟信号高(低)脉冲输出到CPU的IO中断管脚后,会触发IO管脚中断服务,在正边沿(上升沿、下降沿)中断时,记录基准时钟计数器BTC的数值t1,在负边沿(下降沿、上升沿)中断时记录基准时钟计数器的数字t2,然后用公式t3=(t2-t1)×0.1us计算测量到的外部高精度时钟信号脉冲宽度时间。
4、比较外部高精度的时钟信号高(低)脉冲宽度的实际时间t0和测量时间t3。
5、若t0和t3之间误差不超过±3个BTC计数,即±0.3us,则可以判定基准时钟计数器BTC计数精度满足要求,同时标记时钟源基准时钟BSC同频可用。
6、设备时钟未同步之前,受晶振精度和温度飘移的影响,初次配置的定时器T1的0.1us计时精度会有误差存在,若t0和t3之间误差超过±3个BTC计数,即±0.3us,则用公式m=(t3-t0)÷0.1us+n计算定时器T1的分频偏移。
m值为分频偏移;
n为当前定时器T1的分频因子。
用m值修正定时器T1达到标准的0.1us的定时精度。
7、重复3~6步,进行定时器T1的精度修正,始终控制基准时钟计数器BTC的计时时间同步到标准的0.1us时间,直到进入步骤5中标记基准时钟BSC同频可用为止,标记基准时钟BSC同频可用后,定时器T1的0.1us计时时间的误差范围在±1/n之内,在100MHz主频的CPU应用环境中,0.1us计时时间的误差为±10ns,采用更高主频的CPU时0.1us计时时间的误差将更小;
8、本发明中,CPU的IO中断管脚接收到GPS等外部高精度时钟信号每秒的0起始时刻的上升沿或下降沿中断时,CPU处理器将基准时钟计数器BTC对1000×1000×10取整,即将BTC的秒计数取整,实现对每秒的0起始时刻进行同相位处理,保证BTC的每秒的0起始时刻和GPS等外部高精度时钟信号每秒的0起始时刻同步,完成秒相位同步,标记基准时钟BSC同相可用;9、该10MHz的基准时钟BSC标记了同频可用和同相可用后,作为主时钟源的无线设备时钟源A即可以对其它无线从设备B、C、D、E、F……等通过无线信号进行时钟频率和相位的同步操作。
如图1中,本发明中需要进行时钟同步的B、C、D、E、F……等从设备的CPU也和主时钟源A类似,通过配置定时器T1对CPU内部高速运行时钟进行n分频,产生一个0.1us的定时器中断,并准备一个32位的计数器,在T1定时器中断服务中对该计数器进行+1累计计数,产生一个基准时钟计数器BTC和一个10MHz的基准时钟BSC,该BTC和BSC都处于未同步状态,由主时钟源A通过无线信号对这些设备进行时钟同步。
本发明通过无线信号进行时钟同步,其同步帧分为概略时钟帧、同步请求帧、同步时钟帧3类。
第一类帧为概略时钟帧,概略时钟帧用于主时钟源A向从设备B广播概略时间,概略时间分为秒时间段和BTC段,秒时间段记录从2000年1月1日0时0分0秒距离当前时刻的秒数,BTC为主时钟源A的BTC计数值,同时通知从设备B,主时钟源A的时钟是否已经同步到标准时钟,是否可以进行时钟同步;该帧长度固定为22个字节,包含帧头、帧类型、时钟源地址、时钟源级别、Offset级别、概略时间秒段、概略时间BTC段、同频标志、同相标志、CRC16校验共10个部分,如下表所示。
该帧每隔60秒定时发送两次,两次的时间间隔由BSC严格控制在20ms的间隔,帧的发送方式为:主时钟源A将概略时钟帧写入到无线通讯模块的FIFO中,不立即进行无线数据的发送,向无线通讯模块写入发送标志位进行帧发送,同时进行20ms的标准时间定时,当20ms定时中断到后,利用定时中断再次立即写入发送状态标志位进行无线发送,再次重复发送一次概略时钟帧,保证从设备B接收到两个间隔为20ms标准时间的概略时钟帧,产生两个无线接收完成中断,利用从设备B的BTC针对这两个无线接收完成中断的20ms时间间隔进行测量,利用本实施例主时钟源基准时钟产生过程的第1~6条计算同步方法,修正定时器T1达到标准的0.1us的定时精度,保证从设备的BTC的计数精度满足系统要求;由于概略时钟帧的发送启动和接收完成都采用中断方式,避免了软件操作延迟误差和硬件传输延迟误差,可以保证了从设备B接收到的两帧间隔为标准的20ms,保证了从设备B的定时器T1的精度;从设备B通过概略时钟帧可以得到当前的概略时间,进行年、月、日、时、分、秒的初步校正。
第二类帧为同步请求帧,从设备B在初次上电后、重启或者时钟失步的情况下,收到主时钟源A的概略时钟帧后,需要进行无线时钟同步时,向主时钟源A发起同步请求帧;或者BTC的每隔60秒向主时钟源A发起同步请求帧;该帧长度固定为64个字节,包含帧头、帧类型、从设备地址、从设备状态、填充字节、CRC16校验共6个部分,如下表所示。
从设备B发送同步请求帧依旧采用将同步请求帧写入到无线通讯模块的FIFO中,不立即进行无线数据的发送,由系统任务调度进入发送状态的方式进行发送,向无线通讯模块写入发送标志位进行帧发送,立即记录同步请求帧发送开始时的BTC值t1_B;主时钟源A收到同步请求帧的接收完成中断后,立即记录同步请求帧接收完成时的BTC值t2,并在主时钟源A的数据库中记录t2_B,表示接收从设备B同步请求帧的BTC值;同理,主时钟源A也会接收到从设备C的同步请求帧,在数据库中记录t2_C,依次记录t2_D、t2_E、t2_F等,主时钟源A总共最多可以记录1000条t2记录;填充字节共54字节用0x00进行填充。
第三类帧为同步时钟帧,帧长度固定为64个字节,如下表所示,包含帧头、帧类型、时钟源地址、时钟源级别、Offset级别、从设备地址及t2信息、填充字节、BTC值、CRC16校验几个部分,每个同步时钟帧一次最多可以传输8个从设备的t2信息,若少于8个从设备请求同步,则将空余的从设备地址及t2信息填充为0x00;主时钟源A会在接收到从设备B、C、D、E、F……等的同步请求帧后记录t2信息,并在5s的时间内以无线信号向从设备广播发送同步时钟帧;该帧在发送前按照帧格式组织同步时钟帧及填写从设备的t2信息,并将帧中除了t3和CRC16的6个字节外的其他所有帧数据先写入无线通讯模块的FIFO中,然后启动一个20ms的定时器中断,同时立即记录主时钟源A的当前的BTC值t3,接下来再计算帧CRC并将同步时钟帧的t3和CRC16字段写入无线通讯模块的FIFO中,待20ms的定时器中断到后,由中断服务立即进入帧发送状态,向无线通讯模块写入发送标志位进行帧发送,实际帧发送的准确时刻为t3'=t3+20ms;当从设备B接收到同步时钟帧的接收完成中断后,立即记录同步时钟帧接收完成时的BTC值t4_B;同理其他从设备C、D、E、F……等接收到同步时钟帧中断后各自记录t4_C、t4_D、t4_E、t4_F……等;
通过上述三类同步帧的交互,如图4中所示,从设备B在接收到主时钟源A的间隔20ms的概略时钟帧后,通过主时钟源基准时钟产生过程的第1~6条计算同步方法,修正定时器T1达到标准的0.1us的定时精度,获得校准后的同频可用同相可用的BSC和BTC;然后从设备B在交互过程中记录了BTC的t1_B和t4_B,同时从同步时钟帧中提取了t2_B和t3;将4个BTC值进行预处理T1=t1_B、T2=t2_B、T3=t3'=t3+20ms,T4=t4_B,获得T1、T2、T3、T4四个BTC值,T2-T1为同步请求帧B到A的时钟误差和帧正向传输延迟,T3-T4为同步时钟帧A到B的时钟误差和帧反向传输延迟。由于同步请求帧和同步时钟帧的长度相同,都为64字节,两帧传输延迟数值相同符号相反,将两个差值进行代数和,则互相抵消了帧传输延迟,然后将代数和除以2,可以求得从设备B到主时钟源A的时钟误差,即利用公式Offset=((T2-T1)+(T3-T4))÷2可以计算从设备B和主时钟源A的BTC值的时钟差值,将从设备B的BTC加上误差值Offset就可以让从设备B获得和主时钟源A相同的BTC值;前面经过概略时钟帧两帧中断对从设备B的定时器T1的0.1us计时进行了同步,再次利用同步请求帧和同步时钟帧对从设备BTC值进行了同步,使得在相同的0.1us计时的定时器T1的计数条件下,对相同BTC值进行+1累计计数,可以保证在后续设备运行过程中,主时钟源A和从设备B的BTC值相同,同时也保证了由此产生的10MHz的BSC时钟同频率和同相位;从设备C采用相同的方式获得和主时钟源A相同的BTC值,实现和主时钟源A的时钟频率和相位的同步。
如图4中,定义:T1=t1_B,T2=t2_B,T3=t3'=t3+30ms,T4=t4_B
请求帧延迟和BTC正向误差:α=T2-T1
时钟帧延迟和BTC反向误差:β=T3-T4
BTC正向反向误差代数和:Offset=(α)+(-β)=(T2-T1)+(T3-T4)
从设备B和时钟源A的BTC误差均值:Offset=((T2-T1)+(T3-T4))÷2
本发明主时钟源的BTC值被外部高精度时钟信号每秒的0起始时刻进行了同相处理,在从设备同主时钟源进行了时钟频率和相位的同步后,从设备每秒的0起始时刻和外部高精度时钟信号保持同相,其秒相位误差<0.12°。
如图5中所示,同步请求帧和同步时钟帧进行时钟同步交互时,通过多次交互,记录了多次的Offset时钟差值,若判断Offset时钟差值始终为正数,则可以判断得出从设备的定时器T1的0.1us计时时间比校准0.1us计时时间长,BTC计数较慢,从而微调从设备定时器T1的0.1us计数时间变短,修正定时器T1达到标准的0.1us的定时精度;若判断Offset时钟差值始终为负数,则微调定时器T1的0.1us计时时间变长,修正定时器T1达到标准的0.1us的定时精度;如此通过Offset时钟差值的多次判断比较,对定时器T1的0.1us计时进行二次微调;在无线网络设备中CPU处理器晶振出现频率偏差、温度飘移的情况时,经过对定时器T1的0.1us计时的二次微调后,定时器T1精度可以始终锁定在0.1us,保证了设备时钟的同频同相。
同步请求帧和同步时钟帧进行时钟同步交互时,通过记录连续20个最新的Offset时钟差值,并对Offset时钟差值取绝对值后进行累加求平均值,将平均值记录为Offset级别,平均值越小越接近于0,则Offset级别越高,时钟精度越高、频率偏移越小,设备硬件晶振稳定性越好;在有多个同级时钟源同时提供同步时钟的情况下,从设备选择Offset平均值小、Offset级别高的时钟源进行时钟同步,从而更进一步剔除了时钟频率的偏移震荡,保证了时钟的同频率同相位。
通过对该10MHz的BSC时钟进行10~100000分频,获得1MHz~100Hz的系统任务调度时钟,可以获得1us~10ms的同步系统任务调度周期,在对BSC进行10~100000分频时,对BTS采用整十整百倍的方式进行分频,通过分频进一步的避免了硬件时钟频率飘移误差,提高了系统任务调度时钟精度,保证了系统任务调度时钟的同频率同相位,严格保证了系统任务的同步执行。
同理从设备C、D、E、F……等也可以获得相同的同步系统任务调度时钟。
本发明的时钟源可以同时向多个从设备提供时钟同步,在有多个时钟源的情况下从设备也可以从多个时钟源获得时钟同步,如图5中所示,在从设备X发送同步请求帧后,时钟源O、P、Q都会收到X的同步请求帧,随后时钟源O、P、Q会向从设备X发送同步时钟帧,从设备X收到3个时钟同步时钟帧后,优先选择时钟源级别高的时钟源(P、Q)进行时钟同步,若时钟源级别相同(P、Q)时,选择Offset级别高的时钟源(P)进行时钟同步。
由于本发明的定时器T1采用的是0.1us的定时,且所有的同步任务的执行和同步帧的交互,包括各种定时计时都采用的是中断的方式,避免了时钟同步的软件操作延迟误差,保证时钟源和从设备的BTC和BSC的同步误差<0.3us;本发明中采用的中断包含:
1、定时器T1的0.1us计时时间中断。
2、外部高精度时钟IO口中断。
3、无线接收中断。
4、20ms定时间隔中断四个;其中定时器T1的0.1us计时时间中断优先级设定为最高优先级;无线接收中断、20ms定时间隔中断设定为次高优先级;外部高精度时钟IO口中断优先级设定为第3优先级;所有中断服务程序采用先快速处理中断标志后处理器中断服务的方式来保证定时周期的一致性,确保了时钟同步的精度。
本发明从设备在接收概略时钟帧时,判断两次接收中断的时间间隔应该<50ms,若时间间隔≥50ms,则判定接收到的概略时钟帧无效,避免了无线干扰和数据帧丢失导致概略时钟帧的精度降低。
本发明中,若从设备B发送的同步请求帧由于无线干扰等原因丢失,时钟源设备A发送的同步时钟帧中不会携带从设备B的t2信息,则从设备B在30s之后会重新发送同步请求帧,重新向时钟源获取时钟同步,避免了无线干扰和数据帧丢失导致时钟无法同步的问题。
本发明中通过Offset时钟差值对定时器T1的0.1us计时进行二次微调,并通过记录的连续20个最新的Offset时钟差值的累加求平均,可以获得一个较小Offset时钟差值的定时器T1的0.1us计时的配置,从而利用累计平均算法剔除了无线通讯中多径干扰的误差。
本发明从设备B在接收概略时钟帧时,判断帧中的概略时钟和本地的秒数和BTC数字相差≥30秒时,从设备B直接采用概略时钟帧中的时钟进行一次概略同步,后续再利用同步请求帧和同步时钟帧进行高精度的时钟同步,如此可以使得无线设备能够快速的进入时钟同步状态。
本发明对定时器T1的相关配置参数和分频系数值直接保存到CPU处理器的片内FLASH中,保证了设备掉电重启后,快速配置定时器T1、快速发起同步请求帧、快速进入同步时钟交互流程,使得无线设备能够快速的进入时钟同步状态。
实施例2:
在实施例1的基础上,本发明可以采用不同的CPU和无线通讯模块实施,下面结合附图进一步说明。
本发明中的设备有如下几个部分组成,如图2中所示:
1、CPU处理器,本实施例采用STM32F205RE芯片,该芯片处理器主时钟为120MHz,通过处理器的定时器T1对120MHz的主时钟进行12分频,产生一个0.1us的定时中断;
2、无线通讯模块,本实施例采用SI4438芯片进行无线同步数据的发送和接收,同时可以实现无线数据的低功耗发送接收;
3、外部高精度时钟输入接口,本实施例采用STM32F205RE芯片的定时器T2的TIM2_CH1IO引脚,设备作为主时钟源时用于接收外部高精度的GPS等外部时钟信号,进行外部高精度时钟的校正,设备作为从设备时,该IO引脚可以不需要连接任何设备或硬件;
4、硬件晶振,本实施例采用一个25MHz的无源晶振,为CPU处理器提供基础运行的硬件时钟。
本实施例中,硬件晶振不是必选器件,可以不需要,在没有安装25MHz的无源晶振的情况下,通过配置STM32F205RE芯片采用内部的36MHz时钟作为CPU处理器主时钟,通过定时器T1进行36分频,产生1us的定时中断,在此应用环境下采用本发明相同的时钟同步方法,将产生1us的BTC计数和1MHz的BSC时钟,可以保证时钟同步误差<3us。
本发明的同步流程如图3~6所示:
1、时钟源和从设备CPU处理器生产120MHz的主频。
2、时钟源和从设备T1定时器0.1us计时,产生BTC和BSC。
3、时钟源和从设备利用BTC进行标准时钟信号测量。
4、主时钟源的BTC测量外部高精度时钟信号。
5、时钟源和从设备利用利用标准信号测量结果进行T1定时器0.1us计时准确度一次校正。
6、时钟源同步可用后,间隔20ms通过无线信号广播概略时钟帧。
7、从设备利用无线接收中断接收概略时钟帧。
8、从设备收到概略时钟帧后,用BTC测量20ms间隔,重复逐步5进行T1定时器0.1us计时准确度一次校正。
9、从设备需要进行时钟同步时,进行时钟请求帧发送,并记录发送时刻的BTC值t1。
10、从设备利用无线通讯模块发送时钟请求帧。
11、时钟源接收到同步请求帧。
12、时钟源利用接收完成中断记录接收完成时刻的BTC值t2,并将t2记入数据库。
13、时钟源在收到同步请求帧5秒内,准备同步时钟帧,记录时间t3并将t3写入同步时钟帧中。
14、间隔20ms后,利用20ms定时器中断发送同步时钟帧。
15、从设备接收到同步时钟帧。
16、从设备利用接收完成中断记录接收完成时刻的BTC值t4。
17、从设备利用t1、t2、t3、t4计算时钟源和从设备之间BTC的差值Offset。
18、从设备利用BTC差值对进行自身BTC值进行校正。
19、从设备计算得到多次BTC的差值Offset后,进行Offset级别计算。
20、从设备利用Offset均值对T1定时器进行二次微调。
21、根据Offset均值的正负符号调快或者调慢T1定时器0.1us计时。
22、从设备和时钟源进行了时钟同频率同相位同步后,进行同步时钟分频。
23、进行分频后的同步时钟可以输出给应用程序进行系统任务调度和低功耗任务休眠计时。
多时钟源选择流程,如图7中:
1、记录当前的时刻Tm。
2、判断上次时钟同步的时间距离当前时刻超过300秒,超过则清楚当前时钟源地址、时钟源级别、Offset级别,并标记设备无时钟源。
3、接收同步时钟帧,计算同步时钟帧Offset值,根据同步时钟帧中的时钟源地址保存Offset值,并计算同步时钟帧中的时钟源地址的Offset级别,本发明中每个不同的时钟源记录最新的20个Offset值进行Offset级别计算。
4、从设备判断当前是否标记了设备无时钟源,若是则将接收到的同步时钟帧中的时钟源地址作为时钟源,并进行BTC校正,同时记录当前时钟源地址和当前时钟同步的时刻Tn。
5、若设备时钟源可用,则判断同步时钟帧是否为当前时钟源,若为当前时钟源,则进行BTC值校正。
6、若时钟源级别高,时钟源级别值<当前时钟源级别值,则切换时钟源为同步时钟帧的时钟源,并进行BTC校正。
7、若时钟源级别相同,时钟源级别值==当前时钟源级别值,则判断Offset级别。
8、若Offset级别高,Offset级别值<当前Offset级别值,则切换时钟源为同步时钟帧的时钟源,并进行BTC校正,否则直接结束,丢弃收到的同步时钟帧。
本发明中断处理逻辑,如图8中所示:
1、通过定时器T1的0.1us中断产生0.1us的BTC计数,由BTC生成BSC时钟并通过分频,获得系统任务调度时钟。
2、主时钟源设备通过IO中断对外部高精度时钟信号脉冲进行边沿检测,由BTC计数值进行脉冲信号宽度进行测量,与标准时间对比,并对定时器T1进行一次校正。
3、主时钟源设备通过系统任务调度时钟进行系统任务调度,进行概略时钟帧的发送,通过20ms定时中断控制概略时钟帧两次发送间隔为标准的20ms。
4、从设备无线接收中断通过接收到的两次间隔20ms的概略时钟帧,计算标准计时20ms,对定时器T1进行一次校正;通过系统任务调度时钟进行系统任务调度发送同步请求帧和同步时钟帧,在写入发送状态标志位时记录t1、t3,无线接收中断记录t2、t4,并计算Offset偏差,进行BTC同步校正,同时进行Offset级别计算和均值计算,通过Offset的偏移对定时器T1进行二次微调,保证定时器T1的0.1us计时时间的精度,保证BTC、BSC时钟源同步、系统任务调度时钟的同步,保证了无线网络设备间任务的同步执行。
定时器T1的0.1us计时时间中断流程,如图9中所示:
1、进行T1定时器初始化并写入计数初值。
2、配置中断优先级为最高级别,保证定时器T1的0.1us计时时间精度。
3、开启定时器中断,等待定时器T1的0.1us计时时间到。
4、定时器T1的0.1us计时时间到,进入T1定时中断服务。
5、立即进行计数初值重转载。
6、计数初值重转载后立即重置开启定时器中断,重新开始新一轮0.1us计时。
7、进行BTC计数累加。
8、T1定时中断服务结束,退出中断服务程序。
上述的实施例仅为本发明的优选技术方案,而不应视为对于本发明的限制,本申请中的实施例及实施例中的特征在不冲突的情况下,可以相互任意组合。本发明的保护范围应以权利要求记载的技术方案,包括权利要求记载的技术方案中技术特征的等同替换方案为保护范围。即在此范围内的等同替换改进,也在本发明的保护范围之内。