目录
- 1.简介
- 2.开关行为
- 3.开关种类
- 4.消抖
- 5.消抖指南
1.简介
- 在电子设备内两个金属触点随着触点的断开闭合便产生了多个信号,这就是抖动。“消抖”是用以确保在每一次断开或闭合触点时只有一个信号起作用的硬件设备或软件。
- 机械开关和继电器触点·通常由弹性金属制造,由传动装置强制接触。当触点撞击在一起时,它们的惯性和弹性共同作用形成抖动,导致产生一个快速的脉冲电流而不是从零电流到全电流的平稳转换。开关和线路中的寄生电感与电容进一步引起波形改变,形成一系列衰减正弦振荡。这个影响在交流电路中不明显,因为抖动太快不至于影响大多数设备。但在某些模拟和逻辑电路中可能产生问题,因为这些电路反应太快会将开关脉冲误当作数据流。
- 时序逻辑数字电路特别容易受到触点抖动的影响。开关抖动产生的电压波形干扰正常逻辑电路的振幅和时序规格要求。结果就是亚稳定性、竞争、小脉冲和故障等问题导致电路失效。
2.开关行为
下图是一个带有上拉电阻的简单按键开关,以及当按键压下和释放时相应的输出。
如果开关是用于开灯或启动风扇马达,则触点抖动不是什么问题。如果开关或继电器用作数字计时器、个人计算机或微处理器等设备的输入,由于触点抖动则会产生问题。计数器将会出现多次计数而不是一次计数,在开关释放的时候也会出现同样的问题。
3.开关种类
最简单的开关类型是将两个电导体通过传动机构的运动联系在一起。其他的开关更复杂,包括靠物理信号实现开关的电子线路(如光或磁场)。无论如何,任何开关的最终输出将是(至少是)一对接线端子,它们或通过开关内部触点装置连接在一起(闭合)或不连接(断开)。
一些常见的开关如下:
- 拨动开关是通过一个控制杆转到两个或多个位置中的一个位置来操纵的。家用电路常用的灯开关是拨动开关的一个例子。
- 按钮开关是双位设备,通过按钮的按下和释放来操纵。大多数按钮开关内部有一个弹簧机构,通过瞬间操作使按钮回到“出来”或“不按下”位置。
- 温度开关包含两个紧挨的金属薄片,每个金属片有不同的热膨胀率。当金属片加热或冷却时,两片金属间的不同热膨胀率使它们产生弯曲。这样,薄片的弯曲就可以用于操纵开关触点位置。
- 压力开关使用气体压力或液体压力,压力通过活塞、薄膜或波纹管变为机械力来驱动开关。
- 液位开关也可设计用来探测固体材料的水平,如木材、粮食和煤炭等。
- 选择开关是由旋钮或某种控制杆来操纵到两个或多个位置中的一个位置。类似于拨动开关,选择开关可能保持在任意的通断位置或内置弹簧装置回位。
4.消抖
以下是一些用于解决触点抖动问题(输入信号“消抖”)的方法。
- RC消抖
如上图所示,一个电阻—电容(RC)网路可能是最常见且最容易的消抖电路,就是把一个电阻和电容连接在一起,开关连接至中间。电容经过电阻充电,开关未使用的默认状态是高电平。当开关闭合时,它慢慢将电容消耗至地电位,以此减弱所有小抖动的影响。这种电路能承受某些抖动但不完全消除它们。
- 硬件消抖电路
上图展示了另一种硬件方法。它使用了由一对与非门电路制作的交叉耦合闩。它还可以用SR双稳态触发器设计。使用交叉耦合闩的好处是它提供一种完全的消抖而不用考虑延时限制,而且它的响应速度和触点断开/闭合一样快。电路要求触点正常断开或闭合。在开关中,这种安排称为“双掷”,在继电器中,这称为“形状C”。
当开关处于位置“a”时,门电路“1”的输出就是逻辑高,不考虑其他输入值。这使得门电路“2”拉到逻辑低。如果开关在触点间移动并不在这两点间的区域短暂停止,由于门电路“2”将逻辑“0”回送到门“1”使其保持状态。这样保证了锁存器输出为非抖动。
接近以上思想的软件方法之一是将两个触点上拉输入至CPU的输入引脚,CPU当然会注意到许多抖动,但通过编写探测两个触点之一行为的简单代码,抖动同样可消除。
- 软件消抖电路
软件开关消抖可以很简单,尽管算法的选择会依赖于应用及开关的操作。
检查开关的动态特征和评估环境的影响很重要。随着开关的断开或闭合,所有开关显示开关触点抖动。在触点完全到达最后位置前,开关触点实际上要多次相互反弹。环境干扰包括振动及最重要的电磁干扰(EMI)。电磁干扰是一种有害的干扰,是由于外部来源发射的电磁辐射而影响电路。这种干扰会引起开关内噪声导致抖动。电磁干扰可通过适当的消抖程序来处理。
以下是一些软件(固件)的开关消抖技术:
1)在足以让抖动停止的时间后读出开关。
2)开关启动时中断CPU并在中断服务程序(ISR)中消抖。
3)使用计数器消除噪声并验证开关状态。
5.消抖指南
浪费大量CPU周期来解决消抖问题并不是一个好主意,消抖作为一个小问题,只能占用计算机一小部分资源。所以应当选择将CPU开销最小化的方法,以下是一些应当遵守的指南以在电路中拥有强大的消抖机制:
- 与消抖相关的CPU开销应当最小化。
- 非消抖开关必须连接至已编程序的I/O引脚,绝不能连接至CPU的中断。如果连接至CPU中断,抖动会引起多重中断,同样会增加CPU的负担,因为每次中断CPU都会执行中断服务程序(ISR)。
- ISR延时不能容忍,必须保持ISR的快速。与开关状态相关的中断不应当用作时钟或触发器的数据信号,因为这会违反最小时钟宽度或数据建立及保持时间等原则。
- 开关输入取样的频率不应当与外界事件同步,否则会产生周期性的EMI。以常用50/60Hz频率的速度取样应当避免。甚至机械振动也会产生周期性干扰。对汽车而言,甚至以发动机振动或驾驶杆振动同步的频率取样都可能引发EMI。
- 系统应当对开关(用户)输入立即响应。万一开关状态显示在LED或显示器上,用户要系统迅速响应以避免显示器或LED出现混乱情况。
- 使用定时器有规律间隔地中断CPU,而不是用延时来等待输入稳定。这样可使得消抖代码可移植到新的编译器或CPU中,而不是随着每次时钟频率变化或CPU变化而改变等待状态。