单片机的按键开关抖动的产生原因,抖动的特点和如何消除抖动 25

 我来答
coolaa
2012-02-25 · TA获得超过408个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:189万
展开全部
开关按钮在按下时,表面上只按了一下,但信号的传导并不是单纯的由1直接跳到0。这是由于机械触点断开/闭合时会有抖动,信号如图示会在HIGH和LOW之间抖动。这种抖动对人来说是感觉不到的,但对单片机来说,则是完全可以感应到的。
当按钮被按下时,你所期待的效果应该是:111111111000000000…,
而事与愿违,单片机读到的信号可能会是:111110110110000000…,
这中间连续的1和0过渡处,短暂的几个随机交错出现的01就是我们不期望产生的抖动,虽然我们只按了一下按钮,可能会被电路误读成按了好几下按钮,而给人的感觉就是有时候按钮会不灵。消抖的目的就是为了要除去信号在高低电位之间弹跳所造成的不正确输入,就是交错出现的01那段,一般抖动持续的时间是3-10毫秒。所以简单的去抖动操作,只要在这段抖动出现的时间跨度两端进行两次按钮状态检测即可:
假设放开按钮信号为1,按下为0,
那么当首次检测到按钮为0,过10ms再次检测,若依然为0,按钮按下有效;若为1,说明为抖动,去除。

更可靠,更灵敏的消抖做法为:
首次检测到按钮为0后,以后的3-5ms持续检测,若检测到信号一直为0,则按钮有效,若中间有一次不为0,时间清0,重新计时,直到连续3-5ms按钮信号一直为0,方为有效。(补充一下,持续检测的意思,并不是让你把全部的CPU时间全部花在这上面,否则这几ms时间内单片机相当于死机了,影响其它进程,而是间隔性地采样一下,比如5ms之内检测10次,10次全为0有效,其它时间CPU当然去处理别的事务)

至于按钮的连按和单按、双按,多按钮同时生效等更复杂的功能,可借助其它的标志位实现。
zui依然
2012-02-25 · TA获得超过630个赞
知道答主
回答量:74
采纳率:0%
帮助的人:44.5万
展开全部
用延时函数可以消抖,也有用硬件消抖的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
whangao
推荐于2017-11-28 · TA获得超过939个赞
知道小有建树答主
回答量:384
采纳率:100%
帮助的人:322万
展开全部
抖动产生因为机械固有的物理特性,在瞬间接触的时候会有力学的回弹,造成2-8毫秒内信号不稳定。

解决办法:软件延时去抖(其实是一种忽略)和硬件去抖

软件判断:开关闭合——延时——是否还是闭合?——如果是就判定打开,软件解决可以降低成本,但是有时候硬件劣化超出延时的范围会造成故障。

硬件解决:专用的去抖芯片或者自己组装一个双稳态消抖电路,就是两个与非门构成的RS触发器。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式