OpenEdv-开源电子网

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

定时器输入捕获一个周期得到的计数器CNT值能否自动清0并自动与设定阈值进行比较?

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-9-21
在线时间
16 小时
发表于 2021-4-15 15:33:06 | 显示全部楼层 |阅读模式
10金钱
需求:从一段波形中找到周期大于1us的方波,这段波形中的方波周期都是不规律的且大多数周期都小于1us。

我的想法是利用单片机定时器的输入捕获功能捕获方波周期,但是每次捕获到一个方波都要依靠中断去判断方波的周期是否大于阈值1us,这样会有大量中断出现,而且会丢掉一些中断,这种方法不可取。

提问:我想问一下可不可以让单片机捕获到方波后使用硬件让方波周期与阈值做比较,如果方波周期大于阈值在发生中断,提示单片机去处理事件。

最佳答案

查看完整内容[请看2#楼]

硬件滤波可以操作,但精确性太差,且不够灵活。 我这里有一个思路。 1. 定时器工作频率设置为72MHz 2. 通道0设置为输入捕捉上升沿,且捕获成功则清零本定时器 (TIMx->SMCR:触发源选择TI1FP1;从模式选择为Reset Mode,即清零本定时器的计数器) 3. 通道1设置为输出比较,比较值设置为72(1us),开启此通道的输出比较中断。 原理是如果一直是小脉冲,则计数值根本到不了72(通道1的输出比较值),一直在0~71之内 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2021-4-15 15:33:07 | 显示全部楼层
硬件滤波可以操作,但精确性太差,且不够灵活。

我这里有一个思路。

1. 定时器工作频率设置为72MHz
2. 通道0设置为输入捕捉上升沿,且捕获成功则清零本定时器
    (TIMx->SMCR:触发源选择TI1FP1;从模式选择为Reset Mode,即清零本定时器的计数器)
3. 通道1设置为输出比较,比较值设置为72(1us),开启此通道的输出比较中断。

原理是如果一直是小脉冲,则计数值根本到不了72(通道1的输出比较值),一直在0~71之内乱跑,不需要任何软件处理。
一旦超过阈值,说明这个脉冲超过了阈值,则立即触发通道1的输出比较,可以进中断做一些事情。



这种方式滤波,可以非常灵活地设置阈值,72=1us,720=10us,7200=100us,

而且可以通过读取通道0的输出比较寄存器得知当前这次长脉冲的宽度。
方法:进通道1中断后,立即临时打开通道0中断,则下次进通道0中断时,通道0里面存的值就是刚才那个长脉冲的宽度,此时可以立即关闭通道0中断了,继续滤波。
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-4-16 01:55:48 | 显示全部楼层
输入捕获有个硬件滤波器,看能否通过那个来实现1us间隔检测,比如小于1us的就滤掉,大于的才有效,然后根据有效数据进入中断再处理。
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-9-21
在线时间
16 小时
 楼主| 发表于 2021-4-16 15:16:46 | 显示全部楼层
正点原子 发表于 2021-4-16 01:55
输入捕获有个硬件滤波器,看能否通过那个来实现1us间隔检测,比如小于1us的就滤掉,大于的才有效,然后根据 ...

谢谢原子哥提供思路,现在去验证一下,结果稍后放在帖子里。

还想请教一下,我看STM32定时器的输入滤波器好像是4个通道共用的,有没有办法实现TIM1的CH1输入滤波,CH2输入不滤波呢?
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2021-4-16 18:47:44 | 显示全部楼层
z269175822 发表于 2021-4-16 15:16
谢谢原子哥提供思路,现在去验证一下,结果稍后放在帖子里。

还想请教一下,我看STM32定时器的输入滤 ...

四个通道的输入数字滤波器是分开的,每个通道可以设置各自的16档滤波强度。

在寄存器 TIMx->CCMRn->ICiF   (Input capture #i filter)
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-9-21
在线时间
16 小时
 楼主| 发表于 2021-4-18 11:27:11 | 显示全部楼层
xkwy 发表于 2021-4-15 15:33
硬件滤波可以操作,但精确性太差,且不够灵活。

我这里有一个思路。

感谢大佬提供的思路,非常感谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 23:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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