读者们可能还记得,前段时间我写了一篇关于开关抖动的文章《Switch Bouncing Around》,其中比较了各种开关的抖动程度。这个话题由我们尊敬的编辑Max Maxfield推动,他一直试图找出应该在消抖软件中使用多长的等待状态才能可靠地消除一般的开关抖动(甚至最严重的抖动)。
不幸的是,我需要购买一台新的示波器,因为我现有的设备没有一个能提供单次触发模式,而单次触发对于捕捉开关抖动波形是非常必要的,特别是如果你想保存它或用相机拍下来(我在另一个《On Upgrading Oscilloscopes》专栏中有讲这个问题)。虽然我的新示波器只有两个60 MHz通道,但已经证明它可以很好地完成在我购买后给它的所有任务。
当然,很难让Max开心(这也许是件好事,因为他的Happy Dance真的不忍目睹)。他打算写一个关于硬件和软件消抖技术的迷你系列,作为其中的一部分,他要求我使用我的新示波器来研究以下硬件消抖电路:
74x00消抖电路(来源:Clive Maxfield/David Ashton)
这个电路非常简单。在上面示意图中所示的状态中,A1上拉至逻辑值1(5V),B2接地(即逻辑值0)。则QB应该为逻辑值1,A2也是逻辑值1。QA因此将为0,B1也为0。当切换开关时,NC触点从地面断开的瞬间,B2变为1;然而,B2为0,则QB将仍然保持1。之后不久,常开(NO)触点接地的瞬间,A1将变为0,这意味着QA将变为1,B1也将变为1。此时,B2将被拉高到1,双稳态电路因此改变状态。QB将变为0,A2也将为0。A1产生的任何抖动都不会影响输出QA,一直持续到下一次开关操作,整洁而简单。我选择了一个抖动量很大的开关,以充分验证电路的消抖性能。
读者们会发现双稳态电路有两个输入以及两个输出。如果可能的话,可以同时监控这四个点,以验证消抖确实发生,并展现QA和QB输出是单一、清晰的转换。但我只有一个双通道示波器。该怎么办?
我工作的地方也只有一个双通道示波器。我考虑过购买一个四通道的,倒是有几个价格稍合理的。Hantek是我新购买的双通道示波器的制造商,他们还有一款四通道、70-MHz PC示波器(但不像我现在的示波器那样有内置屏幕),价格约为200美元。Picoscope是一家以制造PC示波器而闻名的制造商,倒是有一款示波器稍微贵一点,但频率只有10 MHz;如果想要100 MHz示波器,那可能要花费1000美元以上。而且如果还要有内置屏幕的话,价格更会高很多。
当然理想状况下,示波器最好配有大量内存,这样才可以放大或缩小捕获的波形(我的示波器虽然也可以,但范围非常有限)。但我和Max目前都没有这么多资金。Max曾尝试争取一个免费的示波器供我使用,但没找到任何对此有兴趣的厂家。开始的时候我用的产品甚至都不是来自“真正的”示波器厂商,如Tektronix、Keysight等。其实那才是我喜欢的,但它们远超出我的预算,当然除非我赢了彩票。
因此我开始着手利用现有的两个通道的示波器做到最好。当然,很容易同时显示NO开关极和其中一个Q输出(当NO输入拉低时,QA将变高,QB将变低)。然而,一时兴起,我将探针连接到QA和QB,并以非常高的速度扫描以便可以看到输出的转换。下面就是我所得到的:
QA和QB的输出叠加(来源:David Ashton)
我使用的是74HCT00 IC,转换之间有轻微延迟,从1到0(或从0到1)的转换时间也有轻微延迟,这与数据手册中这些参数的值非常吻合。这确实引起了我和Max之间关于传播延迟特性的一些讨论,但是我离题了,无论如何这给我另一篇文章提供了足够的素材,所以耐心等待吧,亲爱的读者!
然后我发现,这些转换通常在几纳秒(n)内就紧密对齐,而开关转换时间和抖动持续时间以毫秒(ms)为单位测量,时间级相差近百万倍,我可以触发任何一个Q转换并捕获开关操作与开关引起抖动的相对时序。我可以查看一个输入和输出,然后再查看另一个输入与输出,然后将显示结果拼接在一起。
通过在同一点触发,开关打开和关闭的相对时序可以正确显示。当然,不会有相同的事件显示出来,但由于开关抖动,无论如何也不会有两个完全相同的操作。我捕捉了一些波形显示,保留那些具有“最佳”开关抖动的显示,采用MS Paint工具将它们拼在一起展示(MS Paint对于处理这类工作格外地有用)。最后得到的结果如下图所示:
消抖电路的相对时序。第一次NO接通切换了双稳态。(来源:David Ashton)
我认为这是一个非常好的结果。尽管它是两个独立切换操作得到的两个单独的屏幕抓取组成的,但我认为它与真正的四通道示波器显示没有太大的差别。
读者们怎么想?这是作弊吗?鉴于我的触点在整个方案中都保持一样,这是一种有效的技术吗?或者我应该使用适当的四通道示波器?
为了确保它的正确性,我抓取了一个同时看到两个开关触点的波形图,而且如下图所示保持相同的示波器设置,这证实了我上面拼接的多波形图中显示的相对时序是正确的:
打开和关闭时的开关抖动(来源:David Ashton)
显示屏上的位置略有不同,但是断开(下方,在该实例下仅有少许抖动)和接通(上方,有很多抖动)之间的时间与上面相同 - 约5.5个分格,或3.75 ms。
最终,我抓取了一系列屏幕截图,显示出NO触点接通和时序为200μs/division时QA输出的切换,此时显示了开关触点的完全(几乎长达2ms)抖动;再按前一个扫描宽度1/10步长逐步降低时序到20ns/division,显示其转换瞬间和相对时序(这里门扩散延迟变得明显)。
NO和QA转换的渐进式屏幕截图(来源:David Ashton)
请记住,在大多数情况下,相邻的截图具有不同的开关操作,但只有在仔细检查时才会注意到这一点。
所有这些测试都是使用开关触点上带有10K电阻的74HC00 IC进行的(这是一个常见的上拉电阻值)。我还将我的示波器探头设置为10× 显示(其他截图均使用1×),这极大地改善了转换的显示效果,但也显示出开关触点上的一些振铃,这可能是由于移除了1x示波器探头的电容所致。Max给我的其中一部分工作(他可是一个严格的任务主管)就是尝试不同的电阻和IC类型。
这实际上是一个设计非常小巧的消抖电路。转换开关很常见,因此将一些转换开关构建到面包板中对于测试会非常有用。
要实现按钮开关(它们通常只是单极)的消抖也很容易,也许可以用可重复触发的单稳态电路做点什么……
……但Max迫不及待地要编写这个关于开关抖动和消抖技术的系列文章,而且急于要我提供上述讨论的测试电路中若采用不同的电阻值和IC类型(LS,CMOS)将得到的结果,所以,我最好还是先搞定这些吧。与此同时,欢迎大家的评论和提问。
责编:Amy Guan
本文为《电子工程专辑》12月刊杂志文章,版权所有,禁止转载。点击申请免费杂志订阅
也可点击立即下载,下载12月刊完整版。
- 楼主辛苦了!
您这里讨论的是“单刀双掷”开关的消抖问题!
请问(请教)对于“单刀单掷”的开关如何来消抖呢? - 楼主辛苦了!
您这里讨论的是“单刀双掷”开关的消抖问题!
请问(请教)对于“单刀单掷”的开关如何来消抖呢?