逻辑开关的抖动现象如何解决

核心提示加一个去抖电路!标准的解决方案是在每个外部输入端安装瞬态抑制器或者MOV器件,这种做法在工业和汽车系统中是非常普遍的,易于实现而且成本相对较低,但是在多路输入的情况下,即使选用每封装4/8个器件也会显得零散,并占有较大的PCB板尺寸。在CM

加一个去抖电路!标准的解决方案是在每个外部输入端安装瞬态抑制器或者MOV器件,这种做法在工业和汽车系统中是非常普遍的,易于实现而且成本相对较低,但是在多路输入的情况下,即使选用每封装4/8个器件也会显得零散,并占有较大的PCB板尺寸。在CMOS输入端口安置串联电阻可以抵御EMI辐射,但对ESD没有效果,因为15kV的尖峰能够产生可观的电流。

开关防抖

开关按钮在按下时,表面上只按了一下,但信号的传导并不是单纯的由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当然去处理别的事务)

至于按钮的连按和单按、双按,多按钮同时生效等更复杂的功能,可借助其它的标志位实现。

是为防止后者,当机械开关工作时,其开关触点的闭合和张开,都会产生随机性的机械抖动,给电路产生不希望的振荡脉冲和干扰,硬件防抖动电路参考下链接:(有些同时采取加入软件滤除)

http://wenkubaiducom/view/500084afdd3383c4bb4cd261html

 
友情链接
鄂ICP备19019357号-22