打印

如何统计一组信号中特定宽度的脉冲的个数

[复制链接]
2166|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pszpt|  楼主 | 2013-5-28 15:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
SunFans| | 2013-5-28 22:43 | 只看该作者
貌似不复杂,搜一下遥控接收的代码做参考吧……

使用特权

评论回复
板凳
dirtwillfly| | 2013-5-29 09:51 | 只看该作者
基于单片机红外遥控器接收源代码
http://wenku.baidu.com/view/7c1a5a2bed630b1c59eeb5fd.html

使用特权

评论回复
地板
tyw| | 2013-5-29 10:04 | 只看该作者
本帖最后由 tyw 于 2013-5-29 10:17 编辑

单稳态+与门
单稳态用信号前沿触发,产生一个大于150mS的脉冲(例如160mS),单稳的输出连到与门输入的A端,信号直接连到与门输入的B端,当信号大于160mS时,与门输出"1",否则输出"0",用与门输出计数即可.

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
dirtwillfly + 4 赞一个!
5
pszpt|  楼主 | 2013-5-29 11:39 | 只看该作者
本帖最后由 pszpt 于 2013-5-29 11:41 编辑
tyw 发表于 2013-5-29 10:04
单稳态+与门
单稳态用信号前沿触发,产生一个大于150mS的脉冲(例如160mS),单稳的输出连到与门输入的A端,信号 ...

昨天想个方案,还没做实验:
输入信号经过10K 10u 的低通RC电路,然后使用电压比较器,把150ms的波完全去掉,计数500ms

T叔这招不错哈,单稳态从来没用过,基础不扎实啊,惭愧惭愧。


使用特权

评论回复
6
wh6ic| | 2013-5-29 12:06 | 只看该作者
本帖最后由 wh6ic 于 2013-5-29 12:08 编辑

检查每个脉冲有效的上升沿或下降沿发生时刻,与上次有效沿的时刻进行比较,150mS或600mS都是很长的时间,软件应该容易编写,单片机边沿中断或捕捉中断,实现这些都很简单。为什么要考虑增加额外硬件资源来干呢?你用什么来统计有效的600mS个数?不要告诉俺是您的肉眼?

使用特权

评论回复
7
youss| | 2013-5-29 12:30 | 只看该作者
楼上说得对,150mS或600mS时间很长了可用单片机处理,检测到脉冲边沿后延时开始,小于150ms(也可稍大于 如200ms)时丢弃,大于600ms(当然也要有余量 如500ms)的对计数器加1就行!

使用特权

评论回复
8
pszpt|  楼主 | 2013-5-29 13:01 | 只看该作者
youss 发表于 2013-5-29 12:30
楼上说得对,150mS或600mS时间很长了可用单片机处理,检测到脉冲边沿后延时开始,小于150ms(也可稍大于 如200m ...

如果这种波持续出现   程序中起始计数和停止计数怎么判断呢
150 150 150 150 150 600 600 150 150 150 150 150 600 150 150 150 150 150 600 600 600 600 150

使用特权

评论回复
9
pszpt|  楼主 | 2013-5-29 13:02 | 只看该作者
只测150ms中间部分的600ms个数   

使用特权

评论回复
10
youss| | 2013-5-29 15:37 | 只看该作者
pszpt 发表于 2013-5-29 13:01
如果这种波持续出现   程序中起始计数和停止计数怎么判断呢
150 150 150 150 150 600 600 150 150 150 15 ...

检测到脉冲开始边沿(上升沿或下降沿),开始计时并检测脉冲结束边沿(下降沿或上升沿),小于150ms不处理从新开始,只有检测到脉冲是600ms的对计数器进行加1计数!
对你的持续波有多少150ms和600ms无关!

使用特权

评论回复
11
wh6ic| | 2013-5-29 16:07 | 只看该作者
本帖最后由 wh6ic 于 2013-5-29 16:09 编辑

需要另一计时流程,比如每10mS时间值加一,得到一个10mS单位的时标。也可以用其它方便的时间值(原则是:足够使用、足够精确、容易实现、计算简单)。
脉冲中断检测流程:进入后取得当前时标,计算两次有效沿时间差,进行判断:
             小于200mS,计数值为0不做任何处理,退出;
             小于200mS,计数值不为0就是上次600mS的计数值,保存为一次600mS脉冲数,然后清零计数值退出;
             大于300mS,计数值加一,退出。
复杂点的处理可以增加:
             四次小于200mS,清零600mS计数值,允许600mS计数操作;
             600mS计数开始后(计数值不为0),清零200mS计数; 遇到小于200mS时,保存600mS计数,关闭600mS计数操作,同时开始小于200mS计数。

使用特权

评论回复
12
pszpt|  楼主 | 2013-7-16 09:50 | 只看该作者
youss 发表于 2013-5-29 15:37
检测到脉冲开始边沿(上升沿或下降沿),开始计时并检测脉冲结束边沿(下降沿或上升沿),小于150ms不处理从新 ...

选上升沿或下降沿触发中断,200ms延时,再查询即可。延时200ms 前后50ms余量,很容易做到。  一般晶振高低温也就100ppm,目前实验效果OK。

使用特权

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

本版积分规则

3

主题

24

帖子

1

粉丝