《硬件架构的艺术》笔记(八):消抖技术
简介
在电子设备中两个金属触点随着触点的断开闭合便产生了多个信号,这就是抖动。
消抖是用来确保每一次断开或闭合触点时只有一个信号起作用的硬件设备或软件。(就是每次断开闭合只对应一个操作)。
抖动在某些模拟和逻辑电路中可能产生问题,因为这些电路反应太快会将开关脉冲误当作数据流。
时序逻辑数字电路特别容易收到触点抖动的影响。开关抖动产生的电压波形干扰正常逻辑电路的振幅和时序规格要求。结果是亚稳定性、竞争、小脉冲和故障等问题导致电路失效。
开关行为
若开关用于开灯或启动风扇马达,则触点抖动基本没有影响,但是用作数字计数器、个人计算器或微处理器等设备的输入,由于触点抖动就会产生问题。计数器会多次计数而不是一次计数。
原因:触点停止抖动所化时间大约是毫秒级,数字电路能在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 的对比(面试题) 三、多线程案例单例模式 四、总结-保证线程安全的思路五、对比线程和进程总结 前言…...
macOS上进行Ant Design Pro实战教程(一)
由于一个AI项目的前端使用了umi,本教程根据阿里官网上的 《Ant Design 实战教程(beta 版)》来实操一下,我使用macOS操作系统,VS Code 开发环境。 一、开发环境 1、安装nodejs, npm, yarn 官网上建议使用cnpm…...
智能合约运行原理
点个关注吧!! 用一句话来总结,智能合约就像是一个自动售货机:你投入硬币(触发条件),选择商品(执行合约),然后机器就会自动给你商品(执行结果&…...
安卓动态添加View
在安卓应用中,有很多时候需要动态添加View。比如从后台获取商品列表,根据商品数量在页面渲染对应数量的条目,这时候就需要动态添加View。 1.动态添加View的方法 动态添加View有两种方法: 由代码生成子View:这种方式…...
前端预览pdf文件流
需求 后端接口返回pdf文件流,实现新窗口预览pdf。 解决方案 把后端返回的pdf文件流转为blob路径,利用浏览器直接预览。 具体实现步骤 1、引入axios import axios from axios;2、创建预览方法(具体使用时将axios的请求路径替换为你的后端…...
【测试工具JMeter篇】JMeter性能测试入门级教程(一)出炉,测试君请各位收藏了!!!
一、前言 Apache JMeter是纯Java的开源软件,最初由Apache软件基金会的Stefano Mazzocchi开发,旨在加载测试功能行为和测量性能。可以使用JMeter进行性能测试,即针对重负载、多用户和并发流量测试Web应用程序。 我们选择JMeter原因 是否测试过…...
【zookeeper03】消息队列与微服务之zookeeper集群部署
ZooKeeper 集群部署 1.ZooKeeper 集群介绍 ZooKeeper集群用于解决单点和单机性能及数据高可用等问题。 集群结构 Zookeeper集群基于Master/Slave的模型 处于主要地位负责处理写操作)的主机称为Leader节点,处于次要地位主要负责处理读操作的主机称为 follower 节点…...
从 Llama 1 到 3.1:Llama 模型架构演进详解
编者按: 面对 Llama 模型家族的持续更新,您是否想要了解它们之间的关键区别和实际性能表现?本文将探讨 Llama 系列模型的架构演变,梳理了 Llama 模型从 1.0 到 3.1 的完整演进历程,深入剖析了每个版本的技术创新&#…...
UE5肉鸽游戏教程学习
学习地址推荐:UE5肉鸽项目实战教程_哔哩哔哩_bilibili...
Vue3 - 详细实现虚拟列表前端虚拟滚动列表解决方案,vue3长列表优化之虚拟列表,解决列表动态高度不固定高度及图片视频图文异步请求加载问题,虚拟列表DOM大量数据同时加载渲染卡顿太慢及下滑列表闪烁
前言 Vue2 版本,请访问 这篇文章 在 vue3 项目开发中,详解实现虚拟列表高度不固定(不定高)且复杂含有图片视频等复杂虚拟列表教程,决列表每项高度不确定及img图像或视频的加载方案,利用缓冲区技术解决用户浏览时渲染不及时列表闪烁白屏/列表加载闪屏,解vue3实现虚拟列表优…...
英语知识网站开发:Spring Boot框架技巧
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了英语知识应用网站的开发全过程。通过分析英语知识应用网站管理的不足,创建了一个计算机管理英语知识应用网站的方案。文章介绍了英语知识应用网站的系…...
江苏省建设厅网站首页/百度怎么推广自己的信息
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。 1.命令格式: head [参数]... [文件]... 2…...
翻译 插件 wordpress/内容营销的4个主要方式
python 列表用法总结 本文为python中最重要的数据类型列表的基础用法笔记。 列表理解 python 是基于值的的自动内存管理方式,每个变量、元素都指向内存地址,修改都是对内存地址操作,不是修改值 。记住这一点对理解python很重要 。 列表是内…...
网站建设公司组织架构/新乡seo顾问
Variance变性泛型的某个方面会让人感到奇怪,比如下面的代码是不合法的—— IList<string> strings new List<string>(); IList<object> objects strings; 第二个赋值是不允许的,因为strings和objects的元素类型并不一样。这样…...
沁阳发布疫情防控通告/官网关键词优化价格
一、面向连接的协议 UDP是一种无连接的协议,而TCP则是一种面向连接的协议。所谓面向连接的协议,就是在两个对等端内部网之间直接建立逻辑连接。 它通过跟踪数据的传送,并确认和跟踪序号来确保它成功到达接收方。简单来说,TCP传输数…...
艺考有哪些专业/公司的seo是什么意思
饮水思源:蓝叶博客:http://lanye.org/web/136.html新浪的视频播放器很酷,可以进行普通与高清影片质量切换,可以全屏 且无广告,播放很流畅,蓝叶换了点时间,把新浪的播放器代码找了出来 方便把新浪…...
想象力网站建设公司/百度ocpc怎么优化
检查点: 检查自己的页面是http还是https的,然后核对用的是mqtt/mqtts,或者是ws/wss检查自己的地址是否对(尤其是BasePath),我一开始地址应该是ws://xxxxx/mqtt(BasePath是mqtt)&…...