搜索
bottom↓
回复: 13

从另一个角度理解软件消抖

[复制链接]

出0入0汤圆

发表于 2013-12-16 21:49:13 | 显示全部楼层 |阅读模式
本帖最后由 曹文涛 于 2013-12-16 21:49 编辑
  1. if(key)
  2. {
  3.   Delay_ms(10);
  4.   if(key)
  5.   {
  6.    ……
  7.   }
  8. }
复制代码

以下是网上普遍对软件消抖的解释
“检测到按键输入为0之后,延时5ms~10ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的5ms~10ms恰好避开了抖动期。”

记得初学单片机时,就对这个软件消抖留下好多问题。特别是我很纠结于延时10ms后再做一次判断,如果第二次判断不符合条件没进入,那这是什么情况?(解释上没详细说明)。后来也没彻底搞明白软件消抖,但一直用着挺好,也没出问题。今天搞程序的时候,偶然发现一种更好的理解,解决了我的不少困惑。

人按按键的频率是多少?也就是我们一秒钟能按几次按键?这个我们可以尝试下,快的可能会到20次,慢的可能5、6次,但我们考虑正常的按键输入速度,暂且取为10次。那就是说我们人的按键输入频率为10HZ,那我们就以10倍的采样频率去采样(是符合采样定理的),即以100HZ的频率去采样(这里我认为就是我们延时10ms的原因),这样可以真实还原人的按键输入信号。那延时10ms后的判断到底有什么意义?我们延时10ms读一次按键值,即以100HZ进行采样,如果连续两次采样的键值不同,那我们有充分的理由认为就是抖动(这里的抖动也是相对我们人的按键输入速度来说的),不对其响应。为什么它是抖动呢?因为我们事先已经确定,我们人的正常按键输入频率就是10HZ,采样频率为100HZ,在10ms内出现键值变化不可能是人为产生的,即意料之外的现象,这里面可以包含按键按下或弹起时的抖动也可以是电磁干扰,总之相对于人的按键输入信号都是抖动。

最后来总结一下,软件消抖中的延时应该是根据我们想要采样的信号的最高频率来定的,比如某个输入信号的最高频率为100HZ,那我们就已1KHZ去采样,即延时为1ms。这种软件消抖其实是有漏洞的,但可以滤去大部分干扰且成本低,要得到更好的消抖或者滤波效果可以选用更好的滤波算法,或者选择硬件消抖,可靠性高。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-12-16 22:20:01 | 显示全部楼层
这个只是初学者这样写  真正工作很少会这么写的   一般都会用到定时器。

出0入0汤圆

发表于 2013-12-16 22:44:09 来自手机 | 显示全部楼层
定时器多次采样

出0入21汤圆

发表于 2013-12-16 23:00:52 | 显示全部楼层
这程序在我的所有项目里都是废品,在项目组里要是谁敢写这么一段代码在里面,决对是找骂。

出0入0汤圆

发表于 2013-12-16 23:32:05 | 显示全部楼层
可是各位,楼主所说的采样,不管你用定时器也好,延时也好,道理应该一样的吧,我觉得关键在于楼主理解的采样,而不是采样间隔的处理方法~~

出0入0汤圆

发表于 2013-12-16 23:56:49 | 显示全部楼层
莫非楼主揣摩出的是采样定理??

出130入129汤圆

发表于 2013-12-17 01:37:52 来自手机 | 显示全部楼层
我是10ms为间隔,采集4,5次电平不变才判断按键按下,只判断一次不保险,尤其是质量差的按键

出0入10汤圆

发表于 2013-12-17 06:05:43 | 显示全部楼层
很这么多门道

出0入0汤圆

 楼主| 发表于 2013-12-17 09:13:19 | 显示全部楼层
tianming 发表于 2013-12-16 23:32
可是各位,楼主所说的采样,不管你用定时器也好,延时也好,道理应该一样的吧,我觉得关键在于楼主理解的采 ...

O(∩_∩)O~,谢谢澄清!是的,我现在也不用死等延时了,这里为了说明问题,就偷懒用这个“经典”的消抖代码。消抖和消干扰可以做在一起,根据有效信号的最高频率,确定采样频率,就能把有效信号还原,滤去抖动或者干扰信号,但不能滤去同频段的干扰(这里也包括高频干扰中混杂的低频干扰,这样的干扰,硬件也比较难以消除,可以通过高频采样+智能算法滤去)。要消除干扰,第一步是采样,相当于我们软件消抖中的延时;第二步是判断,相当于软件消抖中的两次if结构(两次确认的判断虽然成本低且较为有效,但漏洞也大。判断两次键值,如果不一样可以认定是干扰,但一样不一定就是有效信号。多次判断能增加判断为有效信号的概率,但引入一些风险,比如不提高采样频率的情况下,做多次判断其实是降低了采样频率,可能会导致失真,即漏检真实按键。提高采样频率,又可能会引入高频干扰,增加判断成本。
讨论这么多,其实对于正常的按键输入,就用一般的延时消抖就可以解决问题,我们以上讨论的都是概率相对比较低的特殊情况。对于按键输入我们所说的干扰无非就是按键抖动,延时消抖简单而有效。

出0入0汤圆

发表于 2013-12-17 09:18:41 | 显示全部楼层
我認爲這和採樣定理一點關係也沒有。這是爲了避開抖動:在抖動時不採樣,等它抖完了再採樣。

出0入0汤圆

发表于 2013-12-17 09:28:43 | 显示全部楼层
应该只是避开按键抖动的时间段而已

出0入0汤圆

发表于 2013-12-26 20:29:24 | 显示全部楼层
不管是定时器还是用delay来延时,都是一个意思,只是在产品中,你选择一个跑的快的mcu,拿来之后却把时间耗费在delay中,真的浪费,老板知道了,早晚得炒了你。当然定时器最好了,也可以硬件消抖,但是要增加硬件成本

出0入0汤圆

发表于 2013-12-29 16:03:01 | 显示全部楼层
经典的东西只是教入门者,10ms对mcu都不知道作多少回事情了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 05:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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