下图是一个带有上拉电阻的简单按键开关,以及当按键压下和释放时相应的输出。
如果开关是用于开灯或启动风扇马达,则触点抖动不是什么问题。如果开关或继电器用作数字计时器、个人计算机或微处理器等设备的输入,由于触点抖动则会产生问题。计数器将会出现多次计数而不是一次计数,在开关释放的时候也会出现同样的问题。
最简单的开关类型是将两个电导体通过传动机构的运动联系在一起。其他的开关更复杂,包括靠物理信号实现开关的电子线路(如光或磁场)。无论如何,任何开关的最终输出将是(至少是)一对接线端子,它们或通过开关内部触点装置连接在一起(闭合)或不连接(断开)。
一些常见的开关如下:
以下是一些用于解决触点抖动问题(输入信号“消抖”)的方法。
如上图所示,一个电阻—电容(RC)网路可能是最常见且最容易的消抖电路,就是把一个电阻和电容连接在一起,开关连接至中间。电容经过电阻充电,开关未使用的默认状态是高电平。当开关闭合时,它慢慢将电容消耗至地电位,以此减弱所有小抖动的影响。这种电路能承受某些抖动但不完全消除它们。
上图展示了另一种硬件方法。它使用了由一对与非门电路制作的交叉耦合闩。它还可以用SR双稳态触发器设计。使用交叉耦合闩的好处是它提供一种完全的消抖而不用考虑延时限制,而且它的响应速度和触点断开/闭合一样快。电路要求触点正常断开或闭合。在开关中,这种安排称为“双掷”,在继电器中,这称为“形状C”。
当开关处于位置“a”时,门电路“1”的输出就是逻辑高,不考虑其他输入值。这使得门电路“2”拉到逻辑低。如果开关在触点间移动并不在这两点间的区域短暂停止,由于门电路“2”将逻辑“0”回送到门“1”使其保持状态。这样保证了锁存器输出为非抖动。
接近以上思想的软件方法之一是将两个触点上拉输入至CPU的输入引脚,CPU当然会注意到许多抖动,但通过编写探测两个触点之一行为的简单代码,抖动同样可消除。
软件开关消抖可以很简单,尽管算法的选择会依赖于应用及开关的操作。
检查开关的动态特征和评估环境的影响很重要。随着开关的断开或闭合,所有开关显示开关触点抖动。在触点完全到达最后位置前,开关触点实际上要多次相互反弹。环境干扰包括振动及最重要的电磁干扰(EMI)。电磁干扰是一种有害的干扰,是由于外部来源发射的电磁辐射而影响电路。这种干扰会引起开关内噪声导致抖动。电磁干扰可通过适当的消抖程序来处理。
以下是一些软件(固件)的开关消抖技术:
1)在足以让抖动停止的时间后读出开关。
2)开关启动时中断CPU并在中断服务程序(ISR)中消抖。
3)使用计数器消除噪声并验证开关状态。
浪费大量CPU周期来解决消抖问题并不是一个好主意,消抖作为一个小问题,只能占用计算机一小部分资源。所以应当选择将CPU开销最小化的方法,以下是一些应当遵守的指南以在电路中拥有强大的消抖机制:
上一篇:Java去除文档阴影
下一篇:Python进阶学习之阅读代码