《硬件架构的艺术》笔记(八):消抖技术
简介
在电子设备中两个金属触点随着触点的断开闭合便产生了多个信号,这就是抖动。
消抖是用来确保每一次断开或闭合触点时只有一个信号起作用的硬件设备或软件。(就是每次断开闭合只对应一个操作)。
抖动在某些模拟和逻辑电路中可能产生问题,因为这些电路反应太快会将开关脉冲误当作数据流。
时序逻辑数字电路特别容易收到触点抖动的影响。开关抖动产生的电压波形干扰正常逻辑电路的振幅和时序规格要求。结果是亚稳定性、竞争、小脉冲和故障等问题导致电路失效。
开关行为
若开关用于开灯或启动风扇马达,则触点抖动基本没有影响,但是用作数字计数器、个人计算器或微处理器等设备的输入,由于触点抖动就会产生问题。计数器会多次计数而不是一次计数。
原因:触点停止抖动所化时间大约是毫秒级,数字电路能在ms甚至ns内响应。
通常的解决方法:消抖设备或软件可以确保在一个给定时间内(ms级)仅有唯一数字信号记录。
开关种类
上面是常见的一些开关种类。
消抖
8.4.1 RC消抖
和一个一阶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的输入引脚,同样可以通过将这种电路通过软件实现。
软件消抖电路
方案A:在足以让抖动停止的时间后读出开关
每400~500ms读出开关,任何好的开关都会在这个时间内消除抖动,每500ms输出一次采样的结果。缺点:响应时间慢。
该方法不提供EMI(电磁干扰)保护。可以通过软件在500ms内多次读取输入,寻找一个稳定的信号,拒绝大多数EMI。
方案B:开关启动时中断CPU并在中断服务程序(ISR)中消抖
激活触点时,通常计算机会产生中断,调用一个子程序(中断服务程序)。汇编消抖程序:
消抖程序必须于硬件相匹配,开关和继电器随着年限增长将会失去弹性,使得触点停止都懂的时间增长。在键盘崭新时运行良好的消抖代码一两年后可能就失灵了。
方案C:使用计数器消除噪声并验证开关状态
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系列接受一个或多个来自机械开关地抖动输入,并且在短暂的预制限制延时后产生一个完全的数字输出。
芯片内部只有当输入在整个限定周期内稳定时才会使能计数器计时,更新输出。
欠电压锁定电路当加压时输出正确,电压低于低电压阈值时,消抖电路保持通透,输出就等于没有延时的原始输入。
相关文章:

《硬件架构的艺术》笔记(八):消抖技术
简介 在电子设备中两个金属触点随着触点的断开闭合便产生了多个信号,这就是抖动。 消抖是用来确保每一次断开或闭合触点时只有一个信号起作用的硬件设备或软件。(就是每次断开闭合只对应一个操作)。 抖动在某些模拟和逻辑电路中可能产生问…...

Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
一.什么是Spring?它解决了什么问题? 1.1什么是Spring? Spring,一般指代的是Spring Framework 它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代码…...

【算法】连通块问题(C/C++)
目录 连通块问题 解决思路 步骤: 初始化: DFS函数: 复杂度分析 代码实现(C) 题目链接:2060. 奶牛选美 - AcWing题库 解题思路: AC代码: 题目链接:687. 扫雷 -…...

如何选择黑白相机和彩色相机
我们在选择成像解决方案时黑白相机很容易被忽略,因为许多新相机提供鲜艳的颜色,鲜明的对比度和改进的弱光性能。然而,有许多应用,选择黑白相机将是更好的选择,因为他们产生更清晰的图像,更好的分辨率&#…...

Rust 力扣 - 740. 删除并获得点数
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 首先对于这题我们如果将所有点数装入一个切片f中,该切片f中的i号下标表示所有点数为i的点数之和 那么这题就转换成了打家劫舍这道题,也就是求选择了切片中某个下标的元素后,该…...

OpenCV从入门到精通实战(七)——探索图像处理:自定义滤波与OpenCV卷积核
本文主要介绍如何使用Python和OpenCV库通过卷积操作来应用不同的图像滤波效果。主要分为几个步骤:图像的读取与处理、自定义卷积函数的实现、不同卷积核的应用,以及结果的展示。 卷积 在图像处理中,卷积是一种重要的操作,它通过…...

Docker核心概念总结
本文只是对 Docker 的概念做了较为详细的介绍,并不涉及一些像 Docker 环境的安装以及 Docker 的一些常见操作和命令。 容器介绍 Docker 是世界领先的软件容器平台,所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 什么是容器? 先来看看容器较为…...
环形缓冲区
什么是环形缓冲区 环形缓冲区,也称为循环缓冲区或环形队列,是一种特殊的FIFO(先进先出)数据结构。它使用一块固定大小的内存空间来缓存数据,并通过两个指针(读指针和写指针)来管理数据的读写。当任意一个指针到达缓冲区末尾时,会自动回绕到缓冲区开头,形成一个"环"。…...

jQuery-Word-Export 使用记录及完整修正文件下载 jquery.wordexport.js
参考资料: jQuery-Word-Export导出word_jquery.wordexport.js下载-CSDN博客 近期又需要自己做个 Html2Doc 的解决方案,因为客户又不想要 Html2pdf 的下载了,当初还给我费尽心思解决Html转pdf时中文输出的问题(html转pdf文件下载之…...

云服务器部署WebSocket项目
WebSocket是一种在单个TCP连接上进行全双工通信的协议,其设计的目的是在Web浏览器和Web服务器之间进行实时通信(实时Web) WebSocket协议的优点包括: 1. 更高效的网络利用率:与HTTP相比,WebSocket的握手只…...
C#+数据库 实现动态权限设置
将权限信息存储在数据库中,支持动态调整。根据用户所属的角色、特定的功能模块,动态加载权限” 1. 数据库设计 根据这种需求,可以通过以下表设计: 用户表 (Users):存储用户信息。角色表 (Roles):存储角色…...

(原创)Android Studio新老界面UI切换及老版本下载地址
前言 这两天下载了一个新版的Android Studio,发现整个界面都发生了很大改动: 新的界面的一些设置可参考一些博客: Android Studio新版UI常用设置 但是对于一些急着开发的小伙伴来说,没有时间去适应,那么怎么办呢&am…...

Ubuntu24虚拟机-gnome-boxes
推荐使用gnome-boxes, virtualbox构建失败,multipass需要开启防火墙 sudo apt install gnome-boxes创建完毕~...
k8s rainbond centos7/win10 -20241124
参考 https://www.rainbond.com/ 国内一站式云原生平台 对centos7环境支持不太行 [lighthouseVM-16-5-centos ~]$ curl -o install.sh https://get.rainbond.com && bash ./install.sh 2024-11-24 09:56:57 ERROR: Ops! Docker daemon is not running. Start docke…...
SpringBoot+Vue滑雪社区网站设计与实现
【1】系统介绍 研究背景 随着互联网技术的快速发展和冰雪运动的普及,滑雪作为一种受欢迎的冬季运动项目,吸引了越来越多的爱好者。与此同时,社交媒体和在线社区平台的兴起为滑雪爱好者提供了一个交流经验、分享心得、获取信息的重要渠道。滑…...
MySql.2
sql查询语句执行过程 SQL 查询语句的执行过程是一个复杂的过程,涉及多个步骤。以下是典型的关系数据库管理系统 (RDBMS) 中 SQL 查询语句的执行过程概述: 1. 客户端发送查询 用户通过 SQL 客户端或应用程序发送 SQL 查询语句给数据库服务器。 2. …...

算法之区间和题目讲解
题干 难度:简单 题目分析 题目要求算出每个指定区间内元素的总和。 然而,区间在输入的最下面,所以按照暴力破解的思路,我们首先要遍历数组,把它的值都存进去。 然后,遍历下面的区间,从索引a…...
价格分类(神经网络)
# 1.导入依赖包 import timeimport torch import torch.nn as nn import torch.optim as optimfrom torch.utils.data import TensorDataset, DataLoader from sklearn.model_selection import train_test_splitimport numpy as np import pandas as pd import matplotlib.pypl…...
对智能电视直播App的恶意监控
首先我们要指出中国广电总局推出的一个政策性文件是恶意监控的始作俑者,这个广电总局的政策性文件禁止智能电视和电视盒子安装直播软件。应该说这个政策性文件是为了保护特殊利益集团,阻挠技术进步和发展的。 有那么一些电视机和电视盒子的厂商和电信运…...

【JavaEE初阶】多线程初阶下部
文章目录 前言一、volatile关键字volatile 能保证内存可见性 二、wait 和 notify2.1 wait()方法2.2 notify()方法2.3 notifyAll()方法2.4 wait 和 sleep 的对比(面试题) 三、多线程案例单例模式 四、总结-保证线程安全的思路五、对比线程和进程总结 前言…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...