去抖按钮

电器工程 按钮 去抖
2022-01-11 12:19:36

我最近读了一篇关于按钮去抖动的文章,想知道在使用 Arduino (ATMega mC) 时是否应该记住这一点?我认为这是一个问题,尤其是在处理中断时。

那么检测代码中的反弹更好,还是应该用硬件来处理?请详细说明。

4个回答

我强烈建议将示波器(希望您有一个或可以使用一个)连接到您的开关。我见过一个学生的项目,他们的开关从 5v 下降到 -5v 到 4v 下降到 -3v 然后上升到 2v 然后又回到 0v。当我们查看示波器上的电流消耗时,会发现一些非常大的尖峰。

在他的特殊情况下,他非常需要对他的硬件开关进行去抖动处理。

然而,另一方面,我看到开关的效果要小得多,可以很容易地在软件中删除。

不过,您确实需要权衡您的选择。如果您的固件数量非常复杂,那么作为程序员增加您的开销和 CPU 使用可能不值得,您最好只添加一点硬件。另一方面,如果您想降低成本并缩小尺寸,您将希望尽可能多地移除硬件,并尽可能在固件中完成。

如果你是一名专业的电子设计师,你的老板甚至不会让你在硬件上做这件事。原因很简单:如果您的生产批次足够大,软件实际上是免费的,而硬件必须为您生产的每个单元付费。虽然电阻器和电容器非常便宜,但将它们安装在 PCB 上的成本可能高达其购买价格的 20 倍。

无论您是在软件中还是在硬件中去抖动,您仍然必须选择高质量的按钮。文章中臭名昭著的 157ms 按钮根本不适合任何应用程序。
我通常以32ms 的间隔对按钮进行采样,这足以弥补任何好的按钮的去抖时间。我非常喜欢Alps SKQG TACT Switches。

阿尔卑斯轻触开关

在我测试的少数设备上,它的初始反弹时间不到 10ns。虽然它的使用寿命为 100 000 次,但我们对其进行了200 000次的测试,即使如此,32ms 的去抖动也足够了。(我想我应该测量实际的去抖水平,但我们当时的主要兴趣是最终产品的行为。无论如何,我们使用它超出了规格。)

如果您真的想要硬件解决方案,我将文章中提到的 SR 触发器解决方案列为技术上最佳的解决方案:

去抖电路

触发器可以用双 NAND 门构建,例如,它采用小型 VSSOP8 封装。此解决方案的主要缺点是您需要一个 SPDT 按钮,而 SPST 更常见。

有很多(和很多)不同的方法可以消除按钮的抖动。无论您是使用软件还是硬件,都将取决于您的项目要求和交换机类型。

以下是不同方法的一些链接:

http://www.ganssle.com/debouncing.htm

http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/

那篇文章是去抖动的“圣经”。联系反弹可能是任何应用程序的问题。

通常最好在软件中对开关进行去抖,因为更容易调整特定开关的延迟,因为它们的触点弹跳量不同。通常也需要对密钥释放进行去抖动。开关制造商通常会为其产品指定弹跳量,通常在 10ms - 20ms 左右。

其它你可能感兴趣的问题