使用 STM32 测量频率和占空比的几种方法

以前在本科时写的教程文章,主要是把自己当时参赛的方法拿出来做了个总结。

想当年天天水论坛好为人师,现在已经全面转向计算机视觉方向了,颇为感慨。不过,自己的理性选择,个中得失早就意料之中。塞翁失马,焉知非福?

原文链接:http://www.openedv.com/forum.php?mod=viewthread&tid=82594&extra=


【教程】使用STM32测量频率和占空比的几种方法(申请置酷!)


这几天在论坛上面解答了好几个询问 STM32 测量频率的贴子,觉得这种需求还是存在的(示波器、电机控制等等)。而简单搜索了一下论坛,这方面的贴子有但是不全。正好今年参加比赛做过这方面的题目(最后是一等奖嘿嘿),所以把我们当时尝试过的各种方案都列出来,方便以后大家使用,也是作为一个长期在论坛的潜水党对论坛的回报。

PS: 由于我们当时的题目除了测量频率之外,更麻烦的是测量占空比。而这两个的测量方法联系比较紧密,所以也一并把测量占空比的方法写出来。因为时间有限,所以并不能把所有思路都一一测试,只是写在下面作为参考,敬请谅解。

使用平台:官方 STM32F429DISCOVERY 开发板 180MHz 的主频,定时器频率 90MHz

相关题目:
1 )测量脉冲信号频率 f_O ,频率范围为 10Hz 2MHz ,测量误差的绝对值不大于 0.1% 。( 15 分)
2 )测量脉冲信号占空比 D ,测量范围为 10 %~ 90 %,测量误差的绝对值不大于 2% 。( 15 分)


思路一:外部中断
思路:这种方法是很容易想到的,而且对几乎所有 MCU 都适用(连 51 都可以)。方法也很简单,声明一个计数变量 TIM_cnt ,每次一个上升沿 / 下降沿就进入一次中断,对 TIM_cnt++ ,然后定时统计即可。如果需要占空比,那么就另外用一个定时器统计上升沿、下降沿之间的时间即可。

缺点:缺陷显而易见,当频率提高,将会频繁进入中断,占用大量时间。而当频率超过 100kHz 时,中断程序时间甚至将超过脉冲周期,产生巨大误差。同时更重要的是,想要测量的占空比由于受到中断程序影响,误差将越来越大。

总结 : 我们当时第一时间就把这个方案 PASS 了,没有相关代码(这个代码也很简单)。不过,该方法在频率较低( 10K 以下)时,可以拿来测量频率。在频率更低的情况下,可以拿来测占空比。


思路二: PWM 输入模式

思路:翻遍 ST 的参考手册,在定时器当中有这样一种模式:
总结 : 我们当时第一时间就把这个方案 PASS 了,没有相关代码(这个代码也很简单)。不过,该方法在频率较低( 10K 以下)时,可以拿来测量频率。在频率更低的情况下,可以拿来测占空比。


思路二: PWM 输入模式

思路:翻遍 ST 的参考手册,在定时器当中有这样一种模式:



简而言之,理论上,通过这种模式,可以用硬件直接测量出频率和占空比。当时我们发现这一模式时欢欣鼓舞,以为可以一步解决这一问题,代码如下:

void Tim2_PWMIC_Init(void)
{
       
回答: 在STM32中,有几种常用的方法可以用来测量频率。其中一种方法使用外部中断(低频)输入捕获模式,这种方法适用于低频信号的测量。另一种方法使用外部计数器模式,适用于高频信号的测量。\[2\]此外,还可以使用高端示波器来测量频率,通过高速采样一系列数据,然后进行频谱分析,例如快速傅里叶变换(FFT),从而获得频率信息。然而,需要注意的是,STM32的ADC采样频率有限,无法测量特别是高频频率。\[3\]因此,在选择测量频率方法时,需要根据具体的应用场景和信号频率范围来选择合适的方法。 #### 引用[.reference_title] - *1* [STM32信号频率](https://blog.csdn.net/sinat_22081411/article/details/117256776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [stm32 频率(1HZ—15MHZ时精度0.01%,可更高,但不是很准)](https://blog.csdn.net/wjy020520/article/details/119992072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用 STM32 测量频率占空比几种方法](https://blog.csdn.net/yyx112358/article/details/78414594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值