发明内容
本发明的目的就是要克服上述技术的不足,而提供一种在IP网络中依靠卫星定位系统校准时钟频率的方法,依靠卫星定位系统校准IP网络中各节点的时钟频率、从而能够实现TDMoverIP流量两端时钟频率同步的方法,本方法的要点为:
1、在TDMoverIP流量的两端,指定其一端的设备为提供基准时钟频率的“主设备”,另一端为“从设备”。主设备的时钟信号可以选择来自该设备中的晶振,也可以选择来自外部的时钟源。
2、主设备和从设备均带有能提供1PPS信号、即“秒脉冲”信号的卫星定位系统接收模块,例如GPS接受模块。主设备和从设备均从卫星定位系统接收模块获取1PPS信号和当前(卫星)时间。
3、主设备以1PPS信号的周期对其时钟信号在一秒钟之内的脉冲个数进行计数。所得的计数值为基准时钟信号在这一秒钟之内实际的时钟频率。例如,假定其时钟频率应该为2MHz,而计数的结果为2,000,003,则实际的频率偏高了3Hz。
4、主设备每一秒钟向从设备通报计数结果,具体可以将计数结果和当前时间信息搭载在承载着TDMoverIP流量的IP包中发送、也可以单独以单播、多播、或广播形式发送。
5、从设备节点也以1PPS信号的周期对其时钟信号在一秒钟之内的脉冲个数进行计数。所得的计数值为该节点本地时钟信号在这一秒钟之内实际的时钟频率。
6、接收到来自主设备节点的基准时钟频率计数时,从节点将其与本地的时钟频率计数相比较,并根据比较的结果微调本地的时钟频率。
在这个过程中,卫星定位模块的主要作用就是提供1PPS信号,这个信号使主设备和从设备按相同的时间长度对本地的时钟频率计数。1PPS本身的精度并非很高,但是只要主、从设备都按相同的时间长度计数,而且又是按累计误差(正负相消)微调本地的频率,就仍旧可以达到精确的时钟频率同步。
在这个过程中,所述的本地时钟信由可以微调频率的数字锁相环产生,数字锁相环由增减计数器和N分频器构成,由CPU向数字锁相环发出要求增加时钟脉冲的UP和要求减少时钟脉冲的DN信号。所述的本地时钟信由也可以微调频率的压控振荡器产生,由CPU向压控振荡器发出微调振荡频率的控制信号。
这样,只要从节点接收由主节点所发出的基准时钟频率计数,并以此作为基准微调本地的TDM时钟频率,就可以将本地的TDM时钟校准到同一个频率上,从而实现TDMoverIP流量两端的精确时钟频率同步。只要需要,就可以实现全网的TDM时钟频率同步。
以上方法可以推广到整个IP网络,指定其中一个节点的设备为主设备,其余节点的设备均为从设备,由主设备向所有从节点发送基准时钟频率计数,而所有从节点均以此为基准微调本地时钟的频率,就可以实现全网的时钟频率精确同步。
本发明还提供了一种在IP网络中依靠卫星定位系统校准时钟频率的设备,该设备主要包括:
一个微处理器芯片CPU,分别与检测本地TDM时钟频率的电路、锁存器电连接;
一个GPS卫星授时校频模块,用于产生1PPS信号输出给计数器和锁存器,即由该模块根据卫星信号综合输出的“秒脉冲”;
一个GPS接收天线,用来接收卫星信号,与GPS卫星授时校频模块电连接;
一个检测本地TDM时钟频率的电路,用来以GPS卫星授时校频模块输出的“秒脉冲”为重复基准对本地TDM时钟脉冲计数;
一个锁存器,用来锁存计数器中的内容,以供CPU读取;
一个计数器,用于对本地TDM时钟TDM_Clock的脉冲进行计数,当1PPS脉冲的上升沿到来时,其内容被“打入”锁存器,然后其内容被清零;
该设备可以通过软件或硬件的设置被指定为主设备或从设备;
其中结合电路部分的主程序流程为:被指定为主设备的设备读出本地TDM时钟频率,向网内的其它节点通报关于本地TDM时钟频率的数据;被指定为从设备的设备将本地TDM时钟频率跟接收到的主设备节点的TDM时钟频率数据进行比较,并根据比较结果微调本地的TDM时钟频率。
所述的用来产生和微调本地TDM时钟频率的电路可以采用压控振荡器,压控振荡器用来提供本地的TDM时钟TDM_Clock,CPU通过控制电压来控制压控振荡器的频率。本地TDM时钟TDM_Clock与压控振荡器之间可以增加一个选择开关,TDM时钟TDM_Clock以及计数器的输入端通过选择开关选择与压控振荡器或外部时钟Ext_Clk相连接。
所述的用来产生和微调本地TDM时钟频率的电路也可以采用数字锁相环,数字锁相环包括增/减计数器、N分频器和增/减控制模块,其中增/减计数器用于增/减时钟脉冲的计数,N分频器用于对增/减计数器的输出进行N分频;增/减控制模块为CPU与增/减计数器之间的接口,用于在CPU控制下产生UP和DN脉冲。本地TDM时钟TDM_Clock与N分频器之间同样可以增加一个选择开关,TDM时钟TDM_Clock以及计数器的输入端通过选择开关选择与N分频器或外部时钟Ext_Clk相连接。
目前市场上的卫星授时校频模块均采用美国的GPS全球定位系统,但是本实用新型并不局限于采用GPS,条件具备时也可采用包括中国的“北斗”在内的其它卫星定位系统。
本发明有益的效果:本发明在普通TDMoverIP设备的基础上增加了一个GPS模块,使网内所有的TDMoverIP设备可以使用来自卫星定位系统的相同的秒长为基准来衡量其本地的TDM时钟频率,并加以微调,使网中所有的TDMoverIP设备都校准到同一个TDM时钟频率上,实现全网的TDM时钟频率同步。
具体实施方式
下面结合附图及实施例对本发明的实施作进一步详细的说明。
实施例1:本发明所述的在IP网络中依靠卫星定位系统校准时钟频率的方法,包括:
1.1、在TDMoverIP流量的两端,指定其一端的设备为提供基准时钟频率的“主设备”,另一端为“从设备”,主设备的时钟信号选择来自该设备中的晶振或者选择来自外部的时钟源;
1.2、主设备和从设备均带有能提供1PPS信号、即“秒脉冲”信号和当前时间的卫星定位系统接收模块;
1.3、主设备以1PPS信号的周期对其时钟信号在一秒钟之内的脉冲个数进行计数,并向从设备通报计数结果;
1.4、从设备节点也以1PPS信号的周期对其时钟信号在一秒钟之内的脉冲个数进行计数;
1.5、接收到来自主设备节点的基准时钟频率计数时,从节点将其与本地的时钟频率计数相比较,并根据比较的结果微调本地的时钟频率。
本发明所述的在IP网络中依靠卫星定位系统校准时钟频率的设备是:图1说明需要增添到原有TDMoverIP设备中的电路原理图。需要增添的芯片和组件有:
1、一个GPS卫星授时校频模块,可以购买现成的组件。这种组件有个1PPS信号输出给计数器和锁存器,这就是根据卫星信号综合得出的“秒脉冲”。
2、一个GPS接收天线,可与GPS模块配套购买,用来接收卫星信号,与GPS卫星授时校频模块电连接;
3、一个锁存器,用来锁存下述计数器中的内容(数值),以供CPU读取。注意,锁存器和计数器之间的连线数量取决于计数器的长度,图中所画只是示意。
4、一个计数器。计数器对本地TDM时钟TDM_Clock的脉冲进行计数。当1PPS脉冲的上升沿到来时,其内容(计数值)被“打入”锁存器,然后其内容被清零(重置为0)。为节约资源,计数器的长度不必与实际的TDM时钟脉冲相符,而可以小一些。例如,假若TDM时钟频率为2MHz,那么本来应该使用22位的计数器,但是实际上可以是16位、甚至8位。但是注意此时读出的数值为实际频率的补码,使用前应先还原。
5、本地TDM时钟TDM_Clock与数字锁相环之间有个选择开关(机械的或电子的),使得TDM时钟TDM_Clock以及计数器的输入既可以来自数字锁相环,也可以来自外部时钟Ext_Clk。
6、外部时钟Ext_Clk是从指定的外部TDM链路上提取的。
7、图中的CPU可以是专门为此而配备的微处理器芯片,也可以是与设备中其它模块合用的微处理器芯片。图中加粗的线条代表CPU的地址/数据/控制总线。
8、数字锁相环由增/减计数器和分频器两部分构成,其输入时钟信号f0可以来自CPU所用的晶振,也可以来自单独的晶振或别的来源。图中的“增/减控制”为增/减计数器与CPU之间的接口,可以做成一个寄存器的形式,使CPU可以通过其不同的控制位发出UP和DN脉冲。
图2是一种增/减计数器的电原理图。
图3是增/减计数器中各点在各种条件下的波形图,其中Fout=Fin/2表示增/减计数器在没有UP或DN脉冲时输出波形;而Fout=(Fin/2+)则说明因为UP脉冲的存在而在计数器的输出信号中增加了一个脉冲;反之,Fout=(Fin/2-)说明因为DN脉冲的存在而减少了一个脉冲。
图中所示的设备既可用作从设备,也可用作主设备。在组网的时候,可以指定网中的某一台TDMoverIP设备(或一个TDMoverIP流量的某一端)为主设备,其余(或一个TDMoverIP流量的另一端)为从设备。主设备的TDM时钟TDM_Clock可以从其指定的外部TDM链路(一般来自级别更高的设备)上提取,也可以采用本地数字锁相环的输出,但是CPU对数字锁相环不加控制。
这样,网内的TDMoverIP设备就能保持时钟频率的一致,达到比较精确的同步。
微调本地时钟频率的方法有两种。本实施例是采用数字式锁相环,也称“全数字锁相环(ADPLL)”。
数字式锁相环一般由三个部分构成。第一个部分为鉴相/鉴频器,用来将锁相环的输出时钟信号与输入的参考时钟信号进行频率和相位的比较,产生出“升高(UP)”和“降低(DN)”两种脉冲信号。第二个部分为“增/减计数器”,这基本上是一个2分频计数器,其输入Fin来自系统内某个已经存在的、频率较高的数字时钟信号,例如CPU芯片的外部时钟,其频率一般在数十兆,假定为60MHz。如果不加任何干涉,那么此时增/减计数器的输出Fout为30MHz。也就是说,输入端每输入2个时钟脉冲,其输出端就输出1个时钟脉冲,另一个被“吃”掉了。但是增/减计数器的特殊之处在于,只要在其“增加(UP)”输入端打入一个脉冲,它就少吃掉一个时钟脉冲,所以其输出端(在相同的时间内)就增加了一个脉冲。而若在其“降低(DN)”输入端打入一个脉冲,它就多吃掉一个时钟脉冲,所以其输出端(在相同的时间内)就减少了一个脉冲。第三个部份为N分频器,这是一个分频比N可以设置的计数器。这样,仍以Fin=60MHz为例,如果一直没有打入UP和DN脉冲,那么Fout=30MHz,选择分频比N=15,最后的结果就是2MHz。现在每秒打入30个UP脉冲,就会使Fout每秒钟内多出30个脉冲,即每一百万个时钟脉冲中增加了一个,即1ppm。经过15分频所得时钟信号的频率也自然就增加了1ppm。
但是,在本发明所述的方法中只使用其第二和第三两个部分,即增/减计数器和N分频器,而由从节点设备的CPU根据比较结果产生UP和DN脉冲。
所以,在本发明所述的方法中,所谓采用“数字式锁相环”,实际上只是采用其增/减计数器和N分频器。在采用增/减计数器和N分频器时,从设备把每一秒中两地时钟脉冲计数值之差累加到一个变量中,累加值大于0或小于0都说明应该微调本地的时钟频率,只是方向不同。而累加值的绝对值,则表明两地之间累计的时钟脉冲个数的差,这就是应该微调的步长。为提高本地时钟的质量、减小抖动,应把整个微调步长均匀地分配在一秒钟的时间内。例如,假定需要把本地时钟的频率调高3Hz、即每秒钟增加3个时钟脉冲,分频比N=15,则需要在增/减计数器中每秒增加45个脉冲,而1000/45=22,所以应该每隔22毫秒向增/减计数器发出一个UP脉冲,这可以由CPU在时钟中断的驱动下完成。这样,就可以实现TDMoverIP流量两端的精确时钟同步,而不会打滑。
实施例2:在要求比较低的设备中,也可以采用压控振荡器进行微调本地时钟频率,如图4所示,压控振荡器的频率可以通过控制电压的变化加以微调,为此需要在CPU与压控振荡器之间加一个简单的数/模转换器。压控振荡器,用来提供本地的TDM时钟TDM_Clock,其频率一般是2MHz,也可以是8KHz。压控振荡器的频率是受电压控制的,而这电压则又可以通过CPU加以控制。有些压控振荡器本身就带数字接口,可以直接受CPU控制;有些则不带,而需要在CPU与压控振荡器之间加接一个D/A芯片。
本地TDM时钟TDM_Clock与压控振荡器之间有个选择开关(机械的或电子的),使得TDM时钟TDM_Clock以及计数器的输入既可以来自压控振荡器,也可以来自外部时钟Ext_Clk,外部时钟Ext_Clk是从指定的外部TDM链路上提取的。
此外,这样的TDMoverIP设备还具有发送(包括广播)和接收IP包的功能。特别地,其软件还需实现下述功能:
●将本设备设置成“主设备”或“从设备”的功能。
●把从锁存器读取的数值打包在IP包(报文)中,并向网内各节点广播的功能。
●从接收到的IP报文中读出数值,并从本地锁存器中读出数值,加以比较,并根据比较结果调节压控振荡器控制电压的功能。
在组网的时候,可以指定网中的某一台TDMoverIP设备为时钟源、称为主设备,其余为从设备。主设备的TDM时钟TDM_Clock可以从其指定的外部TDM链路(一般来自级别更高的设备)上提取,也可以采用本地压控振荡器的输出,但是CPU对压控振荡器不加控制。在投入正常运行以后:
1.主设备CPU从锁存器读出其内容,这内容代表着刚过去的一秒钟内本地TDM时钟的频率。这是因为来自卫星定位系统的1PPS脉冲每一秒钟都会把计数值打入锁存器并使计数器清零。
2.主设备把这个计数值通过IP包向网内所有的节点广播。
3.接收到主设备广播通知的频率以后,各台从设备的CPU读出其锁存器的数值,并加以比较,然后:
●将二者的差值(主设备TDM时钟频率-本地TDM时钟频率)累加在一个变量中。
●如果这个变量的值为正,就相应调高本地的振荡频率。
●如果这个变量的值为负,就相应调低本地的振荡频率。
这样,网内的TDMoverIP设备就能保持时钟频率的一致,达到比较精确的同步。
在具体实施中,GPS模块可以购买现成的组件,例如Motorola的VP ONCORE组件,而其余电路则既可以使用一般的分立小规模芯片,也可以在CPLD、FPGA芯片中实现,其中的增/减计数器可以采用图2所示的原理图。实现增/减计数器的手段当然不止这么一种,而完全可以有所不同。例如,在芯片74LS297的说明书中就有不同的增/减计数器(连同相位检测器)的原理图。此类实现细节的不同并不影响本发明的实质。
除电路上的实施以外,还需要几个软件函数来实施TDM时钟频率的调节/校准。下面是这些函数的伪代码描述:
主设备:
every_second() //主设备每一秒钟的操作
{
读出锁存器中的数值,此为刚过去的一秒钟内主设备时钟的脉冲个数;
将这个数值发送给网内需要跟随主设备时钟的从设备;
也可以在发送数值时附上从卫星得到的绝对时间(秒,或换算成年/月/日/时/分/秒);
}
从设备:分采用压控振荡器或全数字锁相环两种实现方法:
1)采用全数字锁相环:
msg_from_main() //接收到来自主设备的时钟信息
{
读出锁存器中的数值,此为刚过去的一秒钟内本地时钟的脉冲个数;
与来自主设备的信息进行比较,将二者之差(主设备脉冲数-本地脉冲数)累加到变量D上;
计算变量P的数值P=1000/(D*N);
/*P说明平均几个毫秒应该增加或减少一个时钟脉冲,N为分频比*/
}
every_millisecond(N) //从设备每一毫秒的操作,N表示这是一秒钟之内的第几个毫秒
{
检查所记录的本地时钟与主设备时钟频率之差D;
if(D不等于0) //D代表着两地之间的累计时钟脉冲(个数)误差
{
if(N是P的整数倍) //P表示平均几个毫秒需要增加或减少一个脉冲
{
if(D>0)向增/减计数器发出一个UP脉冲,并使D减1; //增加一个脉冲;
if(D<0)向增/减计数器发出一个DN脉冲,并使D加1; //减少一个脉冲;
}
}}
当然,具体的实现可以有一些变化,但是实现细节上的不同并不影响本发明的实质。
在要求较低的设备中,也可以采用压控振荡器。附图4就是采用压控振荡器时的电原理图,与此相应,软件方面的实施也要有所改变:
2)采用压控振荡器:
msg_from_main() //接收到来自主设备的时钟信息
{
读出锁存器中的数值,此为刚过去的一秒钟内本地时钟的脉冲个数;
与来自主设备的信息进行比较,将二者之差纪录在变量D中,此为两地时钟频率之差;
if(D不等于0) //或D的绝对值小于预定的阈值
{
if(D>0)根据D的数值按比例调高压控振荡器的频率。
if(D<0)根据D的数值按比例调低压控振荡器的频率。
}}。