找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5771|回复: 4
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
使用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 的参考手册,在定时器当中有这样一种模式:


完整的pdf格式文档51黑下载地址:
使用STM32测量频率和占空比的几种方法.pdf (897.55 KB, 下载次数: 88)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:18591 发表于 2019-1-20 20:31 | 只看该作者
不錯~~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

板凳
ID:456780 发表于 2019-6-28 17:47 | 只看该作者
我有这些资料,我需要程序,不会编
回复

使用道具 举报

地板
ID:701556 发表于 2020-3-3 10:12 | 只看该作者
参考下,谢谢
回复

使用道具 举报

5#
ID:701603 发表于 2020-3-3 11:24 | 只看该作者
ganxie  不错 谢谢分享
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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