发新帖我要提问
12
返回列表
打印

如何用stm32实现高精度测频?

[复制链接]
楼主: engineer007
手机看帖
扫描二维码
随时随地手机跟帖
21
engineer007|  楼主 | 2010-10-29 10:48 | 只看该作者 回帖奖励 |倒序浏览
提高51单片机的晶振频率,按0.2uS时钟周期来测的话,要测20ms(即50Hz)时间的话,还是能保证这个精度的,即使有0.8uS的误差,也能达到0.004%的误差;
TO 香主: 50KHz 按1000分频,不就50Hz;
各位大侠,还是帮俺考虑下STM32问题吧

使用特权

评论回复
22
香水城| | 2010-10-29 12:41 | 只看该作者
50kHz按1000分频是50Hz,那么49.998kHz按1000分频得到49.998Hz,你怎么测量得出来呢?

请你先回答我的问题。

使用特权

评论回复
23
engineer007|  楼主 | 2010-10-29 13:16 | 只看该作者
50Hz能测出来,49.998Hz也能测出;:)
49.998Hz即20.0008mS; 而定时器的时钟为0.2uS;有跳码但能测出去;
低频测周嘛,频率越低,精度越高喽;
香主,要说话算话,我已回答你的问题,那你也要解决我的燃眉之急呀 :lol

使用特权

评论回复
24
IJK| | 2010-10-29 13:36 | 只看该作者
感觉LZ的限定条件太苛刻。软件在一定程度上可以替代硬件,但不见得能全部替代。LZ的例子来说,用STM32可以减少一部分 分频电路,但不能全部不用。

使用特权

评论回复
25
engineer007|  楼主 | 2010-10-29 14:14 | 只看该作者
但我感觉STM32 的定时器硬件功能很强大呀,能否用两个定时器,一个分频而另一个测频率;

使用特权

评论回复
26
IJK| | 2010-10-29 14:45 | 只看该作者
但我感觉STM32 的定时器硬件功能很强大呀,能否用两个定时器,一个分频而另一个测频率;
engineer007 发表于 2010-10-29 14:14


有道理,值得一试

使用特权

评论回复
27
香水城| | 2010-10-29 15:20 | 只看该作者
50Hz能测出来,49.998Hz也能测出;:)
49.998Hz即20.0008mS; 而定时器的时钟为0.2uS;有跳码但能测出去;
低频测周嘛,频率越低,精度越高喽;
香主,要说话算话,我已回答你的问题,那你也要解决我的燃眉之急呀 :lol ...
engineer007 发表于 2010-10-29 13:16


现在我明白了,你不是要在一个周期内就得到结果,可以是在1000个周期甚至更长时间内,只要有个平均值就可以,是这样吗?

使用特权

评论回复
28
香水城| | 2010-10-29 17:06 | 只看该作者
但我感觉STM32 的定时器硬件功能很强大呀,能否用两个定时器,一个分频而另一个测频率;
engineer007 发表于 2010-10-29 14:14


这样可以。

可以使用定时器的主从方式实现。假定定时器x是主,定时器y是从。

1)把输入信号作为外部时钟送到定时器x的外部时钟输入引脚TIMx_ETR;
2)假如要做100分频,就在定时器x的任意一个通道使用系数100进行输出比较;配置这个通道在每次比较成功时产生一个中断;
3)把这个通道的输出通过级联作为定时器y的控制输入,定时器y用这个信号作为计数器的使能信号,启动计数器计数;
4)在定时器y开始计数后,在每次定时器y的更新(溢出)中断程序中记录下中断次数
5)在下次定时器x的输出比较中断时,读出定时器y的计数器的内容,在结合定时器y的更新中断次数,就可以算出定时器x的两次输出比较的间隔,既此可以算出输入到定时器x的信号频率。

使用特权

评论回复
29
engineer007|  楼主 | 2010-11-1 11:12 | 只看该作者
做了实验,能实现要求。感谢万能的STM32 , 阿门!

使用特权

评论回复
30
香水城| | 2010-11-1 11:25 | 只看该作者
做了实验,能实现要求。感谢万能的STM32 , 阿门!
engineer007 发表于 2010-11-1 11:12


楼主不妨把你的实验程序贴出来,让大家分享一下。

使用特权

评论回复
31
engineer007|  楼主 | 2010-11-1 15:18 | 只看该作者
不好意思,香主,公司里对所有的图文文件进行了加密处理,一旦打开过就无法进行拷贝复制了;不然肯定贴出来:(

使用特权

评论回复
32
香水城| | 2010-11-1 16:04 | 只看该作者
不好意思,香主,公司里对所有的图文文件进行了加密处理,一旦打开过就无法进行拷贝复制了;不然肯定贴出来:(
engineer007 发表于 2010-11-1 15:18


哈哈,不强求的;能谈点体会就可以了,:lol

使用特权

评论回复
33
selina1983| | 2011-6-10 15:40 | 只看该作者
怎么实现高精度检测频率啊

使用特权

评论回复
34
fenjoy| | 2012-8-9 15:42 | 只看该作者
mark

使用特权

评论回复
35
lllaaa| | 2012-8-10 17:00 | 只看该作者
如果不求占空比。
把tim1时钟源设置为从引脚输入的待测信号。用另一个tim定时读tim1数值。差值除以间隔就是频率

我试过到36M是没问题的

使用特权

评论回复
36
斯诺| | 2014-4-2 16:41 | 只看该作者
香水城 发表于 2010-10-28 22:10
请问50kHz的信号,你使用什么分频系数,将频率降至1~50Hz之间?

再请问49.998kHz的信号,你使用什么分频 ...

香主,PWM输入捕获中,如何根据要测的信号频率和周期计算单片机需要的主频?例如我要测1~50k HZ .精度千分之三,这单片机主频要求多高?

使用特权

评论回复
37
flwbet| | 2014-9-24 17:55 | 只看该作者
香水城 发表于 2010-10-26 17:18
1)请说明你要求的频率范围,不要说是1Hz~1MHz,
因为0.004%对不同的频率意味着不同的数值。

你好,我这边在用STM32进行RTC校准,使用方法如下:使用TIM5通道4的输入捕获功能来测量HSE(32768Hz),TIM5的时钟配置为外部触发模式1,TIM5的时钟是20M(0.9ppm)的高精度有源晶振产生,连接在TIM5的通道1上。程序设计采用常用的输入捕获测频法,通过两次输入捕获中断,纪录相应的CNT值,来进行频率的求解。测试发现,测得的LSE频率为32768.59Hz(偏差较大),大约偏差为18ppm。而我用RTC_AF1输出1Hz信号,与GPS的1PPS信号比较,测试2个小时,发现大约延时为8ms,计算得到的偏差大约为1.1ppm。因为系统对RTC时间精度较高,所以所选RTC晶振精度较高(大约3ppm),这边想问下是不是我的测试方法有问题还是什么原因,为什么测出的频率偏差这么大,如果我用测得的偏差去校准RTC,不是会变的更差?使用示波器对20MHz时钟信号进行测试,波形较好,频率也很精确。希望大家帮忙想下,谢谢啦!也可以给我发下邮件:liangwei.fang@boundarytech.cn。多谢!

使用特权

评论回复
38
hustjitiejun| | 2014-10-4 12:14 | 只看该作者
这个可以用测量周期的方法,等精度频率计的方法即可;这个精度要求并不高

使用特权

评论回复
39
周董| | 2014-10-5 23:33 | 只看该作者
,0.004%就是 万分之0.4,一般的晶振 误差约万分之1,,确实啊!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则