你将学习:
- 开关反弹的原因是什么?开关反弹几次?
- 断开开关的方法。
- 什么是NoBounce技术?
大多数人,尤其是非工程师,在实际使用开关时往往不会考虑它。如果他们真的想到了,他们通常会假设开关是一个理想的设备,要么是Off(开,无活动),要么是On(关,有活动)。在现实中,就像把乒乓球扔在木桌上一样,当一个变化被触发时,开关会在它的新状态稳定下来之前,多次开关-关闭-关闭…
不出所料,这种效应被称为“开关反弹”。对于像电灯开关这样的东西来说,这不是问题,因为它发生得太快,人们都没有注意到。当开关信号被输入电子系统时,问题就出现了,电子系统将每次反弹视为一个单独的开关事件。例如,在地板上安装的开关计算进入房间的人数的情况下,一个人可能会被计算为一大群人。
术语“开关弹跳”指的是减轻开关弹跳影响的过程。问题在于,关于开关的反弹和反弹有很多令人困惑和矛盾的信息,即使是经验丰富的工程师,如果他们不小心,也会把事情搞砸。下面是11个常见的与开关反弹有关的误区。
1.只有拨动开关才会出现开关弹跳的问题。
即使是那些知道开关弹跳的人,他们中的许多人仍然认为这种现象只影响拨动开关。出于某种原因,他们认为按钮开关和限位开关(比如那些用于机器人和工业自动化应用的开关)不会受到开关反弹的影响。
但事实上,地球上几乎每一种开关都会反弹。唯一不会弹跳的开关是像水银倾斜开关这样的专业设备,但绝大多数人从来没有使用过。
2.开关反弹对现代设备来说不是问题。
有些人误解只有“旧开关”会反弹,而使用现代制造方法制造的“新开关”不会受到这个问题的影响。可悲的是,这不是机箱开关反弹;他们就是这么做的。
另一些人认为开关包括特殊的消波电路。事实上,这个流言有一个事实的暗示,因为尽管绝大多数的交换机都是按“原样”呈现的(要求用户使用硬件或软件技术使其断开),LogiSwitch例如,在一系列按钮和限位开关中包括其独特的NoBounce自适应弹跳技术。
3.开关只会弹跳几次。
根据电子艺术霍洛维茨和希尔(第二版506页),“当开关关闭时,两个触点实际上分离并重新连接,通常是10到100次[…]”
此外,每个开关都是不同的。同一类型的开关可能表现出非常不同的弹跳特性,这些特性本身也可能随着环境条件(如温度和湿度)的变化而变化。
4.开关只有在打开时才会弹跳。
许多用户认为将拨动开关切换到“开”的位置比将其切换到“关”的位置更重要。同样,许多用户认为按下按钮开关比将其释放到原来的位置更有本质意义。
事实上,在电子系统中,将开关从任何状态转换到任何其他状态,可以用来启动或终止随后的动作。这是重要的,因为当拨动开关打开或关闭时,当按钮开关被按下或释放时,当限位开关被激活或关闭时,开关弹跳可能发生。
5.开关反弹的时间不会超过1毫秒。
有传言说开关反弹的时间不会超过1毫秒——也就是说,千分之一秒——这是一个对年轻、没有经验的工程师来说很常见的故事。这个价值通常是由更年长、更有经验的工程师传授的,他们从自己的导师那里学到的。问题是,这根本不是真的。
在他的指导消除抖动嵌入式系统的传奇人物Jack Ganssle收集了一组不同的开关,将它们放在试验台上,激活/关闭每个开关300次,记录触点开启和关闭时的最小和最大弹跳量。尽管一些开关在不到1毫秒的时间内停止跳动,但平均为1.6毫秒,最大为6.2毫秒。
6.使用单稳定剂是一个好主意。
使用单稳态实际上是一个坏主意,因为当开关打开或关闭时,它产生的是脉冲而不是干净的过渡。这并不是大多数设计所期望的切换行为。更多细节请见第4部分的开关复位的终极指南一系列的文章。
7.使用硬件解决方案来拆散开关是“老派的”,已经不再可行了。
当然,最初的开关脱开方法涉及到硬件,例如电阻电容(RC)延迟驱动缓冲区施密特触发输入单极单掷(SPST)开关,或设置/复位(SR)锁存器形成的背靠背NAND或NOR门单极双掷(SPDT)开关。
许多现代系统的设计者更喜欢使用软件技术来降低开关的阻尼,这也是事实。然而,在某些情况下,使用硬件解决方案可以提供最好的(有时是唯一的)选择。
8.用软件拆除开关是唯一的办法。
的确,软件中的消波开关可以提供优势,不仅仅是减少组件数量、成本和印刷电路板(PCB)上的占地面积。问题是许多软件开发人员不熟悉交换机的物理特性——一些软件开发人员甚至不知道交换机反弹的存在。
开关跳变在系统测试中是很难模拟的,通常没有实现。因此,随着软件的发展,开关退出程序可能会被改变或删除,并且在系统测试期间没有检测到问题。
即使软件开发人员理解debounce,一些应用程序也会使用内存和时钟速度受限的微型处理器。因此,开发人员可能不愿意投入代码空间和时钟周期来实现开关退出例程。此外,许多简单的、非基于处理器的系统也需要取消开关。
9.使用中断来实现debounce是一个好主意。
有时,系统有一个或多个开关连接到微控制器(MCU)上的中断引脚。这可能是一个有效的实现,如果设计者希望MCU对开关上的转换作出反应尽可能快。如果是这种情况,那么来自交换机的信号在被提交到中断输入之前应该在硬件中被抑制,从而避免了多个中断的可能性,并让MCU自由地处理中断,所有可能的匆忙。
如果有人决定使用中断服务程序(ISR)来解除开关,认为这是一个好主意,那么问题就出现了。但事实并非如此,因为它要么要求ISR在每次弹跳时都被触发,要么ISR等待开关停止弹跳,从而阻止其他任何事情的发生。
10.所有专用开关式集成电路的工作原理相同。
市场上有几种专用的开关缓冲ic。不同型号的交换机可能支持不同数量的交换机。一些设备需要添加外部组件,如电阻和电容,以微调时间;其他的则需要提供外部时钟。
LogiSwitch相对来说是一个新来者,它拥有上面提到的NoBounce技术。该公司的ic支持3路、6路或9路(开关),可采用导通孔(LTH)和表面贴装技术(SMT)封装。与旧的解决方案不同,这些设备不需要任何外部组件,它们可以在2.3 V到5.5 V之间的任何电源电压下工作。
11.标志是用来跟踪交换机状态的。
软件退出程序需要环路来检测交换机状态。如果开关在Off/Inactive状态下启动,代码本质上是在说:“开关已经激活了吗?”交换机是否已激活?交换机是否已激活?……”
当交换机最终转换到活动状态时,软件必须处理交换机的弹跳(这可以通过各种技术实现),并执行任何预期的任务。此时,代码有另一个问题,因为它现在必须等待开关返回到非活动状态(“开关已经消失了吗在活跃的?开关消失了吗?在活跃的?开关消失了吗?在活跃的?……”),然后再开始整个循环。
因此,软件开发人员必须为每个交换机建立和维护一个标志,以跟踪其当前的状态——未激活等待转活跃,或激活等待转不活跃。LogiSwitch采用了一种更好的方法LS1xx系列它涉及到一个独特的单线请求/基于确认的握手协议。程序员不再需要在软件中维护标志,因为集成电路本质上是在硬件中实现这个功能的。程序所要做的就是等待开关激活,执行任何需要它执行的任务,使用握手来“清除”IC,然后返回等待下一次开关激活。
结论
考虑到世界上无数的切换、按钮和限制开关,人们可能会认为现在有一种标准的方法来解除它们。然而,可悲的事实是,几乎每个硬件设计师或软件开发人员都有他或她自己的做事方式。有时他们的工作就像希望的那样。其他时候他们不会。
通常情况下,开关反弹只是令人讨厌,尽管现在的情况是,任何能够减少烦恼的事情都是一件好事。另一方面,如果一个开关连接到一些安全或关键任务系统,如果系统的设计者没有充分解决它的开关弹跳特性,那么某人就有可能在某个时候遇到非常严重的问题。适当的开关衰减是绝对必要的。