发明内容
基于此,有必要针对现有技术容易影响多时钟频率的校准精度的技术问题,提供一种时钟频率校准方法和系统。
一种时钟频率校准方法,包括如下步骤:
启动系统内部的计数器,接收设定周期的外部信号,在捕获到外部信号的上升沿时,记录所述计数器的计数值n1;
继续接收所述外部信号,并在捕获到下一个外部信号的上升沿时,记录所述计数器的计数值n2;
计算n1和n2的计数差值n;
将所述计数差值n代入系统的时钟频率校准公式校准系统的时钟频率;所述时钟频率校准公式为:
其中,n为计数差值,F1为计数器分频,NF为系统内锁相环的分频,F0为系统分频,F2为系统内振荡器的频率,NR0表示系统的原倍频系数,ω表示系统的时钟频率系数,NR1为校准后的时钟频率,符号“*”表示乘号。
一种时钟频率校准系统,包括:
第一捕获模块,用于启动系统内部的计数器,接收设定周期的外部信号,在捕获到外部信号的上升沿时,记录所述计数器的计数值n1;
第二捕获模块,用于继续接收所述外部信号,并在捕获到下一个外部信号的上升沿时,记录所述计数器的计数值n2;
计算模块,用于计算n1和n2的计数差值n;
校准模块,用于将所述计数差值n代入系统的时钟频率校准公式校准系统的时钟频率;所述时钟频率校准公式为:
其中,n为计数差值,F1为计数器分频,NF为系统内锁相环的分频,F0为系统分频,F2为系统内振荡器的频率,NR0表示系统的原倍频系数,ω表示系统的时钟频率系数,NR1为校准后的时钟频率,符号“*”表示乘号。
上述时钟频率校准方法和系统,通过启动系统内部的计数器,接收设定周期的外部信号,在捕获到外部信号的上升沿时,记录所述计数器的计数值n1,并在捕获到下一个外部信号的上升沿时,记录所述计数器的计数值,再计算n1和n2的计数差值n,将上述计数差值n代入时钟频率校准公式对系统的时钟频率进行校准,其中无需复杂的单片机编程控制,也不用外部USB模块,可以提高系统时钟校准的精度和效率。
具体实施方式
下面结合附图对本发明提供的时钟频率校准方法和系统的具体实施方式作详细描述。
参考图1,图1所示为一个实施例的时钟频率校准方法流程图,包括如下步骤:
S10,启动系统内部的计数器,接收设定周期的外部信号,在捕获到外部信号的上升沿时,记录所述计数器的计数值n1;
上述步骤S10中,外部信号可以通过USB接口从计算机中获取,待校准时钟信号的系统与计算机可以如图2所示方式进行连接,如图示,计算机USB接口11的D+端连接上述系统USB接口12的D+端,计算机USB接口11的D- 端连接上述系统USB接口12的D-端,在计算机USB接口11的D+端可以接入上拉电阻,在系统USB接口12的D+端也可以设置上拉电阻,上述上拉电阻的阻值可以设置为1.5千欧。
在一个实施例中,上述外部信号的设定周期可以为1ms(毫秒)。
在一个实施例中,上述外部信号可以为SOF信号。
本实施例的SOF信号可以如图3所示,其周期为T,系统的计数器可以从上述SOF信号的某个上升沿开始对系统内所有信号的上升沿开始计数 ,至上述 SOF信号的下一个上升沿开始中断计数,以此获取上述上升沿个数n1或者下述上升沿个数n2。
作为一个实施例,本实施例中待校准时钟频率的系统还可以设置超时保护;在开始捕获上升沿的同时,设置另一个系统的定时器,可以设置为50ms溢出,以保护系统,如果没有收到外部计算机的校准信号,则产生超时重试机制,将上拉电阻1.5千欧去掉,然后重复接收设定周期的外部信号,并捕获系统内信号的上升沿的步骤,避免外部计算机进入挂起状态,而停止发送SOF信号,可以提高整个捕获过程的稳定性。
S20,继续接收所述外部信号,并在捕获到下一个外部信号的上升沿时,记录所述计数器的计数值n2;
S30,计算n1和n2的计数差值n;
在一个实施例中,上述步骤S30可以包括:
多次获取计数器的计数值n1以及相应下一个外部信号的上升沿处计数值n2,并计算每次n1和n2的计数差值n;
将每次所得的计数差值n相加后求平均值以更新所述计数差值n。
本实施例中,获取计数器的计数值n1以及相应下一个外部信号的上升沿处计数值n2,并计算每次n1和n2的计数差值n,将每次所得的计数差值n相加后求平均值以更新所述计数差值n,可以减小相关干扰带来的误差,提高所获取的计数差值n的准确性。
S40,将所述计数差值n代入系统的时钟频率校准公式校准系统的时钟频率;所述时钟频率校准公式为:
其中,n为计数差值,F1为计数器分频,NF为系统内锁相环的分频,F0为系统分频,F2为系统内振荡器的频率,NR0表示系统的原倍频系数,ω表示系统的时钟频率系数,NR1为校准后的时钟频率,符号“*”表示乘号。
本实施例提供的时钟频率校准方法,通过启动系统内部的计数器,接收设定周期的外部信号,在捕获到外部信号的上升沿时,记录所述计数器的计数值n1,并在捕获到下一个外部信号的上升沿时,记录所述计数器的计数值,再计算n1和 n2的计数差值n,将上述计数差值n代入时钟频率校准公式对系统的时钟频率进行校准,其中无需复杂的单片机编程控制,也不用外部USB模块,可以提高系统时钟校准的精度和效率。
在一个实施例中,系统的时钟频率是通过内部RC振荡器通过PLL(锁相环) 倍频出来的时钟频率,而PLL本身的倍频参数是可调节的,因此将偏差值用于调节PLL参数,最终达到校准系统时钟的目的;
PLL锁相环倍频原理可以包括:振荡器输入到PLL后,内部先将输入源分频到200KHz(千赫兹)的参考时钟,此处可以通过分频系数NF实现;然后将参考时钟作倍频处理,升频至240MHz(兆赫兹),再经过固定5分频的分频器,得到48MHz作为系统时钟输入,这里通过倍频系数NR实现,所以PLL的NR, NF可以由以下公式决定:
F/NF=200KHz;其中,F为系统振荡器的输入频率,NF为系统内锁相环的分频;
200KHz*NR0=240MHz;其中,NR0表示系统的原倍频系数;
将上述两个公式进行整合可以得到:
F*NR0/NF=240MHz;其中,F为系统振荡器的输入频率,NF为系统内锁相环的分频,NR0表示系统的原倍频系数;
经过固定分频5可以得到系统时钟频率:
F*NR0/NF/5=48MHz;其中,F为系统振荡器的输入频率,NF为系统内锁相环的分频,NR0表示系统的原倍频系数;
由于SOF信号为一连串上升下降沿,所以在捕获第一个上升沿后,计数器需要关闭捕获功能然后重新打开,计数器为上升沿捕获,在一个SOF信号内部避免重复触发,这里只需要捕获两个SOF之间的时间;
计数器捕获时间可以通过计算得知:
计数器计数加1所花的时间为计数器分频除以系统时钟;以48MHz系统时钟频率,计数器一分频为例,计数器计数加1所花的时间是1除以48MHz=0.02us (微秒);
时间间隔一般为系统内计数器的计数单位与计数差值的乘积;比如:当系统频率为48MHz时,计数器单位可以等于计数器分频除以系统时钟频率,即 1/48M,此时计数单位为0.02us(微秒);
两次SOF信号之间计数器的捕获时间差应该为48000,这里前提是系统时钟频率为准确的48MHz;
综上可得:
1ms时间间隔产生的计数为1ms除以计数器分频与系统时钟频率的乘积;
若计数器分频为1时有:
1ms时间间隔产生的计数为1ms与系统时钟频率的乘积;
因此,使用内部振荡器作为PLL输入的话,只能根据设计经验值估计内部振荡器的频率范围在(5MHz+-20%)的范围内,所以不能准确得知NR,NF的具体配置,则系统均假设内部振荡器为5MHz作参数配置;
根据PLL公式可知:5MHz/NF=200KHz,则NF为25;
200KHz*NR=240MHz,则NR为1200;
因此基于这样的NF/NR配置的系统时钟,在内部振荡器发生偏差时所得到的系统时钟必然不是48MHz;捕获时间差也不是48000;因此捕获的时间差应该演变为:
N1=(F2*NR0/NF)/5;其中,N1为1ms时间间隔产生的计数,NR0表示系统的原倍频系数,F2为系统内振荡器的频率,NF为系统内锁相环的分频;
进行相关变换后得到:
N1/(F2*NR0/NF)/5=1;其中,N1为1ms时间间隔产生的计数,NR0表示系统的原倍频系数,F2为系统内振荡器的频率,NF为系统内锁相环的分频;
假设使用默认值NR0,NF配置振荡器,将会产生计数器差值为T1;
校准后使用新的NR1,NF配置振荡器,将会产生计数器差值为T2,T2=48000;
可得:
T1/(F2*NR0/NF)/5=T2/(F2*NR1/NF)/5;其中,N1为1ms时间间隔产生的计数, NR0表示系统的原倍频系数,F2为系统内振荡器的频率,NF为系统内锁相环的分频,NR1为校准后的时钟频率,T1为系统默认计数器差值,T2为校准后计数器差值;
进一步计算后可得:
NR1=T1*NR0/T2;其中,NR0表示系统的原倍频系数,NR1为校准后的时钟频率,T1为系统默认计数器差值,T2为校准后计数器差值;
上述运算过程可以将运算结果作乘2处理,检查运算结果低位,再作除2 处理,防止低位被忽略,提高精度。
参考图4,图4所示为一个实施例的时钟频率校准系统结构示意图,包括:
第一捕获模块10,用于启动系统内部的计数器,接收设定周期的外部信号,在捕获到外部信号的上升沿时,记录所述计数器的计数值n1;
在一个实施例中,上述设定周期可以为1ms。
在一个实施例中,上述外部信号可以为SOF信号。
第二捕获模块20,用于继续接收所述外部信号,并在捕获到下一个外部信号的上升沿时,记录所述计数器的计数值n2;
计算模块30,用于计算n1和n2的计数差值n;
在一个实施例中,上述计算模块可以进一步用于:
多次获取计数器的计数值n1以及相应下一个外部信号的上升沿处计数值n2,并计算每次n1和n2的计数差值n;
将每次所得的计数差值n相加后求平均值以更新所述计数差值n。
校准模块40,用于将所述计数差值n代入系统的时钟频率校准公式校准系统的时钟频率;所述时钟频率校准公式为:
其中,n为计数差值,F1为计数器分频,NF为系统内锁相环的分频,F0为系统分频,F2为系统内振荡器的频率,NR0表示系统的原倍频系数,ω表示系统的时钟频率系数,NR1为校准后的时钟频率,符号“*”表示乘号。
本发明的时钟频率校准系统与本发明的时钟频率校准方法一一对应,在上述时钟频率校准方法的实施例阐述的技术特征及其有益效果均适用于时钟频率校准系统的实施例中,特此声明。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。