控制/MCU
按键电路在设计开始就是选择按键,一般来说根据其工作的极限条件来选择,特别是电压和电流的极限条件。有些开关用在大电流,大电压场合,对单片机来说,一般不需要考虑这个因素,因为一般的开关耐压都在几十V,电流也在1A左右,所以对单片机的按键挑选的也比较随意,最多可能就是选择贴片还是直插,还有尺寸规格方面需要考虑。
本次设计采用的是轻触开关,下图是其部分参数。
接下来就开始设计电路了,开关对于单片机来说最常见的问题来说就是按键抖动,一般抖动为按下和释放的前后20ms,容易造成误触发。消除抖动有硬件和软件两种方式。下面由于是设计硬件,本次采用了硬件消除抖动的方式来设计开关。
下面一幅图是最简单的一种电路,两个电路就是触发电平不同而已,一个按下为低电平,一个按下为高电平,但没有消除硬件抖动,若采用这种电路那势必要在单片机软件编程里面进行设置。下面将从硬件层面对这部分电路进行改进。
抖动一般产生在前后按下和释放时候,而且多为毛刺,这就好比是一个高频成分,那通过加电容进行滤波就可以实现,本质上是利用了电容充放电的原理。
那下面就是电容怎么加和取值的问题了。
抖动是按键产生的,那电容就应该加在按键所在的回路中。又由于其抖动大约为20ms,所以要确保电容充放电时间大于20ms.
该电路中充放电时间为t=RCIn[(3.3-0)/(3.3-3.3*0.7)]=RCIn(10/3)=1.2RC>20ms,
这里取R为200K,C取0.1uF RC=20ms
其实在实际产品中一般采用软件消抖的方式,即不采用RC滤波的方式,而是采用软件延时的方式去判断按键的有效,这也是出于成本的考虑,外加电容和电阻会提高生产成本。
说到了软件消除抖动,那也就来顺便讲讲这个,话不多说先直接放出两张图
上面两副图对应于按键操作,第一个是采用FPGA抓取信号看到按键信号有跳变,第二个就是单片机里按键处理程序,其中关键在于静态变量key_flag的使用,特别重要的就是进入函数体内部时候记得写0和将其变量作为进入函数的条件,这样按键一次后就产生固定值,不会发生跳变和改变。上面这个程序可能还不够完善,一般的来说大家在写按键的时候可以采用分层的思想去实现,就是底层驱动为一层,主要就是可以拿到实际的高低电平,当然肯定是消除抖动过的,再中间一层就是对这些信号的处理,其中又可以根据这些信号长短分成不同的长按键信号和短按键信号,更有快按或者慢按,这部分可以通过状态机实现。最上面一层就是根据这些信号其实就是应用层直接拿来用了。
最后提示一下,按键处理其实在实际项目中用到的特别多,也特别实用,还有类似的矩阵扫描等等。
全部0条评论
快来发表一下你的评论吧 !