CN103558454B - 一种脉冲输入频率测量方法 - Google Patents
一种脉冲输入频率测量方法 Download PDFInfo
- Publication number
- CN103558454B CN103558454B CN201310545870.2A CN201310545870A CN103558454B CN 103558454 B CN103558454 B CN 103558454B CN 201310545870 A CN201310545870 A CN 201310545870A CN 103558454 B CN103558454 B CN 103558454B
- Authority
- CN
- China
- Prior art keywords
- pulse
- frequency
- array
- input
- sit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Measuring Frequencies, Analyzing Spectra (AREA)
Abstract
本发明公开一种脉冲输入频率测量方法,用单片机接收到外部输入的脉冲信号,读取单位时间的脉冲个数N1,根据脉冲个数N1的多少自动调整捕捉脉冲频率的周期时间,并根据输入脉冲个数N1的不同采用不同长度的有效数组长度L1,从而能精确捕捉脉冲输入的频率。本发明可很好解决单片机资源紧张且CPU资源占用率较高的局限,采用本方法不用进入脉冲捕捉的中断,很好的避免高速脉冲频繁进入脉冲捕捉中断的问题。本方法应用于变频器的脉冲输入频率的调速功能,实际应用效果稳定可靠,精度高,很好的满足应用要求。
Description
技术领域
本发明涉及工业测控技术领域,具体涉及一种基于单片机的脉冲输入频率测量方法。
背景技术
在工控系统中,经常需要测量各种脉冲输入信号的频率,例如通过测定变频器的脉冲输入频率来实现调速功能。目前,单片机常用的脉冲输入频率测量方法有测频法、测周法、多周期同步法等。测频法相对测量时间较长,主要适用于高频测量;测周相对测量速度快,主要应用于低频测量,但其存在一个测量时钟周期的固有误差,影响测试精度;多周期同步法测试精度相对较高,但是测试实时性随之降低。近年来,借助于嵌入式技术的不断发展,模拟内插值法、游标法、相位补偿法等测量方法不断涌现,使测试精度不断提高,但很多测量方法的测试原理实现复杂且占用系统资源较高。行业内迫切需要对现有脉冲输入频率测量方法进行革新,以实现更高效、更精确的测控。
发明内容
针对现有脉冲输入频率测量方法存在的上述缺陷,本发明提供一种精度高、占用系统硬件资源少、系统软件利用率高、并能很好兼顾高频和低频的脉冲输入频率测量方法。
本发明的技术方案如下:
一种脉冲输入频率测量方法,包括以下步骤:
步骤一:将测定的输入脉冲频率范围划分多个连续的频率区间,将这些频率区间按照频率从高到低的顺序设为区间1,区间2,…,区间n;为所述每一频率区间设定相应的周期时间,将这些周期时间以单片机内部定时器的基准时间的计数个数表示,对应设为计数个数t1,计数个数t2,…,计数个数tn;根据所述频率区间及周期时间,计算得到每一频率区间在对应周期时间内的脉冲计数个数的范围,将这些脉冲计数个数的范围对应设为范围1,范围2,…,范围n;
步骤二:设定单片机的定时器,用外部脉冲输入作为该定时器计数时钟源,采集输入脉冲的个数,在中断优先级较高的定时器中断中计时;当到达计数个数t1时,读取捕捉到的脉冲的个数,如果读取到的脉冲个数在范围1内,则将读取的计数个数和脉冲个数分别保存在tN和N1中,并将频率更新标志置起;如果读取到的脉冲个数不在范围1内,则将读取的周期时间延长为计数个数t2;当到达计数个数t2时,读取采集到的脉冲的个数,并以上述同样的方式通过判断脉冲个数的多少决定是否延长读取的周期时间至计数个数t3;如不延长,则将读取的计数个数和脉冲个数分别保存在tN和N1中,并将频率更新标志置起;否则,继续延长读取的周期时间;依次类推,直至读取的周期时间延长至计数个数tn;
步骤三:定义N1_befor为当前N1的前一次的N1值;定义L1为N1=N1_befor时有效数组长度;定义f为输入脉冲频率值;定义Pluse_Array[]为用来存储捕捉到脉冲个数N1的数组;定义L1_sit为当前N1将要存放在数组Pluse_Array[]中的位置;定义L1_sit%L1为最早存储N1数据的位置;定义flag=1为L1_sit>L1时的标志;定义sum为当前有效长度为L1长度内元素之和;定义有效数组长度L1=4000/tN;
若N1=N1_befor,且L1_sit>L1时,flag为1,否则flag=0;当flag为0时,直接计算脉冲输入的频率f=(4000/tN)*N1,并保存当前N1到Pluse_Array[L1_sit]处;若flag为1,计算当前数组L1长度内的元素之和sum,sum=当前数组内L1个元素之和sum+N1值-L1_sit%L1位置的值,并将当前N1值保存在Pluse_Array[L1_sit%L1]处,覆盖原来的Pluse_Array[L1_sit%L1]的值,运算之后的sum值即是当前1秒内捕捉到输入脉冲的个数,即输入脉冲的频率值f。
本发明的有益技术效果是:
一、本发明捕捉到的脉冲频率的精度高,实际用信号发生器作为外部脉冲信号源,300KHz误差脉冲个数只有1个。
二、本发明占用的系统硬件资源少,输入脉冲的捕捉只需要一个定时器。
三、本发明的系统软件利用率高,不用因为脉冲的输入捕捉而进中断。
四、本发明计时的定时器通常不用单独设定一个定时器,只用在优先级最高的定时器中断中判断间隔时间t1。
五、本发明能很好兼顾测量高频和低频的脉冲信号,捕捉脉冲频宽高,实测最高频率远大于300KHz(且精度很好)。
附图说明
图1是脉冲输入捕捉时间根据脉冲频率调整的流程图。
图2是根据计数个数tN和脉冲个数N1计算出对应脉冲频率的流程图。
具体实施方式
下面结合附图对本发明的具体实施方式做进一步说明。
本发明用单片机接收到外部输入的脉冲信号,读取单位时间的脉冲个数N1,根据脉冲个数N1的多少自动调整捕捉脉冲频率的周期时间,并根据输入脉冲个数N1的不同采用不同长度的有效数组长度L1,从而能精确捕捉脉冲输入的频率。具体流程如下:
(1)将测定的输入脉冲频率范围划分多个连续的频率区间,将这些频率区间按照频率从高到低的顺序设为区间1,区间2,…,区间n;为每一频率区间设定相应的周期时间,将这些周期时间以单片机内部定时器的基准时间的计数个数表示,对应设为计数个数t1,计数个数t2,…,计数个数tn;根据频率区间及周期时间,计算得到每一频率区间在对应周期时间内的脉冲计数个数的范围,将这些脉冲计数个数的范围对应设为范围1,范围2,…,范围n;
(2)设定单片机的一个定时器,用外部脉冲输入作为该定时器计数时钟源(通常单片机的计数时钟源设定外部晶振时钟经过PLL电路后作为时钟源,而经过PLL电路后频率一般非常高,可到几十M到几百MHz),用来采集输入脉冲的个数,在中断优先级较高的定时器中断中计时,当到达计数个数t1时,读取捕捉脉冲的个数,如果读取到的脉冲个数在范围1内,说明输入的脉冲频率比较高,则保存此读取的计数个数tN和脉冲个数N1。如果读取到的脉冲个数不在范围1内,说明输入的脉冲的频率比较低,则读取脉冲个数的周期时间延长为计数个数t2,当计数个数t2时间到时,再读取脉冲个数判断并判断个数的多少,再决定是否延长读取时间至计数个数t3,如不延长,则将读取的计数个数和脉冲个数分别保存在tN和N1中,并将频率更新标志置起,并清除计数个数。否则,继续延长读取的周期时间,直至延长至计数个数tn。在后续计算脉冲频率流程中,根据tN和N1值计算出输入脉冲的频率,从而能有效的精确测量到高速和低速脉冲的频率。
(3)在由周期内的计数个数tN和周期内的脉冲个数N1转换为脉冲频率值时,也根据不同的情况采用不同的脉冲频率换算方式,其具体流程为:
定义:
1:定义N1_befor为当前N1的前一次的N1值。
2:定义L1为N1=N1_befor时有效数组长度。
3:定义f为输入脉冲频率值。
4:定义Pluse_Array[]为用来存储捕捉到脉冲个数N1的数组。
5:定义L1_sit为当前N1将要存放在数组Pluse_Array[]中的位置。
6:定义L1_sit%L1为最早存储N1数据的位置。
7:定义flag=1为L1_sit>L1时的标志。
8:定义sum为当前有效长度为L1长度内元素之和。
有效数组长度L1=4000/tN。当tN较小时(对应的脉冲输入频率较高),其对应的有效数组长度L1就长;当tN较大时(对应的脉冲输入频率较低),其对应的有效数组长度L1就短。
若N1=N1_befor,且L1_sit>L1时,flag为1,否则flag=0。当flag为0时,直接计算脉冲输入的频率f=(4000/tN)*N1,并保存当前N1到Pluse_Array[L1_sit]处。若flag为1,计算当前数组L1长度内的元素之和sum,其sum=当前数组内L1个元素之和sum+N1值-(L1_sit%L1位置的值),并将当前N1值保存在Pluse_Array[L1_sit%L1]处,覆盖原来的Pluse_Array[L1_sit%L1]的值,此处运算之后的sum值即是当前1秒内捕捉到输入脉冲的个数,即输入脉冲的频率值f。
图1示出了上述步骤(2)的流程。如图1所示,设定当输入脉冲频率为1kHz~32kHz时,为100ms更新一次;当输入脉冲频率为10Hz~1kHz时,为500ms更新一次;当输入脉冲频率为0~10Hz时,为1s更新一次。
图2示出了上述步骤(3)的流程。如图2所示,根据脉冲计数周期时间的计数个数tN和脉冲个数N1计算出对应频率值。
如图1、图2所示,运行方式为:在图1中,设定定时器T1的计数时钟为外部输入作为定时器T1的计数时钟,选取程序的中断优先级最高的定时器250us中断里面计数,当计数到计数个数t1=400时,表示计数周期时间到,周期时间为250us*400=100ms,100ms时读取定时器捕捉的脉冲个数,如果所采集的个数比较多,就保存当前的脉冲个数至N1和计数个数至tN,并在脉冲频率计算的程序中由N1和tN的值根据相应的计算方式转换为输入脉冲的频率值;当输入脉冲频率比较低时,在100ms里面就会发现采集的脉冲个数比较少,就继续计时,等到时间延长至计数个数t2=2000时(周期时间为250us*2000=500ms),再读取采集的脉冲个数,保存输入脉冲个数至N1和计数个数至tN。同理,当在500ms周期时间里面发现采集的脉冲个数比较小,就延长时间为计数个数t3=4000时(周期时间为250us*4000=1s)来读取采集到的脉冲个数。在图2中,在转换为频率时,根据不同的采集周期时间的计数个数tN采用不同的方式转换为频率值。每次保存脉冲个数N1和计数个数tN后,都将脉冲个数寄存器和250us的计数周期的计数个数寄存器清0,以便下次的判断和脉冲个数的采集。
以下通过一个实施例对本发明的运行方式进行详细说明:
在该实施例中,设测定输入脉冲频率范围为0hz~32Khz,则设定0Hz~10Hz为每1s保存一次脉冲个数(对应250us个数计数值为4000),设定10Hz~1kHz为每500ms保存一次脉冲个数(对应250us个数计数值为2000),设定1kHz~32KHz为每100ms保存一次脉冲个数(对应250us个数计数值为400),如表1所示。上述设定仅为参考,在其他实施例中,可根据实际应用,考量脉冲个数采集的周期时间。
表1:
当外部输入的脉冲频率为12335Hz,则每次一进入到250us中断函数,250us计数加1并判断是否250us计数是否到达400,若250us的个数计数到达400,就读取捕捉到的脉冲个数寄存器的数据,如第一次采集个数为1233(如表2所示采集的数据),1233在100ms采集的数据范围内,则N1=1233,t1=400,此时有效数组长度为4000/400=10,此时L1_sit值为0(L1_sit从0开始计数,每次保存N1和t1时,L1_sit都加1),将保存的数据保存在数组的0号位置(L1_sit%10),且将t1赋值给N1_befor。第二次采集数据N1=1233,t1=N1_befor=400,则此时L1_sit=1,将此数据保存在1号位置。第三次的数据保存在2号位置,此时L1_sit=2。如此下去,第10次采集的数据保存在9号位置,此时0~9号位置的数据都已经填满,且L1_sit=9,0~9号里面数据之和sum就是输入脉冲的频率,且将flag置1。当第11次采集到的数据时,因为flag=1,L1_sit=(++L1_sit%10)=(10%10)=0,所以第11次采集的数据N1就应该放在0号位置,那么此时最近的1s钟内采集的脉冲个数就是上一次的10次数据之和+第11次的数据-第1次采集的数据。如此反复。
前10个采集到的数据(0~9号)之和是12335,后一个计数周期1、2、3……9、0号共10个共12335+1234-1233=12336个,第三个计数周期2、3、4……9、0、1号共10个其和为12336+1233-1234=12335个,依次类推。
表2:
当输入的脉冲信号为650Hz,则在100ms里面读取到的个数大约为65,数值比较小,测试就不保存数据到N1和t1,等到500ms的时候,在读取这500ms之间内捕捉脉冲的个数,大约为325个,此数值在设定的脉冲频宽范围内,此时就保存捕捉的脉冲个数325到N1,250us的计数个数2000保存在t1,此时根据2000就变化有效数组长度L1=(4000/2000)=2。
当输入脉冲频率为12335hz,而后频率又变为650hz,则当由12335hz变为650时候,250us里面计数到400,发现捕捉的频率个数不再是12335hz的区间,捕捉到的频率个数比较小,就延长读取脉冲个数的时间,等到250us个数计数到2000时,读取脉冲个数范围在所要求的范围内,则保存当前计数个数,此时检测到t1不等于N1_befor,则flag=0,L1=0,此时采用f=(4000/t1)*N1来计算输入脉冲的频率。等到t1=N1_befor且L1数组长度被填满时,此时有效数组长度的数据之和就是输入脉冲的频率。
综上所述,通过本方法可很好的解决单片机资源紧张且CPU资源占用率较高的局限,采用本方法不用进入脉冲捕捉的中断,很好的避免高速脉冲频繁进入脉冲捕捉中断的问题。本方法应用于变频器的脉冲输入频率的调速功能,实际应用效果稳定可靠,精度高,很好的满足应用要求。
以上所述的仅是本发明的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的基本构思的前提下直接导出或联想到的其他改进和变化,均应认为包含在本发明的保护范围之内。
Claims (1)
1.一种脉冲输入频率测量方法,其特征在于,包括以下步骤:
步骤一:将测定的输入脉冲频率范围划分多个连续的频率区间,将这些频率区间按照频率从高到低的顺序设为区间1,区间2,…,区间n;为所述每一频率区间设定相应的周期时间,将这些周期时间以单片机内部定时器的基准时间的计数个数表示,对应设为计数个数t1,计数个数t2,…,计数个数tn;根据所述频率区间及周期时间,计算得到每一频率区间在对应周期时间内的脉冲计数个数的范围,将这些脉冲计数个数的范围对应设为范围1,范围2,…,范围n;
步骤二:设定单片机的定时器,用外部脉冲输入作为该定时器计数时钟源,采集输入脉冲的个数,在中断优先级较高的定时器中断中计时;当到达计数个数t1时,读取捕捉到的脉冲的个数,如果读取到的脉冲个数在范围1内,则将读取的计数个数和脉冲个数的值分别保存在变量tN和N1中,并将频率更新标志置起;如果读取到的脉冲个数不在范围1内,则将读取的周期时间延长为计数个数t2;当到达计数个数t2时,读取采集到的脉冲的个数,并以上述同样的方式通过判断脉冲个数的多少决定是否延长读取的周期时间至计数个数t3;如不延长,则将读取的计数个数和脉冲个数的值分别保存在变量tN和N1中,并将频率更新标志置起;否则,继续延长读取的周期时间;依次类推,直至读取的周期时间延长至计数个数tn;
步骤三:定义N1_befor为当前N1的前一次的N1值;定义L1为N1=N1_befor时有效数组长度;定义f为输入脉冲频率值;定义Pluse_Array[]为用来存储捕捉到脉冲个数N1的数组;定义L1_sit为当前N1将要存放在数组Pluse_Array[]中的位置;定义L1_sit%L1为最早存储N1数据的位置;定义flag=1为L1_sit>L1时的标志;定义sum为当前有效长度为L1长度内元素之和;定义有效数组长度L1=4000/tN;
若N1=N1_befor,且L1_sit>L1时,flag为1,否则flag=0;当flag为0时,直接计算脉冲输入的频率f=(4000/tN)*N1,并保存当前N1到Pluse_Array[L1_sit]处;若flag为1,计算当前数组L1长度内的元素之和sum,sum=当前数组内L1个元素之和sum+N1值-L1_sit%L1位置的值,并将当前N1值保存在Pluse_Array[L1_sit%L1]处,覆盖原来的Pluse_Array[L1_sit%L1]的值,运算之后的sum值即是当前1秒内捕捉到输入脉冲的个数,即输入脉冲的频率值f。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310545870.2A CN103558454B (zh) | 2013-11-06 | 2013-11-06 | 一种脉冲输入频率测量方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310545870.2A CN103558454B (zh) | 2013-11-06 | 2013-11-06 | 一种脉冲输入频率测量方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103558454A CN103558454A (zh) | 2014-02-05 |
CN103558454B true CN103558454B (zh) | 2016-01-20 |
Family
ID=50012756
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310545870.2A Active CN103558454B (zh) | 2013-11-06 | 2013-11-06 | 一种脉冲输入频率测量方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103558454B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108169557A (zh) * | 2017-11-24 | 2018-06-15 | 中核控制系统工程有限公司 | 一种高速脉冲量智能采集的实现方法 |
CN109188074B (zh) * | 2018-10-11 | 2020-11-06 | 钜泉光电科技(上海)股份有限公司 | 互检电路及方法、电流检测系统、电能计量系统及芯片 |
CN111122897B (zh) * | 2019-12-23 | 2021-01-05 | 无锡物联网创新中心有限公司 | 磁电式单锭检测系统中锭子转速的捕获方法及相关装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4929890A (en) * | 1986-08-11 | 1990-05-29 | Bell Microsensors, Inc. | System for obtaining digital outputs from multiple transducers |
CN101206235A (zh) * | 2006-12-22 | 2008-06-25 | 上海贝岭股份有限公司 | 一种单片机测量频率的方法 |
CN101401004A (zh) * | 2006-01-19 | 2009-04-01 | 米其林技术公司 | 询问谐振设备时减少搜索时间和提高搜索精度 |
CN101489811A (zh) * | 2006-05-18 | 2009-07-22 | 米其林研究和技术股份有限公司 | 通过直接物理连接询问saw的系统和方法 |
CN102879641A (zh) * | 2011-07-15 | 2013-01-16 | 亚旭电子科技(江苏)有限公司 | 频率量测方法及系统 |
JP2013145146A (ja) * | 2012-01-13 | 2013-07-25 | Hioki Ee Corp | 周波数測定装置および周波数測定方法 |
-
2013
- 2013-11-06 CN CN201310545870.2A patent/CN103558454B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4929890A (en) * | 1986-08-11 | 1990-05-29 | Bell Microsensors, Inc. | System for obtaining digital outputs from multiple transducers |
CN101401004A (zh) * | 2006-01-19 | 2009-04-01 | 米其林技术公司 | 询问谐振设备时减少搜索时间和提高搜索精度 |
CN101489811A (zh) * | 2006-05-18 | 2009-07-22 | 米其林研究和技术股份有限公司 | 通过直接物理连接询问saw的系统和方法 |
CN101206235A (zh) * | 2006-12-22 | 2008-06-25 | 上海贝岭股份有限公司 | 一种单片机测量频率的方法 |
CN102879641A (zh) * | 2011-07-15 | 2013-01-16 | 亚旭电子科技(江苏)有限公司 | 频率量测方法及系统 |
JP2013145146A (ja) * | 2012-01-13 | 2013-07-25 | Hioki Ee Corp | 周波数測定装置および周波数測定方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103558454A (zh) | 2014-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100575965C (zh) | 一种单片机测量频率的方法 | |
CN106154816B (zh) | 一种自动装置高精度守时方法 | |
CN105549379B (zh) | 一种基于高精度时间基准触发的同步测量装置及方法 | |
TWI598572B (zh) | 感測器以及將時間資訊與一感測器所檢出的測量資料作關聯的方法 | |
CN103941622B (zh) | 基于fpga的高精度秒脉冲倍频出采样脉冲的方法 | |
CN102128981B (zh) | 脉冲信号周期测量方法 | |
CN103558454B (zh) | 一种脉冲输入频率测量方法 | |
CN105245203B (zh) | 高精度低速时钟占空比检测系统及方法 | |
CN107314775B (zh) | 一种基于三轴加速度传感器的动态切换计算轴的计步方法 | |
CN103368676B (zh) | 一种基于周期性脉冲信号的异地数据同步采集方法及系统 | |
CN102928677A (zh) | 一种纳米级脉冲信号采集方法 | |
CN103048508B (zh) | 提高数字示波器触发水平精度的方法、装置及数字示波器 | |
JP2009175052A (ja) | 測定装置、測定方法および試験装置 | |
CN106645780A (zh) | 一种基于dsp的转速检测方法及系统 | |
US8224606B2 (en) | Measuring clock jitter | |
CN112558514A (zh) | 一种多设备硬件同步方法 | |
CN102792167B (zh) | 速度检测装置 | |
CN103631161A (zh) | 一种基于状态机的滤波方法 | |
KR20230008212A (ko) | 위상 검출 방법 및 이의 장치, 디바이스 | |
CN110471087A (zh) | 一种空间飞行器的时间漂移计算方法和系统 | |
CN105376041A (zh) | 异步串行数据采集装置以及异步串行数据采集方法 | |
CN202393904U (zh) | 一种用于电能计量装置的误差检验装置 | |
JP2014507887A (ja) | データ処理方法、データ処理システム及び関連する装置 | |
US20220187351A1 (en) | Waveform measuring method | |
US20130346022A1 (en) | Physical quantity measuring apparatus and physical quantity measuring method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |