开关可以连接到微控制器(MCU)上的数字输入,但是开关触点可以在最终闭合之前的几毫秒内机械弹起并分开几次。这在继电器和螺线管上也很常见,这些继电器和螺线管的电流要比安装在PCB上的电子设备大得多,有时也称为“颤振”,因为您可以在例如控制柜进入稳定状态之前迅速听到触点闭合和断开的声音。
当MCU每秒轮询一次数字输入几次时,它可以很容易地记录开关或按钮在几毫秒内几次在0和1之间快速改变状态的次数。这可能会导致开关注册一个开/关状态,对于该状态而言,状态更改的总数将完全不正确。在任何开关之间,甚至在同一开关之间,弹跳动作都不一致,并且一天反弹的开关可能会在另一天反弹一次。另一个问题是,按下按钮的动作可能与按钮应激活的动作不同步。除了机械开关,数字输入还可以读取尖峰作为开关闭合。因此,按顺序去抖按钮或开关。

要消除硬件中的机械触点的抖动,您可以做一些事情。您可以制造或购买通常称为去抖电路的闩锁电路,也可以在软件中进行去抖处理。由于去抖动非常普遍,因此机械硬件开关可能具有内置的去抖动逻辑和锁存器。某些MCU还具有负责去抖动的软件库功能。

另一种选择是购买一个独立的IC,它可以为您进行反跳动,例如 MAX16054,这是一个具有单个开关去抖器和闩锁的开/关控制器。 MAX16054可接受噪声或反弹信号输入,并提供干净的锁存输出。

要处理软件中的反跳操作,请先检查您的特定MCU是否没有库。 Arduino具有防弹跳软件的“ Bounce”和“ Bounce2”版本,可作为免费库使用。为一群MCU使用软件延迟可能会不利于您,因为一群幼儿园的人可以轻松地按一下按钮,以至于MCU花费了所有时间来运行延迟循环(因为大多数MCU不运行多个线程)。延迟循环在等待软件中的跳动开关时非常普遍。开关无法永远反弹。但是,等待的时间越长,整个过程的速度就越慢,这在毫秒级的情况下是一个问题。加性延迟不是一个好主意。

代替NAND门锁存器的另一种硬件解决方案是RC去抖电路。尽管有弹跳开关,电容器两端的电压仍会缓慢上升,而增加元件值会使其达到逻辑高电平的速度甚至更慢。可以更改组件值,直到理想的充电和放电速率导致延迟超过反弹时间并经过稳定的间隔为止。根据杰克·甘斯尔(Jack Ganssle,见图5)的另一种选择是通过施密特触发器使开关运行,该触发器旨在消除信号中的噪声。施密特触发器的作用与比较器的作用相当,可以使弹跳平滑。
如果您有一个按钮或某种不能注册按键的开关,或者您的设计中有一个开关而事情却很奇怪,请考虑防抖。
先生,当继电器输出端连接到交流电压接触器时,我们正在使用886 28针ic的微控制器进行计数,当继电器在计数器上进行测试时,您能建议解决问题吗,谢谢,