这不是一个好的去抖动电路。
一个问题是(至少在理想情况下)开关及其连接线的电阻为零。这意味着当开关闭合时,电容器将立即放电。(实际上,如果电容器上有足够高的电压并且具有足够高的容量,这种快速放电甚至可能对开关触点或布线也不利。)
电容式开关去抖动应在开关处于一种状态时缓慢地给电容器充电,而在另一种状态时使电容器缓慢地放电。RC常数不必相同,但应为非零值。该电路具有控制电容器充电的电阻器。它只需要在开关回路中使用一个电阻器就可以正常放电。
t=0
t=0t=0
这里的最后一个考虑是电路仅点亮一个LED,因此开关弹跳基本上是没有意义的,除非LED闪烁在某个光学检测器上,在该探测器中开关弹跳会变成信号中的毛刺。如果LED的工作只是提供漂亮的灯光,那么您的眼睛甚至不会足够快地看到开关弹跳。
这是电路的时域仿真(将V1更改为3V之后)。绘制的是LED电流。重要提示:“跳过初始”参数设置为“是”,因此我们可以看到当电容器最初为空且电压源通电至3V时会发生什么。开关处于打开状态时,一切都是如此。
如您所见,电流通过LED浪涌,然后消失。如果您的意图是由操作员通过按钮严格控制LED,那么您的设计就不会实现您的意图。
关于下面的评论,假设目标是实际驱动微控制器引脚(所有以5V运行)。首先,我们可以在没有任何电容的情况下做到这一点,并通过以合理的低采样率对引脚进行采样来处理软件中的抖动。
模拟该电路 –使用CircuitLab创建的原理图
开关断开时,输出通过下拉电阻器拉至0V。当我们闭合开关时,电阻器顶部的电压上升到5V。该输出可以视为信号。我们对信号的低频成分感兴趣:相对较慢的开关按下。我们要拒绝高频,例如开关弹跳。为此,我们可以添加一个无源单极RC低通滤波器:
模拟该电路
现在,当开关闭合时,电压随着电容器充电而逐渐升高。您可以在时域仿真中看到这一点:
当开关断开时,电容器将通过R1和R1放电,使电压逐渐降回零。电容器基本上遵循R1的电压,但是由于必须通过R1充电以及通过R1和R2放电而有所滞后。(请注意,放电速度是充电速度的两倍!)
微处理器的输入端以高阻抗感测电压,因此我们可以忽略其负载效应,甚至不会在图中显示它。对于LED,我们不能这样做,因为它需要电路必须提供的电流。电流流经我们的电阻器并产生电压,这是我们必须考虑的:换句话说,它具有“负载效应”。
如果我们将输出馈送到施密特触发器,则这种电路的效果会更好。施密特触发器是一种用于数字信号的缓冲器,具有类似于温度计的滞后性。超过某个高输入阈值时,其输出变为高电平;而超过另一个低阈值时,其输出则变为低电平。例如,当输入电压高于3.5伏时,它可能会变高;而当输入电压低于1.5伏时,它可能会变低。
因此,即使电容器允许通过一些噪声,该噪声仍可能导致在输入阈值的交点附近发生一些小的来回翻转,施密特触发器仍会拒绝这种噪声。
假设我们要用电容器对LED进行反跳?问题在于,由于需要向LED提供电流,因此电阻最终变得太低。如果我们只使用相同的电路,并且使电阻更小(而电容器却增大相同的倍数),那么最终会浪费功率。做到这一点的方法是使用一个小信号环路来处理开关,并对其去抖动,然后使用电压来控制将电流倾泻到LED中的晶体管。
尽管对LED进行反跳可能没有用,但是如果我们使电阻和/或电容器足够大,我们可以获得良好的行为:按下并按住按钮时,LED的指示灯会逐渐褪色,而在释放按钮时,LED的指示灯会逐渐褪色。
模拟该电路
这与以前的电路相同:“输出到微控制器”节点现在连接到n沟道MOSFET的基极,后者将电流驱动到LED。MOSFET“缓冲” LED驱动的去抖逻辑。去抖电路不会受到LED的低阻抗的干扰,并且去抖电路中的高阻抗不会使LED电流不足。