在电子设备中两个金属触点随着触点的断开闭合便产生了多个信号,这就是抖动。消抖使用来确保每一次断开或闭合触点时只有一个信号起作用的硬件设备或软件。(说人话就是每次断开闭合只对应一个操作)。
抖动在某些模拟和逻辑电路中可能产生问题,因为这些电路反应太快会将开关脉冲误当作数据流。
时序逻辑数字电路特别容易收到触点抖动的影响。开关抖动产生的电压波形干扰正常逻辑电路的振幅和时序规格要求。结果是亚稳定性、竞争、小脉冲和故障等问题导致电路失效。


若开关用于开灯或启动风扇马达,则触点抖动基本没有影响,但是用作数字计数器、个人计算器或微处理器等设备的输入,由于触点抖动就会产生问题。计数器会多次计数而不是一次计数。
原因:触点停止抖动所化时间大约是毫秒级,数字电路能在ms甚至ns内响应。
通常的解决方法:消抖设备或软件可以确保在一个给定时间内(ms级)仅有唯一数字信号记录。

上面是常见的一些开关种类,看一下了解一下就行了。

和一个一阶RC低通滤波器差不多,通过电容充放电实现了滤掉高频信号的功能。这种电路可以承受某些抖动但不完全消除它们。
通过调节RC可以在开关断开时,使电压在抖动停止前一直低于门电路的逻辑1。潜在的副作用:如果时间常数过大则对快速断开或闭合可能无法反应。合上开关反之同理。

若没有R2,也能很好的消除抖动。但是由于时间常数(RC)变小,充放电更快,会导致抖动。R2使电容器慢速充电,达到更好的滤波效果。电阻同样限制了流经开关触点的电流,防止电容器瞬间大量电涌烧坏触点。
最后,开关的状态信息实际上不是数字的,因此使用它控制类似于开关集成电路的电路不会很有效。为了正确使用开关状态信息,需要基本的AD转换。

逻辑门电压有某个电压阈值,滤波后抖动也有可能超过阈值范围,导致消抖不成功。

使用施密特触发器,电压降至第一个阈值以后触发,但是电压上升要到另外一个阈值才会改变(也就是滞回比较器)。施密特触发器降低了对开关抖动的灵敏度。

电容放电公式:

RC应使得Vcap直到开关停止抖动始终高于使门电路转换的阈值电压。
电容充电公式:

下图在RC消抖电路中加一个二极管,即使出现R1+R2<R2等错误导致之滞回压呈现不同值时也能正确运行。(没搞懂)在此情况下,二极管形成一个捷径将R2短路,所有电流从R1流过。

该电路断开和闭合时的状态:

断开时,通过R1和C充电。开关闭合,通过R2放电。
没有R2,开关闭合时电容器会短路。断开时如果没有二极管,R1和R2将增加电容的充电时间,降低电路的速度。另一个选择是将R1变小,但是在开关闭合时R1接在电源线两端会导致不必要的电流浪费。

图中使用了一对与非门制作了一个交叉耦合闩,该电路完全消抖而不用考虑延时限制。
开关处于a,门电路1为高;开关处于b,门电路2为高。当开关在触点间移动并不在两点间区域短暂停止,由于门电路2将逻辑0回送到门1使其保持稳定。保证了锁存器输出非抖动。
把两个触点上拉至CPU的输入引脚,同样可以通过将这种电路通过软件实现。
每400~500ms读出开关,任何好的开关都会在这个时间内消除抖动,每500ms输出一次采样的结果。缺点:响应时间慢。
该方法不提供EMI(电磁干扰)保护。可以通过软件在500ms内多次读取输入,寻找一个稳定的信号,拒绝大多数EMI。
激活触点时,通常计算机会产生中断,调用一个子程序(中断服务程序)。汇编消抖程序:


消抖程序必须于硬件相匹配,开关和继电器随着年限增长将会失去弹性,使得触点停止都懂的时间增长。在键盘崭新时运行良好的消抖代码一两年后可能就失灵了。
C代码:


思路:到达某个逻辑开始计数,等计数超过某个值再判定电流脉冲为有效脉冲。
消抖只能占用计算机一小部分资源,应该选择使CPU开销最小的方法。消抖应当遵循的指南:
1、与消抖相关的CPU开销应当最小化。
2、未消抖开关必须连接已编程序的IO引脚,绝不能连接至CPU的中断。(可能导致多重中断)
3、ISR(中断服务程序)延时不能容忍。与开关状态有关的中断不应作为时钟或触发器的数据信号,因为可能违反最小时钟宽度或SH要求。
4、开关输入采样频率不应与外界时间同步,否则会产生周期性的EMI。
5、系统对开关输入立即响应。
6、使用定期器有规律间隔地中断CPU,而不是用延时来等待输入稳定,否则每次时钟频率改变都需要改变等待状态。
所以开关可以一起处理且占用CPU很少。

程序目的:确保输入稳定50ms而没有触点抖动。

输入switches_inputs为0,则输出保持为1;输入为1,则立马输出为0.
推荐通过时钟中断触发Debounces-switches,而不是固定的50ms,使设计具有可移植性。
采用外部消抖集成电路。

MAX681x系列接受一个或多个来自机械开关地抖动输入,并且在短暂的预制限制延时后产生一个完全的数字输出。

芯片内部只有当输入在整个限定周期内稳定时才会使能计数器计时,更新输出。
欠电压锁定电路当加压时输出正确,电压低于低电压阈值时,消抖电路保持通透,输出就等于没有延时的原始输入。
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它
当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有