硬件消抖(电容式)原理根源分析

前言:

(开发板上四个管脚的独立按键真实存在的现象)由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。
消抖目的:按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。

 

【目标】

所以怎样才能保证CPU对键的一次闭合仅仅做一次处理,因为管脚的输入(四组并行双向IO口,可以输入可以输出)只有高低电平之分,所以只要保证其相应管脚的高低电平可以保持实现理性波形时的高低电平情况就不会出现多次一次按键被多次误读;

【补充】

一般来讲,对于5V电源的单片机来说,低电平在1.3V以下,高电平在3.7V以上,数字信号尽量不要使用1.3—3.7V这个区间,这有可能会造成单片机无法识别或识别错误。

【原理分析】

①上图所示,最开始状态时按键未按下时,电容肯定先是已经被充满电然后开路,又因为电容C1左极板与接地,所以左右极板电位0v/5v,又因为没有按下按键,所以电路处于开路,单片机管脚P02处于高电平5v(电路开路与VCC相连/也与电容右极板相连);
②当按键按下时,有一段时间的机械抖动,此时按键SW1右边节点的电位是5v(也是单片机管脚P02的电位为5v),又因为按键与电容形成回路,所以电容会进行放电(电容是一个非线性元件,放电需要时间),但是机械抖动的时间和电容放电的时间不是完全一致,所以当电容放电放一部时间(假设可能放到4.5v时)机械抖动就已经结束,那么管脚的电平却是始终都是表现为高电平,所以CPU识别还是高电平未变,当按键彻底按下稳定接触后,很快就会将放电完毕将电容短路(左右极板的电位变成0v/0v),然后按键SW1右边节点电位接地(也就是管脚P02因为接地电势为0v),所以此时单片机管脚P02为低电平,这也是教学视频说因为放电延时;
③当按键要松开时,按键有个松开时的抖动时间,只有你有松开的可能,按键这条支路就会开路而电容开始充电,电容就开始充电,但是充电需要时间在抖动的时间内电容右极板不会瞬间达到5v的电位,也就是按键SW1右边的节点电位不会一下子达到高电平(可能在这个抖动时间内电容才充电充了0.5v),所以该节点依然保持低电平(也就是CPU识别的管脚P02为低电平),当按键彻底松开稳定后,按键那条支路断开电容也充满电(两条支路都是开路),按键SW1右边节点和管脚的电位就是高电平(与直流电源VCC相连)这也是教学视频说因为充电延时;

【结论】

①具体分析也要参照实际电容充放电时间和加速度与抖动时间的比较;
②我上面的分析符合实际波形的高低高的波形情况;

【扩展问题】RC延时电路电阻电容值与放电时间

 

回复中,”内蒙肥羊“在按键并联电容的电路中加了10K电阻。

 

 

【扩展问题】:单片机IO口可以接一个按键之后直接接地么?

回答:

从I/O口的特性上看,标准51的P0口在作为I/O口使用时,是开漏结构在实际应用中通常要添加上拉电阻

P1、P2、P3都是准双向I/O,内部有上拉电阻,既可作为输入又可以作为输出。可以直接使用,不用接电阻

附:51单片机IO口模式设置:
PxM1,PxM0     
=00--->准双向口    01--->推挽
=10--->高阻      11--->开漏

总结:与IO口的具体模式有关,当IO口是开漏模式的时候,就必须接上拉电阻了;如果是推挽模式,就可以不接上拉电阻,而直接接地。如下图所示:

 

【扩展问题】:按键上拉电阻的选择:

提问:

按照图片上的解法,经过电阻上拉  上拉电阻取2.2k可以吗?使用的是ATmega8515单片机!!!!

这个电阻值取多大说法不一,计算如下:
1、上图中2.2K,假如电源电压5V的话,I=5/2.2=2.27mA,取10K的话,I=0.5mA。
2、从低功耗这个角度出发,选10K即可。但也不能太大,太大的话就相当与断路了,失去上拉作用。

 

 

 

参考文章:

1. 《硬件消抖(电容式)原理根源分析(注意同时体会软件消抖)》:https://blog.csdn.net/SUR0608/article/details/104252861

2. 《用电容或者rs触发器实现硬件消抖,单片机不再使用软件消抖》:

https://blog.csdn.net/weixin_43833645/article/details/113935282?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170839713716800227441388%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170839713716800227441388&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-113935282-null-null.nonecase&utm_term=%E6%B6%88%E6%8A%96&spm=1018.2226.3001.4450

3.单片机IO口可以接一个按键之后直接接地么? http://www.51hei.com/bbs/dpj-185156-1.html 

4. 按键上拉电阻的选择 https://zhidao.baidu.com/question/430197673.html

posted @ 2024-02-20 10:57  FBshark  阅读(1050)  评论(0编辑  收藏  举报