一种用测周法测量频率时,克服因软件对定时器的读取动作和定时器的进位、溢出,以及中断和捕获等动作的时序交错而可能产生的错误的方法。针对各种硬件背景,采用合理安排操作次序,以及逻辑判断的办法,避免在对定时器的正式读取操作中间,穿插发生有碍于结果正确性的定时器进位、溢出等事件,保证所得的当时定时值完全正确。
【技术实现步骤摘要】
用测周法测量频率时定时器时序交错问题的处理方法所属
本专利技术涉及一种用测周法测量频率时,避免因系统对定时器的读取动作和定时器的进位、溢出,以及中断和捕获等动作的时序交错而可能产生的错误的方法。
技术介绍
在基于微型计算机的工业控制系统中,对于频率量的测量,通常有直接测频法和测周法两种方法。其中测周法是测周期长度,其倒数代表频率,测周法在延时和精度方面优于直接测频法。但是测周法存在若干技术细节问题需要考虑。其中问题之一,就是读取定时器信息时,若干事件发生的时序交错问题。测周法的一般基本算法是:在每次频率信号的某个边沿,如上升沿时作以下操作:(1)从定时器读取此次边沿发生时的定时值;(2)将此次读得的定时值与上次中断的定时值相减,得到周期长度;(3)保留此次的定时值留作下次使用。这些操作可以编写在一个中断服务程序中,为便于叙述,以下均称其为“此次中断”。此基本算法的目的是求出周期长度,其中需要考虑时序交错问题的,有以下情况:(1)如果定时器字长不能一次读取,则需考虑系统对定时器高、低位的读取和定时器低位向高位进位之间的时序交错;(2)如果两次中断之间定时器可能溢出,则需考虑中断操作与定时器发生溢出之间的时序交错。这些情况处理不当时,误差不是发生在低位而是发生在高位,所以影响不小。这些问题,很多情况下可以回避。例如,如果我们待测的频率最低不低于某个界限,以致于所得周期长度不会溢出,我们就可以完全不管两次中断之间是否发生过定时器的溢出了。此时,如果两次中断期间定时器实际发生了溢出,那么在做上述减法时必然“不够减”,靠计算机运算器的天然借位(许多计算机语言中整数减法就具有此种天然借位),就可以得到正确的结果了。但在实际应用中,往往不能完全避免频率过低。很多应用中,频率过低时允许不得出准确结果,但是不允许出现大的误判,例如把“频率过低”误判为“频率过高”。也有的时候,要根据频率过低的程度来决定更改分频比、认定“频率达零”等等。此时,上述问题就无法回避了。也有的设计者,认为因此而产生的错误,虽然误差数值不小,但发生的概率很小,靠滤波就可以适当控制其危害,所以就忽略了这个问题。结果实现的系统,虽然大多数时间正常运行,但总有偶然出现的类似强干扰的波动。
技术实现思路
本专利技术的目的是:设计一种从定时器读取此次边沿发生时的定时值的操作次序及逻辑判断方法,以完全避免因系统对定时器的读取动作和定时器的进位、溢出,以及中断和捕获等动作的时序交错而可能产生的错误。本专利技术的技术方案是:用测周法测量频率时定时器时序交错问题的处理方法,该方法因与具体硬件结构有关,分情况叙述如下:情况(1):如果定时器是多级级联的,且高位、低位定时器均需由系统直接读取,定义多级定时器最低位定时器为低位定时器,其余定时器为高位定时器,则避免因时序交错而产生错误的关键在于:杜绝在对定时器的高、低位的正式读取动作之间发生进位。采用如下次序即可实现这种保证:a)读取高位定时器;b)读取低位定时器;c)如果低位定时器读取值小于一个界限X,则重读高位;可任选一个既不接近零,又不接近低位定时器满量程的值作为X,其中,所述“不接近零”含义为:X>a,a为不小于(m-ma)且小于低位定时器量程之半的一个值,所述“不接近低位定时器满量程”含义为:X<满量程-b,b为不小于(mb-m)且小于低位定时器量程之半的一个值,这里,定义时间数以低位定时器的计时单位度量,m为此次读取低位的时刻,ma为此前最近一次开始读取高位定时器的时刻,mb为接下去假如执行“则重读高位”的话,读取完高位的时刻。情况(2):如果定时器是多级级联的,且低位定时器具有硬件捕获功能,而高位定时器需由系统直接读取,则通常对定时器的读取动作可以安排在捕获中断中。若按照(1)中的原则,则此时中断中已经无法直接读取捕获之前的高位值,但可以通过逻辑判断确定。可采用次序:a)取捕获值作为此次定时值的低位,此一步骤也可以移到后面用到此次定时值的低位之前的任意时刻;b)读取高位定时器,暂时作为此次定时值的高位;c)再读低位定时器,采用以下条件之一作判断,如果满足该条件,则继续执行d)、e),否则结束;条件一:低位定时器读取值小于捕获值;条件二:捕获值接近于满量程且定时器低位接近零,所述“接近”含义为:两个对象之差的绝对值小于a,其中a为不小于(m-ma)且小于低位定时器量程之半的一个值,这里,定义时间数以低位定时器的计时单位度量,m为此次读取定时器低位的时刻,ma为捕获发生时刻;条件三:捕获值不小于X且低位定时器小于X,可任选一个既不接近零,又不接近低位定时器满量程的值作为X,所述“不接近”含义为:两个对象之差的绝对值大于a,其中a的定义同上述条件二;d)重读高位定时器;e)改取d)的结果减1后,作为此次定时值的高位。情况(3):如果定时器具有硬件捕获功能,且定时器记满溢出时可以产生中断,以便由软件作出相当于定时器向更高位进位的效果,则可以设一个变量V记录两次捕获中断之间定时器的溢出次数,在下面的计算处理中使用。通常,在定时器溢出中断服务程序中作:(1)如果V不超过限幅的界限,则令V增1;(2)根据V的值进行有关“频率过低”或“频率达零”等的判断;V在捕获中断中清零。而在捕获中断程序中执行相当于上文“
技术介绍
”中所述的“此次中断”的操作。设定时器溢出中断程序和捕获中断程序的执行期间均已关中断,那么为了避免因时序交错出现错误,相当于上述“此次中断”的操作的第一步“从定时器读取此次边沿发生时的定时值”,可以采用如下的次序实现(其中对捕获值作为此次定时值的读取可以放在程序中用到该值之前任何时候):a)专对定时器溢出中断程序短时开、关中断,开、关中断之间隔须保证此时如有已经挂号的定时器溢出中断则一定能够响应执行;b)令vbak=V,再令V=0;其中,变量V为记录两次捕获中断之间定时器的溢出次数,该次数在定时器溢出中断中统计。变量vbak是变量V的临时备份,用于本次对定时器的读取动作完成后对周期/频率量计算处理中;而变量V本身则为下次统计溢出次数做好准备;c)再读定时器当时值,采用以下条件之一作判断,如果满足该条件,则继续执行d)、e),否则结束:条件一:定时器当时值小于捕获值;条件二:捕获值接近于满量程且定时器当时值接近于0,所述“接近”含义为:两个对象之差的绝对值小于a,其中a为不小于(m-ma)且小于定时器量程之半的一个值,这里,定义时间数以定时器的计时单位度量,m为此次读取定时器的时刻,ma为捕获发生时刻;条件三:捕获值不小于X且定时器当时值小于X,可任选一个既不接近零,又不接近定时器满量程的值作为X,所述“不接近”含义为:两个对象之差的绝对值大于a,其中a的定义同上述条件二;d)专对定时器溢出中断程序短时开、关中断(其间隔条件同a));e)如果V=0则:{令V=1;令vbak减1;}。上述三种情况下操作的共同点是:确保:所得的定时器高位信息,以及如(3)中的vbak那样表示此前发生过定时器溢出次数的信息,实际上反映所获定时器低位值的时刻之前,它们理论上应有的值。本方法的有益效果是,可以完全避免因系统对定时器的读取动作和定时器的进位、溢出,以及中断和捕获等动作的时序交错而可能产生的错误。附图说明下面结合附图和实施例对本本文档来自技高网...
【技术保护点】
用测周法测量频率时定时器时序交错问题的处理方法,其特征在于:该方法与具体硬件结构有关,有如下三种情况:情况(1):如果定时器是多级级联的,且高位、低位定时器均需由系统直接读取,定义多级定时器最低位定时器为低位定时器,其余定时器为高位定时器,则该方法包括如下步骤:a)读取高位定时器;b)读取低位定时器;c)如果低位定时器读取值小于一个界限X,则重读高位;可任选一个既不接近零,又不接近低位定时器满量程的值作为X,其中,所述“不接近零”含义为:X>a,a为不小于(m-ma)且小于低位定时器量程之半的一个值,所述“不接近低位定时器满量程”含义为:X<满量程-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),否则结束:条件一:定时器当时值小于捕获值;条件二:捕获值接近于满量程且定时器当时值接近于0,所述“接近”含义为:两个对象之差的绝对值小于a,其中a为不小于(m-ma)且小于定时器量程之半的一个值,这里,定义时间数以定时器的计时单位度量,m为此次读取定时器的时刻,ma为捕获发生时刻;条件三:捕获值不小于X且定时器当时值小于X,可任选一个既不接近零,又不接近定时器满量程的值作为X,所述“不接近”含义为:两个对象之差的绝对值大于a,其中a的定义同上述条件二;d)专对定时器溢出中断程序短时开、关中断(其间隔条件同a));e)如果V=0则:{令V=1;令vbak减1;}。...
【技术特征摘要】
1.用测周法测量频率时定时器时序交错问题的处理方法,其特征在于:该方法与具体硬件结构有关,有如下三种情况:情况(1):如果定时器是多级级联的,且高位、低位定时器均需由系统直接读取,定义多级定时器最低位定时器为低位定时器,其余定时器为高位定时器,则该方法包括如下步骤:a)读取高位定时器;b)读取低位定时器;c)如果低位定时器读取值小于一个界限X,则重读高位;可任选一个既不接近零,又不接近低位定时器满量程的值作为X,其中,所述“不接近零”含义为:X>a,a为不小于(m-ma)且小于低位定时器量程之半的一个值,所述“不接近低位定时器满量程”含义为:X<满量程-b,b为不小于(mb-m)且小于低位定时器量程之半的一个值,这里,定义时间数以低位定时器的计时单位度量,m为此次读取低位的时刻,ma为此前最近一次开始读取高位定时器的时刻,mb为接下去假如执行“则重读高位”的话,读取完高位的时刻;情况(2):如果定时器是多级级联的,且低位定时器具有硬件捕获功能,而高位定时器需由系统直接读取,则该方法包括如下步骤:a)取捕获值作为此次定时值的低位,此一步骤也可以移到后面用到此次定时值的低位之前的任意时刻;b)读取高位定时器,暂时作为此次定时值的高位;c)再读低位定时器,采用以下条件之一作判断,如果满足该条件,则继续执行d)、e),否则结束;条件一:低位定时器读取值小于捕获值;条件二:捕获值接近于满量程且定时器低位接近零,所述“接近”含义为:两个对象之差的绝对值小于a,其中a为不小于(m-ma)且小于低位定时器量程之半的一个值,这里,定义时间数以低位定时器的计时单位度量,m为此次读取定时器低位的时刻,ma为捕获发生时刻;条件三:捕获值不小于X且低位定时器小于X,任选一个既不接近零,又不接近低位定时器满量程的值作为...
【专利技术属性】
技术研发人员:郝立中,龚新平,许奉亮,燕洁静,周彩霞,朱旭,
申请(专利权)人:西安航空动力控制科技有限公司,
类型:发明
国别省市:陕西;61
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。