用测周法测量频率时定时器时序交错问题的处理方法

文档序号:6552014阅读:192来源:国知局
用测周法测量频率时定时器时序交错问题的处理方法
【专利摘要】一种用测周法测量频率时,克服因软件对定时器的读取动作和定时器的进位、溢出,以及中断和捕获等动作的时序交错而可能产生的错误的方法。针对各种硬件背景,采用合理安排操作次序,以及逻辑判断的办法,避免在对定时器的正式读取操作中间,穿插发生有碍于结果正确性的定时器进位、溢出等事件,保证所得的当时定时值完全正确。
【专利说明】用测周法测量频率时定时器时序交错问题的处理方法 所属【技术领域】
[0001] 本发明涉及一种用测周法测量频率时,避免因系统对定时器的读取动作和定时器 的进位、溢出,以及中断和捕获等动作的时序交错而可能产生的错误的方法。

【背景技术】
[0002] 在基于微型计算机的工业控制系统中,对于频率量的测量,通常有直接测频法和 测周法两种方法。其中测周法是测周期长度,其倒数代表频率,测周法在延时和精度方面优 于直接测频法。但是测周法存在若干技术细节问题需要考虑。其中问题之一,就是读取定 时器信息时,若干事件发生的时序交错问题。
[0003] 测周法的一般基本算法是:在每次频率信号的某个边沿,如上升沿时作以下操 作:
[0004] (1)从定时器读取此次边沿发生时的定时值;
[0005] (2)将此次读得的定时值与上次中断的定时值相减,得到周期长度;
[0006] (3)保留此次的定时值留作下次使用。
[0007] 这些操作可以编写在一个中断服务程序中,为便于叙述,以下均称其为"此次中 断"。此基本算法的目的是求出周期长度,其中需要考虑时序交错问题的,有以下情况:
[0008] (1)如果定时器字长不能一次读取,则需考虑系统对定时器高、低位的读取和定时 器低位向高位进位之间的时序交错;
[0009] (2)如果两次中断之间定时器可能溢出,则需考虑中断操作与定时器发生溢出之 间的时序交错。
[0010] 这些情况处理不当时,误差不是发生在低位而是发生在高位,所以影响不小。
[0011] 这些问题,很多情况下可以回避。例如,如果我们待测的频率最低不低于某个界 限,以致于所得周期长度不会溢出,我们就可以完全不管两次中断之间是否发生过定时器 的溢出了。此时,如果两次中断期间定时器实际发生了溢出,那么在做上述减法时必然"不 够减",靠计算机运算器的天然借位(许多计算机语言中整数减法就具有此种天然借位), 就可以得到正确的结果了。
[0012] 但在实际应用中,往往不能完全避免频率过低。很多应用中,频率过低时允许不得 出准确结果,但是不允许出现大的误判,例如把"频率过低"误判为"频率过高"。也有的时 候,要根据频率过低的程度来决定更改分频比、认定"频率达零"等等。此时,上述问题就无 法回避了。
[0013] 也有的设计者,认为因此而产生的错误,虽然误差数值不小,但发生的概率很小, 靠滤波就可以适当控制其危害,所以就忽略了这个问题。结果实现的系统,虽然大多数时间 正常运行,但总有偶然出现的类似强干扰的波动。


【发明内容】

[0014] 本发明的目的是:设计一种从定时器读取此次边沿发生时的定时值的操作次序及 逻辑判断方法,以完全避免因系统对定时器的读取动作和定时器的进位、溢出,以及中断和 捕获等动作的时序交错而可能产生的错误。
[0015] 本发明的技术方案是:用测周法测量频率时定时器时序交错问题的处理方法,该 方法因与具体硬件结构有关,分情况叙述如下:
[0016] 情况(1):如果定时器是多级级联的,且高位、低位定时器均需由系统直接读取, 定义多级定时器最低位定时器为低位定时器,其余定时器为高位定时器,则避免因时序交 错而产生错误的关键在于:杜绝在对定时器的高、低位的正式读取动作之间发生进位。采用 如下次序即可实现这种保证:
[0017] a)读取高位定时器;
[0018] b)读取低位定时器;
[0019] c)如果低位定时器读取值小于一个界限X,则重读高位;可任选一个既不接近零, 又不接近低位定时器满量程的值作为X,其中,所述"不接近零"含义为:x > a,a为不小于 (m - ma)且小于低位定时器量程之半的一个值,所述"不接近低位定时器满量程"含义为: X <满量程一 b,b为不小于(mb - m)且小于低位定时器量程之半的一个值,这里,定义时 间数以低位定时器的计时单位度量,m为此次读取低位的时刻,ma为此前最近一次开始读 取高位定时器的时刻,mb为接下去假如执行"则重读高位"的话,读取完高位的时刻。
[0020] 情况(2):如果定时器是多级级联的,且低位定时器具有硬件捕获功能,而高位定 时器需由系统直接读取,则通常对定时器的读取动作可以安排在捕获中断中。若按照(1) 中的原则,则此时中断中已经无法直接读取捕获之前的高位值,但可以通过逻辑判断确定。 可采用次序:
[0021] a)取捕获值作为此次定时值的低位,此一步骤也可以移到后面用到此次定时值的 低位之前的任意时刻;
[0022] b)读取高位定时器,暂时作为此次定时值的高位;
[0023] c)再读低位定时器,采用以下条件之一作判断,如果满足该条件,则继续执行d)、 e),否则结束;
[0024] 条件一:低位定时器读取值小于捕获值;
[0025] 条件二:捕获值接近于满量程且定时器低位接近零,所述"接近"含义为:两个对 象之差的绝对值小于a,其中a为不小于(m - ma)且小于低位定时器量程之半的一个值,这 里,定义时间数以低位定时器的计时单位度量,m为此次读取定时器低位的时刻,ma为捕获 发生时刻;
[0026] 条件三:捕获值不小于X且低位定时器小于X,可任选一个既不接近零,又不接近 低位定时器满量程的值作为X,所述"不接近"含义为:两个对象之差的绝对值大于a,其中 a的定义同上述条件二;
[0027] d)重读高位定时器;
[0028] e)改取d)的结果减1后,作为此次定时值的高位。
[0029] 情况⑶:如果定时器具有硬件捕获功能,且定时器记满溢出时可以产生中断,以 便由软件作出相当于定时器向更高位进位的效果,则可以设一个变量V记录两次捕获中断 之间定时器的溢出次数,在下面的计算处理中使用。通常,在定时器溢出中断服务程序中 作:(1)如果V不超过限幅的界限,则令V增1 ; (2)根据V的值进行有关"频率过低"或"频 率达零"等的判断;V在捕获中断中清零。而在捕获中断程序中执行相当于上文"【背景技术】" 中所述的"此次中断"的操作。设定时器溢出中断程序和捕获中断程序的执行期间均已关 中断,那么为了避免因时序交错出现错误,相当于上述"此次中断"的操作的第一步"从定时 器读取此次边沿发生时的定时值",可以采用如下的次序实现(其中对捕获值作为此次定时 值的读取可以放在程序中用到该值之前任何时候):
[0030] a)专对定时器溢出中断程序短时开、关中断,开、关中断之间隔须保证此时如有已 经挂号的定时器溢出中断则一定能够响应执行;
[0031] b)令vbak = V,再令V = 0 ;其中,变量V为记录两次捕获中断之间定时器的溢出 次数,该次数在定时器溢出中断中统计。变量vbak是变量V的临时备份,用于本次对定时 器的读取动作完成后对周期/频率量计算处理中;而变量V本身则为下次统计溢出次数做 好准备;
[0032] c)再读定时器当时值,采用以下条件之一作判断,如果满足该条件,则继续执行 d)、e),否则结束:
[0033] 条件一:定时器当时值小于捕获值;
[0034] 条件二:捕获值接近于满量程且定时器当时值接近于0,所述"接近"含义为:两 个对象之差的绝对值小于a,其中a为不小于(m - ma)且小于定时器量程之半的一个值, 这里,定义时间数以定时器的计时单位度量,m为此次读取定时器的时刻,ma为捕获发生时 刻;
[0035] 条件三:捕获值不小于X且定时器当时值小于X,可任选一个既不接近零,又不接 近定时器满量程的值作为X,所述"不接近"含义为:两个对象之差的绝对值大于a,其中a 的定义同上述条件二;
[0036] d)专对定时器溢出中断程序短时开、关中断(其间隔条件同a));
[0037] e)如果 V = 0 则:{令 V = 1 ;令 vbak 减 1 ;}。
[0038] 上述三种情况下操作的共同点是:确保:所得的定时器高位信息,以及如(3)中的 vbak那样表示此前发生过定时器溢出次数的信息,实际上反映所获定时器低位值的时刻之 前,它们理论上应有的值。
[0039] 本方法的有益效果是,可以完全避免因系统对定时器的读取动作和定时器的进 位、溢出,以及中断和捕获等动作的时序交错而可能产生的错误。

【专利附图】

【附图说明】
[0040] 下面结合附图和实施例对本发明进一步说明。
[0041] 图1是在软件直读定时器,硬件进位的情况下,本方法读取当时定时值操作的流 程图。
[0042] 图2是在定时器低位硬件捕获中断,硬件进位的情况下,在捕获中断里用本方法 读取当时定时值操作的流程图。图中按照上文"
【发明内容】
"情况(2)的步骤c)采用条件一 来表示,实际上也可以换为条件二或条件三。
[0043] 图3是在硬件捕获中断,定时器溢出中断的情况下,在捕获中断里用本方法读取 当时定时值操作的流程图。图中按照上文"
【发明内容】
"情况(3)的步骤c)采用条件一来表 示,实际上也可以换为条件二或条件三。

【具体实施方式】 [0044] 实施例一:
[0045] 参阅图1,该实施例中硬件背景是:定时器多级级联,没有硬件捕获功能。采用图 1所示流程,所读取的定时器高、低位数据,完全避免了其间穿插发生进位的情况,保证后续 计算周期长度的正确。其中界限X的选取,应保证:若C)中的条件不满足,则a)、b)之间一 定不会发生定时器进位。其中"各级高位"是指,如果定时器级联超过两级,则除最低位一 级以外统称为"各级高位"。
[0046] 该情况下用测周法测量频率时定时器时序交错问题的处理方法,包括如下步骤:
[0047] a)读取高位定时器;
[0048] b)读取低位定时器;
[0049] c)如果低位定时器读取值小于一个界限X,则重读高位;可任选一个既不接近零, 又不接近低位定时器满量程的值作为X,其中,按照上文"
【发明内容】
"情况(1)中关于"不接 近"含义的规定,本实施例中,低位定时器是8位定时器,满量程为256个计时单位,(m - ma)最大不可能超过15个计时单位,(mb - m)最大不可能超过10个计时单位,则本实施例 中,界限X范围为:15〈X〈246即可。程序中实际采用X = 128。
[0050] 实施例二:
[0051] 参阅图2,该实施例中硬件背景是:定时器多级级联,其低位具有硬件捕获功能。 在捕获中断程序中采用图2所示流程,在紧接捕获时刻之后有发生进位可能时,所最后得 到的定时器高位值实际上是捕获前的值,同样完全避免了其间穿插发生进位的情况,保证 后续计算周期长度的正确。
[0052] 该情况下用测周法测量频率时定时器时序交错问题的处理方法,包括如下步骤:
[0053] a)取捕获值作为此次定时值的低位,此一步骤也可以移到后面用到此次定时值的 低位之前的任意时刻;
[0054] b)读取高位定时器,暂时作为此次定时值的高位;
[0055] c)再读低位定时器,如果满足以下"条件一",则继续执行d)、e),否则结束,其中 "条件一"也可以换为以下"条件二"或"条件三";
[0056] 条件一:低位定时器读取值小于捕获值;
[0057] 条件二:捕获值接近于满量程且定时器低位接近零,按照上文"
【发明内容】
"情况 ⑵中关于"接近"含义的规定,本实施例中,低位定时器是8位定时器,满量程为256个计 时单位,捕获发生时刻到此次读取定时器的时刻之间时间间隔最大不可能超过15个计时 单位,故本条件具体可以为:捕获值大于241且定时器低位读数小于15个计时单位;
[0058] 条件三:捕获值不小于X且低位定时器小于X,可任选一个既不接近零,又不接近 定时器满量程的值作为X,其中,按照上文"
【发明内容】
"情况(2)中关于"不接近"含义的规 定,本实施例中,具体同上述"条件二"中所述,故界限X范围为:15〈X〈241即可。程序中实 际采用X = 128 ;
[0059] d)重读高位定时器;
[0060] e)改取d)的结果减1后,作为此次定时值的高位。
[0061] 实施例三:
[0062] 参阅图3,本实施例中软硬件背景是:定时器具有硬件捕获功能,且定时器记满溢 出时可以产生中断,定时器溢出中断服务程序中使变量V增量。在捕获中断程序(进入时 已关中断)中采用图3所示流程获得V和vbak供下文使用。在紧接捕获时刻前后有发生 定时器记满溢出可能时,可保证最后得到的vbak实际上是捕获前理论上应有的值,同样完 全避免了因时序交错发生错误的情况。
[0063] 该情况下用测周法测量频率时定时器时序交错问题的处理方法,在捕获中断里读 取当时定时值的操作包括如下步骤:
[0064] a)专对定时器溢出中断程序短时开、关中断,开、关中断之间保证此时如有已经挂 号的定时器溢出中断则一定能够响应执行;因本实施例中,所用CPU要求间隔至少三条汇 编指令才能保证响应中断,故实例中,开、关中断之间用了三条汇编空操作指令;
[0065] b)令 vbak = V,再令 V = 0 ;
[0066] c)再读定时器当时值,如果满足以下"条件一",则继续执行d)、e),否则结束,其 中"条件一"也可以换为以下"条件二"或"条件三":
[0067] 条件一:定时器当时值小于捕获值;
[0068] 条件二:捕获值接近于满量程且定时器当时值接近于0,按照上文"
【发明内容】
"情 况⑶中关于"接近"含义的规定,本实施例中,定时器是16位定时器,满量程为65536个 单位,捕获发生时刻到此次读取定时器的时刻之间时间间隔最大不可能超过20个单位,因 此,本条件具体可以为:捕获值大于65516且定时器低位读数小于20个计时单位;
[0069] 条件三:捕获值不小于X且定时器当时值小于X,可任选一个既不接近零,又不接 近定时器满量程的值作为X,其中,按照上文"
【发明内容】
"情况(3)中关于"不接近"含义的 规定,本实施例具体同上述"条件二"中所述,故界限X范围为:20〈X〈65516即可。程序中实 际采用X = 32768 ;
[0070] d)专对定时器溢出中断程序短时开、关中断(其间隔条件同a));
[0071] e)如果 V = 0 则:{令 V = 1 ;令 vbak 减 1 ;}。
【权利要求】
1.用测周法测量频率时定时器时序交错问题的处理方法,其特征在于:该方法与具体 硬件结构有关,有如下三种情况: 情况(1):如果定时器是多级级联的,且高位、低位定时器均需由系统直接读取,定义 多级定时器最低位定时器为低位定时器,其余定时器为高位定时器,则该方法包括如下步 骤: a) 读取高位定时器; b) 读取低位定时器; c) 如果低位定时器读取值小于一个界限X,则重读高位;可任选一个既不接近零,又不 接近低位定时器满量程的值作为X,其中,所述"不接近零"含义为:X > a,a为不小于(m - ma)且小于低位定时器量程之半的一个值,所述"不接近低位定时器满量程"含义为3<满 量程一 b,b为不小于(mb - m)且小于低位定时器量程之半的一个值,这里,定义时间数以 低位定时器的计时单位度量,m为此次读取低位的时刻,ma为此前最近一次开始读取高位 定时器的时刻,mb为接下去假如执行"则重读高位"的话,读取完高位的时刻; 情况(2):如果定时器是多级级联的,且低位定时器具有硬件捕获功能,而高位定时器 需由系统直接读取,则该方法包括如下步骤: a) 取捕获值作为此次定时值的低位,此一步骤也可以移到后面用到此次定时值的低位 之前的任意时刻; b) 读取高位定时器,暂时作为此次定时值的高位; c) 再读低位定时器,采用以下条件之一作判断,如果满足该条件,则继续执行d)、e), 否则结束; 条件一:低位定时器读取值小于捕获值; 条件二:捕获值接近于满量程且定时器低位接近零,所述"接近"含义为:两个对象之 差的绝对值小于a,其中a为不小于(m - ma)且小于低位定时器量程之半的一个值,这里, 定义时间数以低位定时器的计时单位度量,m为此次读取定时器低位的时刻,ma为捕获发 生时刻; 条件三:捕获值不小于X且低位定时器小于X,可任选一个既不接近零,又不接近低位 定时器满量程的值作为X,所述"不接近"含义为:两个对象之差的绝对值大于a,其中a的 定义同上述条件二; d) 重读高位定时器; e) 改取d)的结果减1后,作为此次定时值的高位; 情况(3):如果定时器具有硬件捕获功能,且定时器记满溢出时可以产生中断,通常可 设一个变量V记录两次捕获中断之间定时器的溢出次数,在定时器溢出中断服务程序中使 V增量计数;定时器溢出中断程序和捕获中断程序的执行期间均已关中断;则对定时器的 读取动作可以安排在捕获中断中,定时器时序交错问题的处理方法包括如下步骤(其中对 捕获值作为此次定时值的读取可以放在程序中用到该值之前任何时候): a) 专对定时器溢出中断程序短时开、关中断,开、关中断之间隔须保证此时如有已经挂 号的定时器溢出中断则一定能够响应执行; b) 令vbak = V,再令V = 0 ;其中,变量V为记录两次捕获中断之间定时器的溢出次 数,该次数在定时器溢出中断中统计。变量vbak是变量V的临时备份,用于本次对定时器 的读取动作完成后对周期/频率量计算处理中;而变量V本身则为下次统计溢出次数做好 准备; c) 再读定时器当时值,采用以下条件之一作判断,如果满足该条件,则继续执行d)、 e),否则结束: 条件一:定时器当时值小于捕获值; 条件二:捕获值接近于满量程且定时器当时值接近于〇,所述"接近"含义为:两个对象 之差的绝对值小于a,其中a为不小于(m - ma)且小于定时器量程之半的一个值,这里,定 义时间数以定时器的计时单位度量,m为此次读取定时器的时刻,ma为捕获发生时刻; 条件三:捕获值不小于X且定时器当时值小于X,可任选一个既不接近零,又不接近定 时器满量程的值作为X,所述"不接近"含义为:两个对象之差的绝对值大于a,其中a的定 义同上述条件二; d) 专对定时器溢出中断程序短时开、关中断(其间隔条件同a)); e) 如果 V = 0 则:{令 V = 1 ;令 vbak 减 1 ;}。
【文档编号】G06F11/22GK104090830SQ201410312715
【公开日】2014年10月8日 申请日期:2014年7月2日 优先权日:2014年7月2日
【发明者】郝立中, 龚新平, 许奉亮, 燕洁静, 周彩霞, 朱旭 申请人:西安航空动力控制科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1