技术新讯 > 测时钟表制品的制造及其维修技术 > 一种微秒级单片机定时装置及方法与流程  >  正文

一种微秒级单片机定时装置及方法与流程

  • 国知局
  • 2024-07-30 09:32:36

1.本发明涉及嵌入式技术领域,尤其涉及一种微秒级单片机定时装置及方法。背景技术:2.嵌入式单片机系统因其在价格、功耗和集成度等方面的优势,在低成本、低功耗和小型化的设备中有着极其普遍的应用。其中,在控制领域,特别在航天航空控制系统中,对于嵌入式单片机系统的时间精度与准确性有着较高的要求。但因工作环境、功耗、体积和重量等条件的限制,上述领域的嵌入式单片机系统难以连入互联网或配备高质量的授时设备。3.现有系统通常使用全球导航卫星系统(global navigation satellite system,简称gnss)模块对单片机系统的时间进行校准,gnss模块输出的校时信号包括秒脉冲(pulse per second,简称pps)信号和基于nmea协议(national marine electronics association,简称nema)的当前时间信息。其中,pps脉冲是1hz的正脉冲信号,可提供精确的时钟同步信号;基于nmea协议的当前时间信息是使用串行接口发送的校时数据,在pps脉冲后发送,发送周期为1秒,包含秒级的当前协调世界时(universal time coordinated,简称utc)时间。4.然而,现有对于单片机系统本地时间的维护,无法提供微秒级精度的精确时间,难以满足对时间精度要求较高的设备。因此,现在亟需一种微秒级单片机定时装置及方法来解决上述问题。技术实现要素:5.针对现有技术存在的问题,本发明提供一种微秒级单片机定时装置及方法。6.本发明提供一种微秒级单片机定时装置,包括pps脉冲处理模块、utc时间解析模块、定时器控制模块、gnss状态控制模块和时间补偿处理模块,其中:7.所述pps脉冲处理模块,用于获取第一本地时间和第一gnss时间;其中,所述第一本地时间表示在当前时刻,所述pps脉冲处理模块接收到秒脉冲信号时对应的本地时间;所述第一gnss时间表示所述pps脉冲处理模块获取所述第一本地时间时对应的gnss时间加1秒;8.所述utc时间解析模块,用于获取第一utc累加秒和第二本地时间;其中,所述第一utc累加秒表示在当前时刻,所述utc时间解析模块对接收到的基于nmea协议的当前时间信息进行解析,得到的累加秒格式的utc时间;所述第二本地时间表示所述utc时间解析模块获取所述第一utc累加秒时对应的本地时间;9.所述定时器控制模块,用于获取当前时刻rtc时间和当前时刻微秒计数值,并将所述当前时刻rtc时间和所述当前时刻微秒计数值发送到所述时间补偿处理模块;10.所述gnss状态控制模块,用于根据所述第一本地时间、所述第一utc累加秒、所述第一gnss时间和所述第二本地时间,确定校时时间,并生成对应的校时请求;11.所述时间补偿处理模块,用于在接收到所述校时请求之后,根据所述当前时刻rtc时间、所述当前时刻微秒计数值和时间补偿码,校准单片机系统的本地时间;其中,所述时间补偿码是通过所述校时时间和所述当前时刻微秒计数值计算得到的。12.根据本发明提供的一种微秒级单片机定时装置,所述gnss状态控制模块具体用于:13.在所述pps脉冲处理模块接收到秒脉冲信号,且所述utc时间解析模块接收到基于nmea协议的当前时间信息的情况下,若所述第二本地时间大于所述第一本地时间,且所述第二本地时间小于所述第一本地时间加1秒,则判断所述第一utc累加秒和所述第一gnss时间是否相等,若相等,则判断获知gnss模块处于正常工作状态,其中所述第一gnss时间为累加秒格式的utc时间;14.当所述gnss模块处于正常工作状态时,获取第三本地时间,所述第三本地时间表示在当前时刻,所述gnss状态控制模块在确认所述gnss模块处于正常工作状态时对应的本地时间;15.根据所述第三本地时间与所述第一本地时间之间的差值,获取本地时间差值,若所述本地时间差值小于1秒,对所述第三本地时间和所述第一gnss时间进行判断,若判断结果满足预设校时判断规则,则将所述第一gnss时间作为第二utc累加秒,将所述本地时间差值作为校时微秒计数值,以根据所述第二utc累加秒和所述校时微秒计数值构建得到校时时间。16.根据本发明提供的一种微秒级单片机定时装置,所述预设校时判断规则具体包括:17.若所述第一gnss时间与所述第三本地时间之间的误差值小于等于2秒,构建第一校时时间,并生成所述第一校时时间对应的校时请求;18.或,若所述第一gnss时间与所述第三本地时间之间的误差值大于2秒,且连续3次所述utc时间解析模块解析得到的第一utc累加秒和所述pps脉冲处理模块获取的第一gnss时间相等,构建第二校时时间,并生成所述第二校时时间对应的校时请求。19.根据本发明提供的一种微秒级单片机定时装置,所述时间补偿处理模块具体用于:20.根据所述校时微秒计数值和所述当前时刻微秒计数值,计算时间补偿码,公式为:21.uscomp=uscali-uscur;22.其中,uscomp表示时间补偿码,uscali表示校时微秒计数值,uscur表示当前时刻微秒计数值;23.根据所述当前时刻rtc时间、所述当前时刻微秒计数值和所述时间补偿码,对单片机系统的本地时间进行校准,得到校准后的本地时间,公式为:24.[0025][0026]其中,usloc表示校准后的本地时间中的微秒计数值,rtccur表示当前时刻rtc时间,utcloc表示校准后的本地时间中的utc累加秒,1000000为最大循环微秒计数值。[0027]根据本发明提供的一种微秒级单片机定时装置,所述定时器控制模块具体用于:[0028]基于rtc模块的rtc秒中断,获取当前时刻rtc时间,并在接收到由所述时间补偿处理模块转发的第二utc累加秒之后,将所述第二utc累加秒作为当前时刻rtc时间,并置位校时状态;[0029]所述基于rtc模块的rtc秒中断,获取当前时刻rtc时间,具体包括:[0030]当发生rtc秒中断时,若所述定时器控制模块置位校时状态,则将当前时刻rtc时间加1秒,并将加1秒后的当前时刻rtc时间转化为日期时间格式写入rtc模块,同时清除所述定时器控制模块的校时状态;若未置位校时状态,则通过rtc模块获取当前时刻rtc时间。[0031]根据本发明提供的一种微秒级单片机定时装置,所述gnss状态控制模块还用于对gnss模块的无信号状态和时间无效状态进行判断,其中:[0032]当所述第二本地时间小于所述第一本地时间,或,所述第二本地时间大于所述第一本地时间加1秒,或,pps脉冲处理模块未接收到秒脉冲信号,则判断所述gnss模块进入无信号状态;[0033]当所述第二本地时间大于所述第一本地时间,且,所述第二本地时间小于所述第一本地时间加1秒,则判断所述第一utc累加秒和所述第一gnss时间是否相等,若不相等,则判断获知所述gnss模块进入时间无效状态,并将所述第一utc累加秒作为所述pps脉冲处理模块在下一周期中接收到秒脉冲信号时的gnss时间,以得到新的第一gnss时间,用于下一次的时间无效状态判断。[0034]根据本发明提供的一种微秒级单片机定时装置,所述pps脉冲处理模块是在检测到秒脉冲的上升沿中断后接收秒脉冲信号,并记录接收到所述秒脉冲信号时对应的本地时间,得到第一本地时间。[0035]根据本发明提供的一种微秒级单片机定时装置,所述utc时间解析模块是在接收到基于nmea协议的当前时间信息的第一个起始字符时记录对应的本地时间,得到第二本地时间。[0036]本发明还提供一种微秒级单片机定时方法,包括:[0037]通过pps脉冲处理模块,获取第一本地时间和第一gnss时间;其中,所述第一本地时间表示在当前时刻,所述pps脉冲处理模块接收到秒脉冲信号时对应的本地时间;所述第一gnss时间表示所述pps脉冲处理模块获取所述第一本地时间时对应的gnss时间加1秒;[0038]通过utc时间解析模块,获取第一utc累加秒和第二本地时间;其中,所述第一utc累加秒表示在当前时刻,所述utc时间解析模块对接收到的基于nmea协议的当前时间信息进行解析,得到的累加秒格式的utc时间;所述第二本地时间表示所述utc时间解析模块获取所述第一utc累加秒时对应的本地时间;[0039]通过定时器控制模块,获取当前时刻rtc时间和当前时刻微秒计数值,并将所述当前时刻rtc时间和所述当前时刻微秒计数值发送到所述时间补偿处理模块;[0040]基于gnss状态控制模块,根据所述第一本地时间、所述第一utc累加秒、所述第一gnss时间和所述第二本地时间,确定校时时间,并生成对应的校时请求;[0041]基于时间补偿处理模块,在接收到所述校时请求之后,根据所述当前时刻rtc时间、所述当前时刻微秒计数值和时间补偿码,校准单片机系统的本地时间;其中,所述时间补偿码是通过所述校时时间和所述当前时刻微秒计数值计算得到的。[0042]本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述微秒级单片机定时方法的步骤。[0043]本发明提供的一种微秒级单片机定时装置及方法,通过单片机内部高速计数器产生当前微秒计数值,并由时间补偿处理模块根据校时时间和当前微秒计数值计算时间补偿码,同时,通过时间补偿码、当前rtc时间和微秒计数值得到精确到微秒的本地时间,实现微秒级的定时精度。附图说明[0044]为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0045]图1为现有技术中基于gnss模块和rtc模块的定时装置工作流程示意图;[0046]图2为现有技术中基于gnss模块和单片机内部高速计数器的定时装置工作流程示意图;[0047]图3为本发明提供的微秒级单片机定时装置的结构示意图;[0048]图4为本发明提供的gnss模块的工作状态转化示意图;[0049]图5为本发明提供的基于rtc秒中断的定时器控制模块的工作流程示意图;[0050]图6为本发明提供的微秒级单片机定时装置的整体结构示意图;[0051]图7为本发明提供的微秒级单片机定时方法的流程示意图;[0052]图8为本发明提供的电子设备的结构示意图。具体实施方式[0053]为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0054]在现有用于嵌入式单片机系统的定时装置中(记为现有方案1),通过gnss模块配合实时时钟(real time clock,简称rtc)模块,对单片机系统的本地时间进行校准,图1为现有技术中基于gnss模块和rtc模块的定时装置工作流程示意图,可参考图1所示,单片机系统利用rtc模块维护本地时间,由于rtc模块以精度较高的32768hz晶振作为时钟源且带有温度补偿,因此能在丢失gnss模块的校时信号时,维持较准确的秒级时间,此外,rtc模块通常配有额外的供电电源,能在单片机系统掉电或休眠时维持较精确的秒级时间。如图1所示,单片机系统在接收到gnss模块输出的pps脉冲之后,启动串口接收程序,等待基于nmea协议的当前时间信息;在接收到当前时间信息后,解析当前时间信息得到秒级的utc时间,并使用解析得到的utc时间对rtc模块的时间进行校准。[0055]现有方案1使用rtc模块维护秒级的本地时间,可在gnss信号丢失或单片机系统掉电时,维持较精确的秒级时间。但该技术方案缺少本地的微秒级定时器,无法提供微秒级精度的精确时间,难以应用在对时间精度要求较高的设备中。[0056]在另一种现有用于嵌入式单片机系统的定时装置中(记为现有方案2),通过使用gnss模块配合单片机系统内部高速计数器实现对本地时间的校准,图2为现有技术中基于gnss模块和单片机内部高速计数器的定时装置工作流程示意图,可参考图2所示,单片机系统利用内部高速计数器维护本地时间,由于单片机系统内部高速计数器通常以单片机主时钟作为时钟源,其频率达mhz级,因此可实现微秒级的定时。如图2所示,单片机系统在接收到gnss模块输出的pps脉冲后,记录此时的本地时间,记作本地时间1,同时启动串口接收程序,等待基于nmea协议的当前时间信息;在收到当前时间信息后,解析得到秒级的utc时间,并进行时间单位换算,使其与本地时间的时间单位一致。同时,记录此时的本地时间,记作本地时间2,将单位换算后的utc时间,加上本地时间2与本地时间1之间的差值,最后以相加后的结果作为基准时间,对本地时间进行校准。[0057]现有方案2使用单片机内部高速计数器维护微秒级的本地时间,但掉电后无法继续维护本地时间,且本地时间精度相对较低。此外,因现有方案2高度依赖gnss校时信号,故难以通过本地时间对gnss校时信号的准确性进行检验。[0058]通过对上述两种现有方案进行分析可知,在现有技术1中,由于rtc模块使用32768hz分频得到1hz的时钟信号,故仅能提供秒级的定时精度,在需要毫秒级或微秒级时间精度的控制设备中,现有技术1难以满足定时精度要求。[0059]而在现有技术2中,单片机系统内部高速计数器以单片机主时钟作为时钟源,虽然能够实现微秒级的定时,但单片机主时钟通常不具备频率补偿功能,精度相对较低,若长期丢失gnss信号,本地时间将因误差的持续累积而产生较大的偏差。并且,在单片机系统掉电或休眠时,内部的高速计数器将停止工作,当单片机系统再次上电或唤醒后,无法立即获取有效本地时间,若此时gnss信号丢失,则单片机系统将长期工作在时间异常的状态下,严重影响设备的正常控制功能。[0060]除此之外,由于本地时间精度较低且无法掉电保持,现有技术2高度依赖gnss校时信号,难以通过本地时间等本地数据对gnss校时信号的正确性进行检验,例如,在gnss信号丢失,且pps脉冲因外部电磁干扰误触发时,将引起本地时间的误修改。因此,在具有高可靠性要求的控制设备中,现有技术2的容错能力难以满足要求。[0061]图3为本发明提供的微秒级单片机定时装置的结构示意图,如图3所示,本发明提供了一种微秒级单片机定时装置,包括pps脉冲处理模块301、utc时间解析模块302、定时器控制模块303、gnss状态控制模块304和时间补偿处理模块305,其中:[0062]所述pps脉冲处理模块301,用于获取第一本地时间和第一gnss时间;其中,所述第一本地时间表示在当前时刻,所述pps脉冲处理模块301接收到秒脉冲信号时对应的本地时间;所述第一gnss时间表示所述pps脉冲处理模块301获取所述第一本地时间时对应的gnss时间加1秒。[0063]在本发明中,通过微秒级单片机定时装置中不同的模块获取到的本地时间(如第一本地时间和第二本地时间,以及后续过程中的第三本地时间等),包括utc累加秒和微秒计数值两部分,其中,本发明中的utc累加秒是采用utc格林威治时间2000年1月1日0时0分0秒起的utc整秒累加值。另外,第一gnss时间是pps脉冲处理模块301维护的时间,采用utc累加秒格式。当pps脉冲处理模块301接收到gnss模块输出的校时信号中的pps脉冲时,记录接收该pps脉冲时的本地时间,记为第一本地时间,同时,pps脉冲处理模块301将此时的gnss时间加1秒,得到的gnss时间记为第一gnss时间。[0064]具体地,所述pps脉冲处理模块301是在检测到秒脉冲的上升沿中断后接收秒脉冲信号,并记录接收到所述秒脉冲信号时对应的本地时间,得到第一本地时间。[0065]所述utc时间解析模块302,用于获取第一utc累加秒和第二本地时间;其中,所述第一utc累加秒表示在当前时刻,所述utc时间解析模块对接收到的基于nmea协议的当前时间信息进行解析,得到的累加秒格式的utc时间;所述第二本地时间表示所述utc时间解析模块获取所述第一utc累加秒时对应的本地时间。[0066]在本发明中,utc时间解析模块302是在接收到gnss模块输出的校时信号时,对其中基于nmea协议的当前时间信息进行解析,并将此时解析得到的utc时间转化为utc累加秒格式,得到第一utc累加秒;同时,所述utc时间解析模块是在接收到基于nmea协议的当前时间信息的第一个起始字符时记录对应的本地时间,得到第二本地时间。需要说明的是,在本发明中,gnss模块在每一次输出的校时信号,即pps脉冲和基于nmea协议的当前时间信息,pps脉冲处理模块301和utc时间解析模块均是实时记录各自对应接收时的本地时间,可以理解的是,pps脉冲处理模块301和utc时间解析模块302记录本地时间时为当前时刻。[0067]所述定时器控制模块303,用于获取当前时刻rtc时间和当前时刻微秒计数值,并将所述当前时刻rtc时间和所述当前时刻微秒计数值发送到所述时间补偿处理模块305。[0068]在本发明中,定时器控制模块303通过rtc秒中断,获取当前时刻rtc时间,并通过单片机系统内部高速计数器,获取当前时刻微秒计数值,并响应来自时间补偿处理模块305的utc校时时间(即第二utc累加秒,在后续进行说明)。其中,rtc秒中断由rtc模块的1hz时钟信号触发,每秒发生一次;单片机系统内部高速计数器的计数值每1微秒自动加1,作为当前时刻微秒计数值,其中,微秒计数值为0-1000000的循环计数值。[0069]所述gnss状态控制模块304,用于根据所述第一本地时间、所述第一utc累加秒、所述第一gnss时间和所述第二本地时间,确定校时时间,并生成对应的校时请求。[0070]在本发明中,gnss状态控制模块304根据pps脉冲处理模块301维护的gnss时间(即第一gnss时间)、utc时间解析模块302解析得到的utc时间(即第一utc累加秒)、以及时间补偿处理模块305输出的本地时间(可以理解的是,pps脉冲处理模块301与utc时间解析模块302,在记录各自对应的本地时间时,均是通过时间补偿处理模块305得到的,在初始阶段,时间补偿处理模块305未对本地时间进行补偿,在后续的过程中,时间补偿处理模块305输出的本地时间均为补偿后的本地时间),判断gnss模块的当前工作状态并计算校时时间,以减少gnss模块故障和外部电磁干扰造成的影响,确保校时时间的准确性。其中,校时时间是gnss控制状态模块304计算得到的基准时间,包括对应的utc累加秒和微秒计数值两部分。[0071]所述时间补偿处理模块305,用于在接收到所述校时请求之后,根据所述当前时刻rtc时间、所述当前时刻微秒计数值和时间补偿码,校准单片机系统的本地时间;其中,所述时间补偿码是通过所述校时时间和所述当前时刻微秒计数值计算得到的。[0072]在本发明中,时间补偿处理模块305接收到gnss状态控制模块304转发的校时时间后,将校时时间中的utc累加秒(即第二utc累加秒)作为utc校时时间传入定时器控制模块303,并从定时器控制模块303读取当前时刻微秒计数值,根据校时时间中的校时微秒数值和当前时刻微秒计数值,计算时间补偿码,[0073]具体地,根据所述校时微秒计数值和所述当前时刻微秒计数值,计算时间补偿码,公式为:[0074]uscomp=uscali-uscur;[0075]其中,uscomp表示时间补偿码,uscali表示校时微秒计数值,uscur表示当前时刻微秒计数值;[0076]当其它模块(例如pps脉冲处理模块301和utc时间解析模块302)请求获取本地时间时,时间补偿处理模块305将从定时器控制模块303中读取当前时刻rtc时间和当前时刻微秒计数值,并结合时间补偿码,计算补偿后的本地时间,即对单片机系统的本地时间进行校准。[0077]具体地,根据所述当前时刻rtc时间、所述当前时刻微秒计数值和所述时间补偿码,对单片机系统的本地时间进行校准,得到校准后的本地时间,公式为:[0078][0079][0080]其中,usloc表示校准后的本地时间中的微秒计数值,rtccur表示当前时刻rtc时间,utcloc表示校准后的本地时间中的utc累加秒,1000000为最大循环微秒计数值。[0081]本发明提供的微秒级单片机定时装置,通过单片机内部高速计数器产生当前微秒计数值,并由时间补偿处理模块根据校时时间和当前微秒计数值计算时间补偿码,同时,通过时间补偿码、当前rtc时间和微秒计数值得到精确到微秒的本地时间,实现微秒级的定时精度。[0082]在上述实施例的基础上,所述gnss状态控制模块304具体用于:[0083]在所述pps脉冲处理模块301接收到秒脉冲信号,且所述utc时间解析模块302接收到基于nmea协议的当前时间信息的情况下,若所述第二本地时间大于所述第一本地时间,且所述第二本地时间小于所述第一本地时间加1秒,则判断所述第一utc累加秒和所述第一gnss时间是否相等,若相等,则判断获知gnss模块处于正常工作状态,其中所述第一gnss时间为累加秒格式的utc时间;[0084]当所述gnss模块处于正常工作状态时,获取第三本地时间,所述第三本地时间表示在当前时刻,所述gnss状态控制模块在确认所述gnss模块处于正常工作状态时对应的本地时间;[0085]根据所述第三本地时间与所述第一本地时间之间的差值,获取本地时间差值,若所述本地时间差值小于1秒,对所述第三本地时间和所述第一gnss时间进行判断,若判断结果满足预设校时判断规则,则将所述第一gnss时间作为第二utc累加秒,将所述本地时间差值作为校时微秒计数值,以根据所述第二utc累加秒和所述校时微秒计数值构建得到校时时间。[0086]在本发明中,gnss状态控制模块304根据pps脉冲处理模块301是否接收到pps脉冲、utc时间解析模块302是否接收到基于nmea协议的当前时间信息,以及utc时间解析模块302解析得到的utc时间是否有效,对gnss模块的工作状态进行判断,其中,gnss模块的工作状态包括初始化状态、离线状态、无信号状态、时间无效状态和正常工作状态5种。[0087]图4为本发明提供的gnss模块的工作状态转化示意图,可参考图4所示,基于gnss状态控制模块304对gnss模块的工作状态进行判断,具体判断过程如下:[0088]当单片机系统上电后,进入初始化状态,若在初始化状态下,utc时间解析模块302接收到基于nmea协议的当前时间信息,则判断进入无信号状态,若连续多秒(为一个预设值)未接收到基于nmea协议的当前时间信息,则判断进入离线状态。[0089]进一步地,在任意工作状态下,若utc时间解析模块302连续多秒未接收到基于nmea协议的当前时间信息,则判断进入离线状态,若在离线状态下,utc时间解析模块302接收到基于nmea协议的当前时间信息,则判断进入无信号状态。[0090]进一步地,所述gnss状态控制模块304还用于对gnss模块的无信号状态和时间无效状态进行判断,其中:[0091]当所述第二本地时间小于所述第一本地时间,或,所述第二本地时间大于所述第一本地时间加1秒,或,pps脉冲处理模块未接收到秒脉冲信号,则判断所述gnss模块进入无信号状态;[0092]当所述第二本地时间大于所述第一本地时间,且,所述第二本地时间小于所述第一本地时间加1秒,则判断所述第一utc累加秒和所述第一gnss时间是否相等,若不相等,则判断获知所述gnss模块进入时间无效状态,并将所述第一utc累加秒作为所述pps脉冲处理模块在下一周期中接收到秒脉冲信号时的gnss时间,以得到新的第一gnss时间,用于下一次的时间无效状态判断。[0093]在本发明中,当utc时间解析模块接302接收到基于nmea协议的当前时间信息,但pps脉冲处理模块301未接收到pps脉冲时,判断进入无信号状态;[0094]若pps脉冲处理模块301接收到pps脉冲的时间,但与utc时间解析模块302接收到基于nmea协议的当前时间信息的时间不匹配时,即utc时间解析模块302接收到当前时间信息时的本地时间小于pps脉冲处理模块301接收到pps脉冲时的本地时间,或utc时间解析模块302接收到当前时间信息时的本地时间大于pps脉冲处理模块301接收到pps脉冲时的本地时间加1秒,则判断进入无信号状态。[0095]进一步地,在无信号状态下,gnss状态控制模块304将持续检查pps脉冲处理模块301是否接收到pps脉冲和utc时间解析模块302是否接收到基于nmea协议的当前时间信息,若接收到且二者时间匹配,即接收到当前时间信息时的本地时间(第二本地时间)大于接收到pps脉冲时的本地时间(第一本地时间),且小于接收到pps脉冲时的本地时间(第一本地时间)加1秒,进一步判断utc时间解析模块302解析的utc时间(第一utc累加秒)和gnss时间(第一gnss时间)是否相等,若相等则判断进入正常状态,若不相等则判断进入时间无效状态。[0096]进一步地,在无信号状态下,gnss状态控制模块304将持续检查pps脉冲处理模块301是否接收到pps脉冲和utc时间解析模块302是否接收到基于nmea协议的当前时间信息,若接收到且二者时间匹配,进一步判断utc时间解析模块302解析的utc时间(第一utc累加秒)和gnss时间(第一gnss时间)是否相等,若相等则判断进入正常工作状态,若不相等,则将pps脉冲处理模块301中维护的gnss时间修改为utc时间解析模块302当前解析得到的utc时间(即第一utc累加秒),并继续保持时间无效状态,待接收到下一个周期的pps脉冲和基于nmea协议的当前时间信息时,pps脉冲处理模块301通过将第一utc累加秒加1秒,得到新的第一gnss时间,从而根据这个新的gnss时间和utc时间解析模块302解析得到的utc时间(为下一周期新解析得到的)再次判断。[0097]进一步地,在正常工作状态下,gnss状态控制模块304将持续检查pps脉冲处理模块301是否接收到pps脉冲和utc时间解析模块302是否接收到基于nmea协议的当前时间信息,若接收到且二者时间匹配,进一步判断utc时间解析模块302解析的utc时间和gnss时间是否相等,若不相等则返回时间无效状态,若相等则获取此时的本地时间(即第三本地时间),并计算其与接收到pps脉冲时的本地时间之差,记作本地时间差值,若本地时间差值小于1秒,则执行预设校时判断规则,在满足预设校时判断规则时,以第一gnss时间作为校时时间中的utc累加秒(即第二utc累加秒,作为utc校时时间),以本地时间差值作为校时时间中的微秒计数值,向时间补偿处理模块305发起校时请求。[0098]在上述实施例的基础上,所述预设校时判断规则具体包括:[0099]若所述第一gnss时间与所述第三本地时间之间的误差值小于等于2秒,构建第一校时时间,并生成所述第一校时时间对应的校时请求;[0100]或,若所述第一gnss时间与所述第三本地时间之间的误差值大于2秒,且连续3次所述utc时间解析模块302解析得到的第一utc累加秒和所述pps脉冲处理模块301获取的第一gnss时间相等,构建第二校时时间,并生成所述第二校时时间对应的校时请求。[0101]在本发明中,预设校时判断规则用于容错处理,通过对比gnss时间和本地时间,保障校时时间的有效性,从而提高单片机系统的可靠性。需要说明的是,本发明中的预设校时判断规则,可根据应用场景的具体需求进行设计,在可靠性要求较低的场景中,可放宽判断条件,缩短校时时间;在可靠性要求较高的场景中,可增加判断条件,提高系统的容错能力。[0102]在上述实施例的基础上,所述定时器控制模块303具体用于:[0103]基于rtc模块的rtc秒中断,获取当前时刻rtc时间,并在接收到由所述时间补偿处理模块305转发的第二utc累加秒之后,将所述第二utc累加秒作为当前时刻rtc时间,并置位校时状态;[0104]所述基于rtc模块的rtc秒中断,获取当前时刻rtc时间,具体包括:[0105]当发生rtc秒中断时,若所述定时器控制模块303置位校时状态,则将当前时刻rtc时间加1秒,并将加1秒后的当前时刻rtc时间转化为日期时间格式写入rtc模块,同时清除所述定时器控制模块303的校时状态;若未置位校时状态,则通过rtc模块获取当前时刻rtc时间。[0106]在本发明中,定时器控制模块303通过rtc秒中断,维护当前时刻rtc时间,通过单片机内部高速计数器维护当前时刻微秒计数值,并响应来自时间补偿处理模块305的utc校时时间。其中,rtc秒中断由rtc模块的1hz时钟信号触发,每秒发生一次;单片机内部高速计数器的计数值每1微秒自动加1,作为当前微秒计数值。[0107]当定时器控制模块303接收到来自时间补偿处理模块305的utc校时时间时,将其所维护的当前时刻rtc时间更新为utc校时时间,并置位校时状态。[0108]图5为本发明提供的基于rtc秒中断的定时器控制模块的工作流程示意图,可参考图5所示,当发生rtc秒中断时,将清零单片机内部高速计数器的计数值,此时若定时器控制模块置位校时状态,则令当前时刻rtc时间加1秒,并将加1秒后的当前时刻rtc时间转化为日期时间格式并写入rtc模块,同时清除校时状态;若未置位校时状态,则从rtc模块读取当前日期时间,并转化为utc累加秒格式,作为当前时刻rtc时间。[0109]在一实施例中,对本发明提供的微秒级单片机定时装置进行整体说明,图6为本发明提供的微秒级单片机定时装置的整体结构示意图,可参考图6所示,本发明利用单片机内部高速计数器,产生当前时刻微秒计数值,并由时间补偿处理模块305根据校时时间和当前时刻微秒计数值,计算时间补偿码;同时,通过时间补偿码、当前时刻rtc时间和微秒计数值,得到精确到微秒的本地时间,实现微秒级的定时精度。[0110]并且,当gnss模块正常工作时,通过gnss模块输出的pps脉冲和基于nmea协议的当前时间信息,对当前时刻rtc时间和当前时刻微秒计数值进行校准,保障时间精度。当gnss信号丢失时,本发明通过rtc秒中断,每秒对单片机内部高速计数器产生的当前时刻微秒计数值进行一次修正,防止误差累计。由于rtc模块以精度较高的32768hz晶振作为时钟源且带有温度补偿,故能在gnss信号丢失时继续保持较高的定时精度,实现了基于gnss模块和rtc模块的高精度定时。[0111]进一步地,在单片机系统正常工作时,通过rtc模块与单片机内部高速计数器的配合,产生微秒级的精确定时。当系统掉电时,单片机内部高速计数器虽停止工作,但rtc模块可通过额外的供电电源继续工作,因此系统再次启动时仍可获得精确到秒的本地时间,此时即使丢失gnss信号,系统仍能够以相对精确的时间继续运行,防止本地时间误差过大对设备造成严重影响,使得在掉电情况下,基于rtc模块继续保持精确时间。[0112]另外,在gnss信号丢失时,仍可通过rtc模块获得较高精度且掉电保持的本地时间,故能够以本地时间作为判断依据,结合gnss状态控制模块304,对gnss模块输出校时信号的有效性进行检验。当gnss模块工作异常时,gnss状态控制模块304将识别其工作状态,防止异常状态下修改本地时间;当外部电磁信号干扰pps脉冲信号时,可通过对比gnss时间和解析的utc时间,防止误修改本地时间;同时,通过执行预设校时判断规则,对比本地时间和gnss时间,进一步防止对本地时间的误修改。因此,本发明可有效提升定时装置的容错能力,提高可靠性。[0113]本发明提供的微秒级单片机定时装置,在时间校准时,根据校时时间中的微秒计数值和单片机内部高速计数器维护的当前时刻微秒计数值,计算时间补偿码,而无需修改当前时刻微秒计数值,使得单片机内部高速计数器的运行与gnss模块的校时信号相互独立,有利于rtc模块对其进行周期性校准。并且,在gnss模块正常工作时,利用pps脉冲和基于nmea协议的当前时间信息校准rtc模块,再利用rtc模块产生的1hz时钟信号校准单片机内部高速计数器,通过两级时间同步,防止单片机内部高速计数器的误差累计,实现高精度的微秒级定时。除此之外,还根据gnss校时信号的输出情况,划分gnss工作状态,防止异常状态下的误校时,同时结合预设校时判断规则,对比gnss时间和本地时间,进一步提高系统可靠性。[0114]下面对本发明提供的微秒级单片机定时方法进行描述,下文描述的微秒级单片机定时方法与上文描述的微秒级单片机定时装置可相互对应参照。[0115]图7为本发明提供的微秒级单片机定时方法的流程示意图,如图7所示,本发明提供了一种微秒级单片机定时方法,包括:[0116]步骤701,通过pps脉冲处理模块,获取第一本地时间和第一gnss时间;其中,所述第一本地时间表示在当前时刻,所述pps脉冲处理模块接收到秒脉冲信号时对应的本地时间;所述第一gnss时间表示所述pps脉冲处理模块获取所述第一本地时间时对应的gnss时间加1秒;[0117]步骤702,通过utc时间解析模块,获取第一utc累加秒和第二本地时间;其中,所述第一utc累加秒表示在当前时刻,所述utc时间解析模块对接收到的基于nmea协议的当前时间信息进行解析,得到的累加秒格式的utc时间;所述第二本地时间表示所述utc时间解析模块获取所述第一utc累加秒时对应的本地时间;[0118]步骤703,通过定时器控制模块,获取当前时刻rtc时间和当前时刻微秒计数值,并将所述当前时刻rtc时间和所述当前时刻微秒计数值发送到所述时间补偿处理模块;[0119]步骤704,基于gnss状态控制模块,根据所述第一本地时间、所述第一utc累加秒、所述第一gnss时间和所述第二本地时间,确定校时时间,并生成对应的校时请求;[0120]步骤705,基于时间补偿处理模块,在接收到所述校时请求之后,根据所述当前时刻rtc时间、所述当前时刻微秒计数值和时间补偿码,校准单片机系统的本地时间;其中,所述时间补偿码是通过所述校时时间和所述当前时刻微秒计数值计算得到的。[0121]需要说明的是,在本发明中,在获取第一本地时间和第二本地时间时,都会需要调用时间补偿处理模块获取到对应的本地时间,而时间补偿处理模块又需要从定时器控制模块中读取当前时刻rtc时间和当前时刻微秒计数值,进行本地时间校准。因此,在本实施例中,步骤703和其它步骤在时间上是交错的,即在步骤701和步骤702中,通过步骤705在获取本地时间时(初始阶段,从步骤705中的时间补偿处理模块获取的本地时间可理解为补偿为0),步骤703也同时将当前时刻rtc时间和当前时刻微秒计数值发送到步骤705中的时间补偿处理模块。[0122]本发明提供的微秒级单片机定时方法,通过单片机内部高速计数器产生当前微秒计数值,并由时间补偿处理模块根据校时时间和当前微秒计数值计算时间补偿码,同时,通过时间补偿码、当前rtc时间和微秒计数值得到精确到微秒的本地时间,实现微秒级的定时精度。[0123]本发明提供的方法是用于执行上述各装置实施例的,具体流程和详细内容请参照上述实施例,此处不再赘述。[0124]图8为本发明提供的电子设备的结构示意图,如图8所示,该电子设备可以包括:处理器(processor)801、通信接口(communications interface)802、存储器(memory)803和通信总线804,其中,处理器801,通信接口802,存储器803通过通信总线804完成相互间的通信。处理器801可以调用存储器803中的逻辑指令,以执行微秒级单片机定时方法,该方法包括:通过pps脉冲处理模块,获取第一本地时间和第一gnss时间;其中,所述第一本地时间表示在当前时刻,所述pps脉冲处理模块接收到秒脉冲信号时对应的本地时间;所述第一gnss时间表示所述pps脉冲处理模块获取所述第一本地时间时对应的gnss时间加1秒;通过utc时间解析模块,获取第一utc累加秒和第二本地时间;其中,所述第一utc累加秒表示在当前时刻,所述utc时间解析模块对接收到的基于nmea协议的当前时间信息进行解析,得到的累加秒格式的utc时间;所述第二本地时间表示所述utc时间解析模块获取所述第一utc累加秒时对应的本地时间;通过定时器控制模块,获取当前时刻rtc时间和当前时刻微秒计数值,并将所述当前时刻rtc时间和所述当前时刻微秒计数值发送到所述时间补偿处理模块;基于gnss状态控制模块,根据所述第一本地时间、所述第一utc累加秒、所述第一gnss时间和所述第二本地时间,确定校时时间,并生成对应的校时请求;基于时间补偿处理模块,在接收到所述校时请求之后,根据所述当前时刻rtc时间、所述当前时刻微秒计数值和时间补偿码,校准单片机系统的本地时间;其中,所述时间补偿码是通过所述校时时间和所述当前时刻微秒计数值计算得到的。[0125]此外,上述的存储器803中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。[0126]另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的微秒级单片机定时方法,该方法包括:通过pps脉冲处理模块,获取第一本地时间和第一gnss时间;其中,所述第一本地时间表示在当前时刻,所述pps脉冲处理模块接收到秒脉冲信号时对应的本地时间;所述第一gnss时间表示所述pps脉冲处理模块获取所述第一本地时间时对应的gnss时间加1秒;通过utc时间解析模块,获取第一utc累加秒和第二本地时间;其中,所述第一utc累加秒表示在当前时刻,所述utc时间解析模块对接收到的基于nmea协议的当前时间信息进行解析,得到的累加秒格式的utc时间;所述第二本地时间表示所述utc时间解析模块获取所述第一utc累加秒时对应的本地时间;通过定时器控制模块,获取当前时刻rtc时间和当前时刻微秒计数值,并将所述当前时刻rtc时间和所述当前时刻微秒计数值发送到所述时间补偿处理模块;基于gnss状态控制模块,根据所述第一本地时间、所述第一utc累加秒、所述第一gnss时间和所述第二本地时间,确定校时时间,并生成对应的校时请求;基于时间补偿处理模块,在接收到所述校时请求之后,根据所述当前时刻rtc时间、所述当前时刻微秒计数值和时间补偿码,校准单片机系统的本地时间;其中,所述时间补偿码是通过所述校时时间和所述当前时刻微秒计数值计算得到的。[0127]又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的微秒级单片机定时方法,该方法包括:通过pps脉冲处理模块,获取第一本地时间和第一gnss时间;其中,所述第一本地时间表示在当前时刻,所述pps脉冲处理模块接收到秒脉冲信号时对应的本地时间;所述第一gnss时间表示所述pps脉冲处理模块获取所述第一本地时间时对应的gnss时间加1秒;通过utc时间解析模块,获取第一utc累加秒和第二本地时间;其中,所述第一utc累加秒表示在当前时刻,所述utc时间解析模块对接收到的基于nmea协议的当前时间信息进行解析,得到的累加秒格式的utc时间;所述第二本地时间表示所述utc时间解析模块获取所述第一utc累加秒时对应的本地时间;通过定时器控制模块,获取当前时刻rtc时间和当前时刻微秒计数值,并将所述当前时刻rtc时间和所述当前时刻微秒计数值发送到所述时间补偿处理模块;基于gnss状态控制模块,根据所述第一本地时间、所述第一utc累加秒、所述第一gnss时间和所述第二本地时间,确定校时时间,并生成对应的校时请求;基于时间补偿处理模块,在接收到所述校时请求之后,根据所述当前时刻rtc时间、所述当前时刻微秒计数值和时间补偿码,校准单片机系统的本地时间;其中,所述时间补偿码是通过所述校时时间和所述当前时刻微秒计数值计算得到的。[0128]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。[0129]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。[0130]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

本文地址:https://www.jishuxx.com/zhuanli/20240730/149874.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。