首页> 中国专利> 基于嵌入式系统的定时器装置及定时方法

基于嵌入式系统的定时器装置及定时方法

摘要

本发明公开了一种基于嵌入式系统的定时器装置和定时方法,其中该装置包括:定时器、请求定时模块、时间数据处理模块和定时器休眠模块,请求定时模块用于接收控制系统的定时请求,根据该请求创建定时请求信号,并向时间数据处理模块发送定时请求信号;时间数据处理模块,用于接收请求定时模块发来的定时请求信号,读取定时器的当前定时参数,然后根据时间差值算法对定时器的定时时长进行实时检测判断,定时器休眠模块用于接收时间数据处理模块发来的定时结束信号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始化准备。本发明定时时间灵活性强、使用简单方便,实现了工业控制系统中延时、定时多重性和多样性的要求,且定时精度高。

著录项

  • 公开/公告号CN105718257A

    专利类型发明专利

  • 公开/公告日2016-06-29

    原文格式PDF

  • 申请/专利权人 上海理工大学;

    申请/专利号CN201610019615.8

  • 申请日2016-01-13

  • 分类号G06F9/44;

  • 代理机构上海脱颖律师事务所;

  • 代理人脱颖

  • 地址 200093 上海市杨浦区军工路516号

  • 入库时间 2023-12-18 15:45:39

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-12-23

    未缴年费专利权终止 IPC(主分类):G06F 8/20 专利号:ZL2016100196158 申请日:20160113 授权公告日:20181225

    专利权的终止

  • 2018-12-25

    授权

    授权

  • 2016-07-27

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20160113

    实质审查的生效

  • 2016-06-29

    公开

    公开

说明书

技术领域

本发明涉及一种基于嵌入式系统的定时器装置及定时方法,具体 阐述了嵌入式系统控制器的定时器装置的设计方法及应用层定时器 算法。

背景技术

随着工业自动控制技术的规模化发展,控制过程中多任务、多层 次的复杂控制要求向各工业控制系统提出了新的挑战。要使系统稳定、 可靠地运行,控制内容常常要求控制系统延时或定时向外设发出各种 不同的控制信号,以满足不同时序、不同功能的控制要求。因此,需 要控制系统具有多个相互独立而又标准相同的定时器来实现控制功 能。

嵌入式系统集成了输入输出口、RS232和485通信串口,是一款 功能丰富的一体控制器(以下简称控制器)。其硬件系统结构精简、内 核小、成本低、灵活方便且实时性高,已逐渐发展成为嵌入式系统开 发研究中的主流部件。然后,控制器有可供用户使用的相互独立的定 时器,例如timer0~4,除此之外,若控制系统还要求实现其他更多 的延时、定时功能,则多是通过使用for函数进行一定次数的空循环 来达到延时、定时效果,这种方式不但定时时间难以精确判定,而且 在延时时间未结束时,CPU始终停留在延时功能程序段内,不会扫描 其他程序段内容,可见,这种定时方式不仅占用了大量系统内存,还 拖慢了CPU处理事件的时间进程。然而,由于硬件资源的限制,不可 能为每一个定时应用单独配置一个硬件定时器。这种有限的定时器个 数和日益复杂的自动控制要求之间的矛盾,无疑成了控制器在嵌入式 开发领域中发展的绊脚石。为了解决这个问题,本文提出一种基于嵌 入式系统的定时器的设计方法,基于ADS编译器在单个硬件定时器的 基础上创建多个定时器,以实现在硬件资源有限的情况下满足多点同 时定时的控制要求。

发明内容

本发明涉及一种基于嵌入式系统的软件定时器设计,针对工业控 制过程中经常需要在不同之处同时使用定时功能,而嵌入式系统中有 的相互独立的定时器,例如timer0~4,提出一种基于嵌入式系统的软 件定时器的设计方法。

本发明公开了一种基于嵌入式系统的定时器设计方法,包括定时 启动、运行、停止三个阶段,分别对应软件定时系统的请求定时模块、 数据处理模块和定时器休眠模块。三个阶段分别由不同的API函数 完成。

一种基于嵌入式系统的定时器装置,包括:定时器、请求定时模 块、时间数据处理模块和定时器休眠模块,其中:

请求定时模块用于接收控制系统的定时请求,根据该请求创建定 时请求信号,并向时间数据处理模块发送定时请求信号;

时间数据处理模块,用于接收请求定时模块发来的定时请求信号, 读取定时器的当前定时参数,然后根据时间差值算法对定时器的定时 时长进行实时检测判断,当定时时长达到预定定时时长时,创建定时 结束信号,并将其传递给控制系统和定时器休眠模块;

定时器休眠模块用于接收时间数据处理模块发来的定时结束信 号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始 化准备。

所述的定时器装置,优选的:

所述定时器包括递减计数器和定时计数缓冲寄存器,

时间数据处理模块包括定时中断次数计数器、计数结束标志位、 中断溢出位、中断溢出计数器;

所述定时请求信号包括:①定时器编号T_num,②预定定时时 长C_time,③定时初始参数P_init;

所述时间数据处理模块对定时器的定时时间进行实时检测包括, 实时读取当前定时参数P_curt,然后根据时间差值算法对定时时长 进行实时检测判断:时间差值=当前定时参数-初始定时参数,当时间 差值大于等于请求的定时时长,即Δ=P_curt-P_init≥C_time时, 定义“计数结束”标志变量F_tup为“1”,并输出给控制系统;

所述中断溢出位F_of在定时中断次数计数器的计数值未发生溢 出时为0,发生溢出时置为1。

所述的定时器装置,优选的:

所述定时初始参数P_init和当前定时参数P_curt都是结构体变 量,P_init包括定时器递减计数器的初始计数值P_0,定时中断次数 计数器的初始计数值P_C0以及中断溢出计数器的初始计数值P_OC0; P_curt包括定时器递减计数器的当前计数值P_t,定时中断次数计数 器的当前计数值P_Ct以及中断溢出计数器的当前计数值P_OCt。

所述的定时器装置,优选的:请求信号发出后,请求定时模块将 计数结束标志位中的标志变量F_tup设为“0”,每接收一个脉冲递 减计数器的值P_t减1,每当P_t减为0时,定时器向时间数据处理模 块发送信号,根据该信号,定时中断次数计数器的计数值P_Ct的值 加1,定时计数缓冲寄存器中的值自动重载到递减计数器中;当P_Ct 的值达到其上限值P_Climit时,中断溢出计数器的计数值P_OCt加1, 时间数据处理模块将中断溢出位置1,同时将P_Ct清零。

所述的定时器装置,优选的:所述时间数据处理模块按如下方式 对定时器的定时时长进行计算:

1)当F_of=0时,表示定时器中断次数累计没有发生溢出,当 前定时时长按如下公式计算:

Δn=Δn1+Tbase×(Δn2+Δn3)---(1)

其中:Δn1=(T0n1-Tt1)Δn2=(Tt2-T0n2)Δn3=0---(2)

2)当F_of=1时,表示定时器中断次数累计有溢出现象发生, 当前时间长度计算公式如下式:

Δn=Δn1+Tbase×(Δn2+Δn3)---(3)

其中:Δn1=(T0n1-Tt1)Δn2=Tt2+(P_Climit-T0n2)Δn3=P_Climit×(Tt3-T0n3-1)---(4)

式(1)、(2)、(3)和(4)中:

Tbase表示定时器的时间计数timebase,即定时计数缓冲寄存 器中用于自动重载到递减计数器中的值;设控制系统定时器中断频率 为Tirpt,则Tbase按式(5)计算:

Tbase=Tirptf---(5)

P_Climit表示定时参数P_C不发生溢出的最大极限值;

此外,用T0表示初始定时参数、Tt表示当前定时参数、上角标 表示结构体成员编号、下脚标表示数组成员编号。

根据计算式(1)和(3)计算出Δn值后,做下式判断:

Δn≥C_time(6)。

一种基于嵌入式系统的定时器方法,包括如下步骤:

接收控制系统的定时请求,根据该请求创建定时请求信号,并发 送定时请求信号;

接收定时请求信号,读取定时器的当前定时参数,然后根据时间 差值算法对定时器的定时时长进行实时检测判断,当定时时间达到预 定定时时长时,创建定时结束信号,并将其传递给控制系统;

接收定时结束信号,根据该信号清除相应的定时请求信号,为下 一次定时请求做初始化准备。

所述的定时器装置,优选的:

所述定时器包括递减计数器和定时计数缓冲寄存器,

所述定时请求信号包括:①定时器编号T_num,②预定定时时 长C_time,③定时初始参数P_init;

对定时器的定时时长进行实时检测包括,实时读取当前定时参数 P_curt,然后根据时间差值算法对定时时长进行实时检测判断:时 间差值=当前定时参数-初始定时参数,当时间差值大于等于预定的定 时时长,即Δ=P_curt-P_init≥C_time时,定义“计数结束”标 志变量F_tup为“1”,并输出给控制系统;

所述中断溢出位F_of在定时中断次数计数器的计数值未发生溢 出时为0,发生溢出时置为1。

所述的定时器装置,优选的:

所述定时初始参数P_init和当前定时参数P_curt都是结构体变 量,P_init包括定时器递减计数器的初始计数值P_0,定时中断次数 计数器的初始计数值P_C0以及中断溢出计数器的初始计数值P_OC0; P_curt包括定时器递减计数器的当前计数值P_t,定时中断次数计数 器的当前计数值P_Ct以及中断溢出计数器的当前计数值P_OCt。

所述的定时器装置,优选的:请求信号发出后,将计数结束标志 寄存位中的标志变量F_tup设为“0”,每接收一个脉冲递减计数器 的值P_t减1,每当P_t减为0时,发送一个指示信号,根据该信号, 定时中断次数计数器的计数值P_Ct的值加1,定时计数缓冲寄存器中 的值自动重载到递减计数器中;当P_Ct的值达到其上限值P_Climit时, 中断溢出计数器的计数值P_OCt加1,将中断溢出位置1,同时将P_Ct 清零。

所述的定时器装置,优选的:按如下方式对定时器的定时时长进 行计算:

1)当F_of=0时,表示定时器中断次数累计没有发生溢出,当 前定时时长按如下公式计算:

Δn=Δn1+Tbase×(Δn2+Δn3)---(1)

其中:Δn1=(T0n1-Tt1)Δn2=(Tt2-T0n2)Δn3=0---(2)

2)当F_of=1时,表示定时器中断次数累计有溢出现象发生, 当前时间长度计算公式如下式:

Δn=Δn1+Tbase×(Δn2+Δn3)---(3)

其中:Δn1=(T0n1-Tt1)Δn2=Tt2+(P_Climit-T0n2)Δn3=P_Climit×(Tt3-T0n3-1)---(4)

式(1)、(2)、(3)和(4)中:

Tbase表示定时器的时间基数timebase,即定时计数缓 冲寄存器中用于自动重载到递减计数器中的值;设控制系统定时器中 断频率为Tirpt,则Tbase按式(5)计算:

Tbase=Tirptf---(5)

P_Climit表示定时参数P_C不发生溢出的最大极限值;

此外,用T0表示初始定时参数、Tt表示当前定时参数、 上角标表示结构体成员编号、下脚标表示数组成员编号。

根据计算式(1)和(3)计算出Δn值后,做下式判断:

Δn≥C_time(6)。

一种基于嵌入式系统的软件定时器设计方法,包括定时启动、运 行、停止三个阶段,分别对应软件定时系统的请求定时模块、时间数 据处理模块和定时器“休眠”模块。三个阶段分别由不同的API函数 完成不同的功能,并与控制系统进行数据交换,其中:

A)所述启动阶段,对应请求定时模块。在控制系统请求定时时,该 功能模块负责创建定时请求信号,并将信号传递给数据处理功能 模块。定时请求信号主要包括:①软件定时系统中定时器编号 T_num,②请求定时时长C_time,③定时初始参数P_init。

B)所述运行阶段,对应时间数据处理模块。首先读取控制系统当前 定时参数P_curt,然后根据时间差值算法对定时时长进行实时检 测判断,最后创建定时结束信号F_tup,并将其传递给控制系统。

C)所述停止阶段,对应系统“休眠”模块。负责当某次定时功能结 束后清除相应的定时请求信号,为下一次定时请求做初始化准备。

所述的基于嵌入式系统的软件定时器设计方法,其特征在于:所 述启动阶段,定义结构体类型变量P_init存储初始定时参数,包括定 时系统中定时器编号T_num、请求定时时长C_time,定时器递减计 数器计数值P_t,定时中断次数计数P_Ct以及中断溢出计数P_OCt。 所述定时器计数缓存寄存器(TCNTO)指嵌入式内部寄存器。

所述的基于嵌入式系统的软件定时器设计方法,其中:通 过设定定时器计数缓存寄存器值,确定定时器定时精度,通过公式: 所需计数次数=(所需时间*系统主频)/定时器计数监视寄存器值, 可得出所需定时器中断次数。

所述的基于嵌入式系统的软件定时器设计方法,其中:所述运行 阶段,定时器开始定时后,定义“计数结束”标志变量F_tup为“0”, 所述定时器中断计数变量P_Ct在每次定时器中断服务函数中增加一 次,若定时器中断次数超过定时器计数变量最大值,便向定时器中断 溢出计数变量进1,且清零定时器中断计数变量。

所述的基于嵌入式系统的软件定时器设计方法,其特征在于:所 述时间差值算法,根据公式:时间差值=当前定时参数-初始定时参数, 当时间差值大于等于请求定时时长,即Δ=P_curt-P_init≥ C_time时,定义“计数结束”标志变量F_tup为“1”,并输出给控制 系统,完成计时和延时功能。

所述的基于嵌入式系统的软件定时器设计方,其中:所述停止阶 段,当“计数结束”变量F_tup置“1”后,保证定时参数P_init和P_curt 在下一次请求定时动作发起之前保持一致。

本发明产生的有益效果是:定时时间灵活性强、使用简单方便, 实现了工业控制系统中延时、定时多重性和多样性的要求,且定时精 度高。

附图说明

图1:基于嵌入式系统的定时器装置结构示意图

图2:请求定时子程序流程图

图3:软件定时器数据计数原理

图4:PWM定时器功能原理图

图5:PWM定时器控制流程图

图6:定时运行子程序流程图

图7:定时停止子程序流程图

具体实施方式

以下结合附图对本发明作进一步说明。

如图1所示,本发明基于嵌入式系统的定时器装置,包括:定时 器、请求定时模块、时间数据处理模块和定时器休眠模块,其中:请 求定时模块用于接收控制系统的定时请求,根据该请求创建定时请求 信号,并向时间数据处理模块发送定时请求信号;时间数据处理模块, 用于接收请求定时模块发来的定时请求信号,读取定时器的当前定时 参数,然后根据时间差值算法对定时器的定时时长进行实时检测判断, 当定时时间达到定时时长时,创建定时结束信号,并将其传递给控制 系统;定时器休眠模块用于接收时间数据处理模块发来的定时结束信 号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始 化准备。

所述定时器包括递减计数器和定时计数缓冲寄存器。所述时间数 据处理模块包括定时中断次数计数器、计数结束标志位、中断溢出位、 中断溢出计数器。所述定时请求信号包括:①定时器编号T_num,② 请求定时时长C_time,③定时初始参数P_init;所述时间数据处理模 块对定时器的定时时长进行实时检测包括,实时读取当前定时参数 P_curt,然后根据时间差值算法对定时时长进行实时检测判断:时间 差值=当前定时参数-初始定时参数,当时间差值大于等于请求的定 时时长,即Δ=P_curt-P_init≥C_time时,定义“计数结束”标志变量 F_tup为“1”,并输出给控制系统;所述中断溢出位F_of在定时中断 次数计数器的计数值未发生溢出时为0,发生溢出时置为1。

请求信号发出后,请求定时模块将计数结束标志寄存位中的标志 变量F_tup设为“0”,每接收一个脉冲递减计数器的值P_t减1,每当 P_t减为0时,向时间数据处理模块发送信号,根据该信号,定时中 断次数计数器的计数值P_Ct的值加1,定时计数缓冲寄存器中的值自 动重载到递减计数器中;当P_Ct的值达到其上限值P_Climit时,中断溢 出计数器的计数值P_OCt加1,时间数据处理模块将中断溢出位置1, 同时将P_Ct清零。

一种基于嵌入式系统的定时方法,包括定时启动、运行、停止三 个阶段,分别对应软件定时系统的请求定时模块、时间数据处理模块 和定时器休眠模块,三个阶段分别由不同的API函数完成,并与控制 系统进行数据交换,其中:

A)所述启动阶段,完成定时请求信号的创建和定时初始数据的预 处理。请求定时子程序需要接收用户提供的请求定时器编号和请求定 时时间两个参数,之后由该子程序向数据处理子程序发送初始定时信 息P_init,并在定时运行阶段与当前定时参数P_curt一同参与时长计算。 因为P_init和P_curt是一个含有多个数组成员的自定义结构体类型的 变量(定时参数结构体设计如表1所示,为便于理解和表述,将本发 明中其余变量定义如表2所示),故要求请求定时子程序向控制系统 返回多个数据,因此,设计一个返回自定义结构体类型子函数。其控 制流程图如附图2所示。图中*timerid(num,time)是一个指向整型数 组的指针函数。由于软件定时系统中有任意多个相互独立的软件定时 器,分别对应不同的T_num,而函数不能直接返回整个数组的值, *timerid指针函数返回的指针指向请求定时时长数组的首地址,这样 其他子函数便可以通过简单的指针操作获取对应T_num定时器的请 求定时时长。

表1

表2

B)所述运行阶段,采用基于差值比较原理的时间长度算法,来实 时计算当前定时时长。若当前定时时长T_curt满足定时请求时要求的 时长C_time[T_num],则要求时间数据处理功能模块将相应定时结束标 志F_tup[T_num]置1并传递给控制系统。

1.所述时间长度算法在时间数据处理功能模块中应用,主要是对 定时请求模块传递来的数据初始定时信息P_init和数据处理模块读取 的数据当前定时参数P_curt进行计算,由结构体变量的定义可知, P_init和P_curt的数据来源于三个部分,对这三个部分的数据的操作称 为定时数据的预处理过程。本发明提出的三部分数据之间存在如附图 3所示逻辑关系。每当PWM定时器的递减计数器的值P_t减为0,P_Ct的 值就加1,同时寄存器TCNTB0中的值自动重载到递减计数器中(见 附图4,PWM定时器功能原理示意图);当P_Ct的值达到数据的上限 值P_Climit时,P_OCt的值加1,同时将P_Ct清零。每当递减计数器中的 值减为0,系统会向CPU发出一个中断请求信号,使当前程序运行指 针发生跳转去执行定时器中断服务程序,因此,在定时系统中对数据 P_t、P_Ct、P_OCt的处理均在PWM定时器中断服务函数中完成,正是 因为如此,称PWM定时器为软件定时器的硬件基础。设计PWM定时器 控制流程图如附图4所示。

2.所述基于差值比较原理的时间长度算法其核心思想是由API 子函数计算定时参数P_curt和P_init的差值Δn,并将其与对应请求定时 时长C_time[T_num]实时进行比较,当Δn值满足定时时长要求时,定时 系统的数据处理模块将定时结束标志F_tup[T_num]置1输出并传递给 控制系统。因为PWM定时计数器是递减工作模式,即P_0和P_t的数值 是递减计数,而P_C0、P_Ct、P_OC0和P_OCt是递增计数,且由附图5 可知,在PWM定时中断服务程序中对定时数据的处理有两种模式,在 设计时间长度算法时应分情况进行讨论,因此,本发明基于以下两种 情况提出软件定时系统的时间长度算法:

1)当F_of=0时

此时,表示定时器中断次数累计没有发生溢出,故当前定 时时长可按如下公式计算:

Δn=Δn1+Tbase×(Δn2+Δn3)---(1)

其中:Δn1=(T0n1-Tt1)Δn2=(Tt2-T0n2)Δn3=0---(2)

2)当F_of=1时

此时,表示定时器中断次数累计有溢出现象发生,故在设 计时间长度算法时,要考虑溢出对当前定时长度的影响, 此时,设计时间长度计算公式如下式:

Δn=Δn1+Tbase×(Δn2+Δn3)---(3)

其中:Δn1=(T0n1-Tt1)Δn2=Tt2+(P_Climit-T0n2)Δn3=P_Climit×(Tt3-T0n3-1)---(4)

式(1)、(2)、(3)和(4)中:

Tbase表示PWM定时器的时间计数timebase,即定时计数缓 冲寄存器TCNTBn中用于自动重载到递减计数器中的值。设控制系统 PWM定时中断频率为Tirpt,则Tbase可按式(5)计算:

Tbase=Tirptf---(5)

P_Climit表示定时参数P_C不发生溢出的最大极限值;

此外,为简化算法的表达形式,用T0表示初始定时参数、Tt表示 当前定时参数、上角标表示结构体成员编号、下脚标表示数组成员编 号。

根据计算式(1)和(3)计算出Δn值后,做下式判断:

Δn≥C_time[T_num](6)

综上所述,本发明提出的定时系统时间长度算法的计算过程可归 纳为:

(1)计算PWM定时器递减计数器的初始计数值与当前计数值 Tt1的差值

(2)检测PWM定时器中断次数计数溢出标志的状态,若F_of=0, 执行步骤3,若F_of=1,执行步骤4。

(3)计算定时中断次数计数的当前值Tt2和初始值之差,记为

(4)中断计数次数发生溢出,考虑溢出对计数值的影响计算中断 次数计数的当前值Tt2和初始值之差,记为

(5)计算中断计数值的溢出量,记为

(6)计算三部分差值的的和,记为Δn,即为定时系统 实时定时时长;

(7)比较Δn与请求定时时长C_time[T_num]关系,若 Δn≥C_time[T_num],将定时结束标志F_tup[T_num]置1输出给控制系 统,表示当前定时结束;否则,跳转执行步骤(1)。

根据时间差值算法设计定时运行API函数,控制流程图如附图6 所示。在子程序中计算Δn值时,定时初始参数P_init的值由定时请求 子程序返回,为避免函数在传递和返回数据时产生数据冗余,占用太 多内存,设计数据处理子函数的返回类型为整型,但形式参数为指向 自定义结构体类型Time_Para_init的指针,通过传递P_init的地址来进 行函数调用,指针比整个结构要小得多,所以把它压到堆栈上效率比 直接拷贝结构要高很多。

C)所述定时停止阶段,定时停止是在当计算出当前定时长度满足 设定时长要求需要执行的操作,目的是当前定时功能结束时,保证对 应定时器P_init和P_curt在下一次请求定时动作发起之前保持一致,也 即将Δn值设为0,达到初始化定时参数的目的。由此可设计出定时停 止阶段API子函数程序流程图如附图7所示。该函数是一个无返回值 类型的函数,其形式参数有两个,一个是指向结构的指针,另一个是 用户指定请求使用的软件定时器编号。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号