OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10294|回复: 14

利用单片机测量频率的方法:

[复制链接]

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
发表于 2012-12-24 17:45:53 | 显示全部楼层 |阅读模式
利用单片机测量频率的方法,本人以前有用过以下两种方法:
1,利用外部中断+定时器。
2,单单利用TIME的输入捕获功能。
请教一下各位,还有没有其它的方法,另外如果有做过项目的可否给点建议,哪一种更可靠,准确?谢谢。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-24 18:27:57 | 显示全部楼层
定时器有个外部计时模式,可以测很高的频率,但是测低频有点萎
回复 支持 反对

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
 楼主| 发表于 2012-12-25 08:11:27 | 显示全部楼层
谢谢楼上的,“有点萎”是什么意思呢?
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-25 08:54:33 | 显示全部楼层
回复【3楼】螃蟹爱虫:
---------------------------------
就是测低频有点不准。。。。呵呵,跟萎了一样
回复 支持 反对

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
 楼主| 发表于 2012-12-25 10:27:32 | 显示全部楼层
回复【4楼】lsj9383:
回复【3楼】螃蟹爱虫: --------------------------------- 就是测低频有点不准。。。。呵呵,跟萎了一样
---------------------------------
这样的话,是不是还是我说的上面的方法测量低频(几十HZ的)准一点吧。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-25 11:08:22 | 显示全部楼层
回复【5楼】螃蟹爱虫:
---------------------------------
嗯,但是上面的方法测不到上MHz。
用外部计数模式的话,测到10多MHz(不知道可以到多少,我的函数发生器只有12MHz最大)
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-25 11:10:02 | 显示全部楼层
回复【5楼】螃蟹爱虫:
---------------------------------
输入捕获测频率我以前做过,不知道是不是我程序没写好,测的频率很低,才几百Hz。
外部中断+定时器可以测到100KHz-200KHz我记得,具体的忘了,
只有用外部计数我可以测到10MHz
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-12-25 11:16:58 | 显示全部楼层
进入中断是要有现场保护工作的, (保守估计)至少要损失十个时钟周期在保护和恢复上面, 这些硬件的东西, 要求高了让硬件去做最合适了, 定时器是个不错的选择. 低频的时候可以提高检测周期, 这个是可以用软件检测到的
https://github.com/roxma
回复 支持 反对

使用道具 举报

6

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2011-6-25
在线时间
1 小时
发表于 2012-12-28 01:05:22 | 显示全部楼层
有两种方法测频率,一种是周期测频法,一种是频率计数法:
周期测频法要求有参考时钟,通过对一个或者几个周期信号内参考时钟的计数来测量;
频率计数法就是单位时间内测出被测信号的改变次数,从而得到频率。
第一种方法的精度与参考时钟的速度有关,速度越快精度越高,第二种的精度跟所取的单位时间有关,时间越长,精度越高。所以前者适合测低频,后者适合测高频。
所以要想测量准确就得看你所测信号的频率范围了。
你也可以结合这两者的优势,实现互补。
需要学得东西太多
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-28 09:18:13 | 显示全部楼层
回复【9楼】竹叶青:
---------------------------------
这两个方法对单片机性能的依赖性比较大啊。
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-12-28 09:34:02 | 显示全部楼层
开两个定时器,一个用外部脉冲计数,一个内部时钟计数,内部时钟计数那个用作时间基准,取2-3秒时间,然后和截获的脉冲数对比,用脉冲数除以时间数,即可得到频率,例如你一秒内截获了1000脉冲,那么频率就是1kHz了,问题是,这方法,如果脉冲宽度大于2秒,以及脉冲频率小于0.5Hz的话,估计会测不准,还有频率太高也测不准,因为STM32的定时器的计数寄存器是有限位数的,你如果砸一个好几个G的高频上去,估计就绝对不准了。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

6

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2011-6-25
在线时间
1 小时
发表于 2012-12-28 20:02:29 | 显示全部楼层
回复【10楼】lsj9383:
---------------------------------
如果频率足够大,可以外加移位寄存器,分频后再测频,也可以把STM32的定时器串起来32位定时器应该能满足大部分要求了
需要学得东西太多
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2012-12-28
在线时间
5 小时
发表于 2012-12-28 20:40:42 | 显示全部楼层
回复【楼主位】螃蟹爱虫:
---------------------------------
利用等精度测频法,测出来的比较准确。定时器的pWM输出一个比较高的标准信号,在用这个标准信号测量被测信号!!!
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2012-12-28
在线时间
5 小时
发表于 2012-12-28 20:41:37 | 显示全部楼层
回复【楼主位】螃蟹爱虫:
---------------------------------
老美生产的石英压力计就是通过这种方法测量!!!
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2015-5-31
在线时间
3 小时
发表于 2015-8-13 11:21:56 | 显示全部楼层
回复【6楼】lsj9383:
---------------------------------
精度呢?10M的时候误差多少?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 02:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表