xtaens 发表于 2011-6-1 10:01:05

马老师请教您书上输入捕捉功能测频的问题。。。。

马老师您好,我现在想把您书上用定时器1的输入捕捉功能测频的程序移植到M48上,ICC 7.22软件,外部8M晶振

有如下问题想请指点,我的想法是否正确:

1、因为我的是外部8M晶振(内部不分频),所以可以测得的外部方波频率为:125Hz----8KHz,8KHz----256KHz,计算如下

   晶振振动一下的时间:1/8M=0.125us

   125Hz 时间为:1/125=0.008s

   0.008s内计数的个数为:0.008s/0.125us=64000个<65535

   同理可得8KHz时计数器所计的个数:1/8K=0.125ms,0.125ms/0.125us=1000个<65535

   所以但周期时可测的频率为:125Hz----8KHz

   频率大于8KHz时采用测量64个周期:

   8KHz:64/8K=0.008s,0.008s/0.125us=64000个<65535

   256KHz:64/256K=0.00025s,0.00025s/0.125us=2000个<65535

   综上:可测的频率为:125Hz------256KHz

2、如果我换12M或更大的晶振的,是不是能测的频率就会跟高呢

   请马老师或高手指点

machao 发表于 2011-6-1 12:07:40

手上有我的书,我想学习的正确方法,不是懂一段代码,因为一段代码只是配合某种特定的情况下使用的。
关键是掌握方法和思路,学会自己根据实际情况,选择合适的方法。

你首先应该把实际的需要和指标定下来,然后才是考虑测试的方案和具体的参数等。

你实际需要测量频率的范围是多少?要求的精度是多少?

根据LZ位的帖子,好象范围是 125Hz-256KHz,那么精度呢?也就是测量误差(相对、绝对),后面的指标也是很重要的。比如测量125Hz频率,精度为+-5Hz与精度为+-0.1Hz,测量的方法就有区别的。

===============================================
下面讲一下基本的方法和思路。

首先测量频率采用的方法大的分成测频法和测周法。前者适合测量频率比较高的情况,后者适合测量频率底的情况。所谓的适合,就是说测量的精度好,测量更加正确和准确。

此外对于提高精度因素,应该从2个角度出发,定时器本身使用的计数脉冲和检测记录的脉冲个数。

定时器本身使用的计数脉冲也就是分辨率,这个计数脉冲的频率越高(周期越小),分辨率也越高,测量精度越好(不管是测频还是测周)。因此当系统时钟频率越高,就可以使用更高频率的计数时钟,进而提高测量的精度。定时器本身使用的计数脉冲周期,实际就是你测量精度的硬件决定的上限,这个是主要的。如果在这个基础上还要提高精度,就只能在软件方法上做文章了。

其实,检测记录的脉冲个数,就是软件上可以做文章的重要一点。数学上的理念就是多次测量取平均的方法。拿提到的捕捉测周法的例子分析:最基本的就是测量被测信号1个周期的长度(时间)
在我的例子中,频率低时采用测量被测信号1个周期的长度,频率高使采用测量被测信号64个周期的长度,这个就是取平均提高精度的。

我们用测量被测信号1个周期的长度为例,再看细节的分析:假定被测信号的频率不不变,下面2种方法,哪个精度好?

1。在被测信号1个周期中,T1计数值为20000个
2。提高T1计数频率1倍,那么同样在被测信号1个周期中,T1计数值就是40000个

那么哪个测量精度好?很明显,当然是第2种了。

此时LZ要说,使用第2种方法,被测频率下限就不能太低了,因为频率再低,T1超过65535溢出了。所以这个是矛盾,提高T1计数频率,提高了测量精度,但频率测量范围的下限上升了。因此你需要根据实际的情况进行选择的。

====================================================
LZ的计算,对于125hz没有问题。8K左右精度最低,因为只有1000个。建议在125Hz-256k之间分成4段,分段周期个数为1、32、64、128,具体频率分界点计算一下,能够使T1计数达到5000为好。


至于LZ的第2问题“如果我换12M或更大的晶振的,是不是能测的频率就会跟高呢”,解答如下:

1。换12M或更大的晶振,提高了测量精度,硬件的上限可以测量8M的频率,但你没有给出精度要求。
2。同样代码时,测量频率下限也提高了
3。对于高频率的测量,精度好的话,应该使用测频法。

所以要做一个频率计,测量频率范围大,精度要求比较高的话,应该:
1。使用最高的系统晶振,使用最高的计数时钟频率
2。分成2个大段,低段采用测周法,高段采用测频法,比如5Hz-250k,250k以上
3。在2个大段中,再分成几个小段,比如5hz-250k,采用捕捉,分成4段,分段周期个数为1、32、64、128

如果是对于小范围特定频率的测量,那就应该根据具体小的频率范围,专门考虑,使测量的精度达到最佳和平均

==========================================
没有那一种实际使用的频率测量的方法是万能的,都有一定的局限性。

xtaens 发表于 2011-6-1 12:43:29

回复【1楼】machao
-----------------------------------------------------------------------

“你实际需要测量频率的范围是多少?要求的精度是多少? ”,我就做一个小小的频率计,范围是 125Hz-256KHz,精度+-1Hz就行


O(∩_∩)O谢谢马老师的指点,我继续改我的程序吧

liu252799093 发表于 2011-7-14 10:32:00

mark
页: [1]
查看完整版本: 马老师请教您书上输入捕捉功能测频的问题。。。。