0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino的软件消抖代码

GReq_mcu168 来源:CSDN 作者:CSDN 2022-06-22 14:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

当按下和释放微动按键时,会由短时间的抖动现象才会到达想要的状态。如下图所示:

59b96cd8-f12c-11ec-ba43-dac502259ad0.jpg

从上图可知。按键抖动时间大概为150us。

在一些对按键抖动敏感的情况下需要进行消抖设计,目前常见的消抖设计如下:

滤波电容

关于去抖硬件最简单的方式并联一颗100nF陶瓷电容,进行滤波处理。

59ca12fe-f12c-11ec-ba43-dac502259ad0.jpg

RC滤波+施密特触发器

要想更严谨设计消抖电路,会增加施密特触发器,更大程度的保证后端不受按键抖动影响,电路如下:

59dafd80-f12c-11ec-ba43-dac502259ad0.jpg

分别来看按键闭合断开时电路状态:

59eee214-f12c-11ec-ba43-dac502259ad0.jpg

开关打开时:

电容C1通过R1 D1回路充电,Vb电压=Vcc-0.7为高电平,后通过反向施密特触发器使Vout输出为低。

开关闭合时:

电容C1通过R2进行放电,最后Vb电压变为0,通过反向施密特触发器使Vout输出为高。

当按下按键出现快速抖动现象时,通过电容会使Vb点电压快速变成Vcc或GND。在抖动过程时对电容会有轻微的充电或放电,但后端的施密特触发器有迟滞效果不会导致Vout发现抖动现象。

此电路中D1的使用使为了限制R1 R2一起给C1供电,增加充电时间影响效果。如果减小R1的值会使电流增加,功耗较高。

专用消抖芯片

一些厂家会提供专用芯片,避免自搭电路的不稳定性, 如美信-Max6816:

59fc1204-f12c-11ec-ba43-dac502259ad0.jpg

软件滤波

软件消除抖动也是很常见的方式,一般形式是延时查询按键状态或者中断形式来消除抖动。

下面是Arduino的软件消抖代码:

/* SoftwareDebounce

*

* At each transition from LOW to HIGH or from HIGH to LOW

* the input signal is debounced by sampling across

* multiple reads over several milli seconds. The input

* is not considered HIGH or LOW until the input signal

* has been sampled for at least "debounce_count" (10)

* milliseconds in the new state.

*

* Notes:

* Adjust debounce_count to reflect the timescale

* over which the input signal may bounce before

* becoming steady state

*

* Based on:

* http://www.arduino.cc/en/Tutorial/Debounce

*

* Jon Schlueter

* 30 December 2008

*

* http://playground.arduino.cc/Learning/SoftwareDebounce

*/

int inPin = 7; // the number of the input pin

int outPin = 13; // the number of the output pin

int counter = 0; // how many times we have seen new value

int reading; // the current value read from the input pin

int current_state = LOW; // the debounced input value

// the following variable is a long because the time, measured in milliseconds,

// will quickly become a bigger number than can be stored in an int.

long time = 0; // the last time the output pin was sampled

int debounce_count = 10; // number of millis/samples to consider before declaring a debounced input

void setup()

{

pinMode(inPin, INPUT);

pinMode(outPin, OUTPUT);

digitalWrite(outPin, current_state); // setup the Output LED for initial state

}

void loop()

{

// If we have gone on to the next millisecond

if(millis() != time)

{

reading = digitalRead(inPin);

if(reading == current_state && counter > 0)

{

counter--;

}

if(reading != current_state)

{

counter++;

}

// If the Input has shown the same value for long enough let's switch it

if(counter >= debounce_count)

{

counter = 0;

current_state = reading;

digitalWrite(outPin, current_state);

}

time = millis();

}

}

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波电容
    +关注

    关注

    8

    文章

    461

    浏览量

    41470
  • 陶瓷电容
    +关注

    关注

    4

    文章

    466

    浏览量

    24890

原文标题:开关抖动及消除

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    晶台KLH11LX系列丨施密特触发器光耦在按键中的应用

    在电子系统中,机械按键因机械结构特性,在按下或释放时会产生5-10ms的抖动信号,可能导致电路误判。施密特触发器光耦凭借其独特的迟滞特性,成为硬件的核心器件,而晶台推出的KLH11LX系列
    的头像 发表于 12-06 09:04 45次阅读
    晶台KLH11LX系列丨施密特触发器光耦在按键<b class='flag-5'>消</b><b class='flag-5'>抖</b>中的应用

    按键的方法

    常用的方法是判断按键按下的时候进行一定的延时,代码如下: ((KEY==)delay_ms20;whilegpio_get)0;delay_ms20;beep)//蜂鸣器提示音}这种方法简单易懂
    发表于 11-27 06:12

    硬件方案元件参数的计算方法

    硬件是通过电路设计消除机械开关(如按键、继电器等)在闭合或断开时产生的抖动信号。以下是常见硬件方案及其元件参数计算方法: 1. RC滤波
    发表于 11-19 06:31

    音电商 API 接口:音平台电商活动热度实时监测

    音作为全球领先的短视频平台,其电商业务近年来蓬勃发展,吸引了众多商家和消费者。实时监测电商活动热度,对于商家优化营销策略、平台提升用户体验至关重要。音电商 API 接口为开发者提供了高效
    的头像 发表于 08-21 15:30 564次阅读
    <b class='flag-5'>抖</b>音电商 API 接口:<b class='flag-5'>抖</b>音平台电商活动热度实时监测

    揭秘音电商 API,让音小店粉丝增长有迹可循

    ​ 在当今短视频电商时代,音已成为商家必争之地。但如何精准追踪粉丝增长,优化营销策略?音电商 API(应用程序接口)正是关键。它让商家通过数据接口获取店铺核心指标,将粉丝增长从“黑匣子”变为
    的头像 发表于 08-20 15:46 582次阅读
    揭秘<b class='flag-5'>抖</b>音电商 API,让<b class='flag-5'>抖</b>音小店粉丝增长有迹可循

    巧用音电商 API,精准分析音商品种草效果

    ​ 在当今短视频电商时代,音已成为品牌推广的核心平台。"种草"(即通过内容激发用户购买欲望)效果直接影响商品销售。然而,许多商家仅凭直觉评估推广效果,导致资源浪费。本文将介绍如何利用音电商
    的头像 发表于 08-20 15:29 782次阅读
    巧用<b class='flag-5'>抖</b>音电商 API,精准分析<b class='flag-5'>抖</b>音商品种草效果

    音电商 API 接口:开启音小店直播带货数据新洞察

    ​ 在数字化电商浪潮中,音小店凭借直播带货模式迅速崛起,成为品牌和商家的新战场。然而,如何从海量直播数据中提取有价值的洞察,优化销售策略?音电商 API 接口正是解决这一挑战的关键工具。本文将
    的头像 发表于 08-20 15:20 676次阅读
    <b class='flag-5'>抖</b>音电商 API 接口:开启<b class='flag-5'>抖</b>音小店直播带货数据新洞察

    蔡司一出手,计量也得 “”三

    编程,缩短测量时间 精度是工业的底色 而计量,才是守护这份底色的光 2025年7月 蔡司工业质量商城 怀揣着这份守护初心 正式入驻音 作为百年计量行业专家 我们准备与您一起在这里“ ”三 官号
    的头像 发表于 07-24 15:53 362次阅读
    蔡司一出手,计量也得 “<b class='flag-5'>抖</b>”三<b class='flag-5'>抖</b>

    微机谐装置优势

    微机谐装置(也称为微机谐器或智能谐装置)具有显著优势。以下是其核心优势: 1.  强大的谐振识别能力:     能够实时、精确地识别系统发生的多种类型的铁磁谐振(如分频、工频、高频谐振),以及
    的头像 发表于 06-16 15:50 468次阅读
    微机<b class='flag-5'>消</b>谐装置优势

    《ESP32S3 Arduino开发指南》第二章 Arduino基础知识

    地进行可开发。3、开放性Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内可以任意修改原始设计及相应代码。4、社区和第三方支持Arduino有着众多
    发表于 05-13 09:28

    一次谐装置与二次谐装置区别、一次谐器与二次谐器的区别

    一次谐器与二次谐器是电力系统中用于抑制谐振过电压的不同装置,主要区别如下: 安装位置:一次谐器串联于电压互感器(PT)一次侧中性点与地之间,直接承受高电压;二次谐器并联在PT
    的头像 发表于 05-07 09:58 3216次阅读
    一次<b class='flag-5'>消</b>谐装置与二次<b class='flag-5'>消</b>谐装置区别、一次<b class='flag-5'>消</b>谐器与二次<b class='flag-5'>消</b>谐器的区别

    谐装置的作用

    谐装置是电力系统中防止铁磁谐振过电压的关键设备,主要用于保护电压互感器(PT)及电网安全。当系统因单相接地、操作过电压或雷击引发PT铁芯饱和时,可能产生分频、工频或高频谐振,导致PT过热、绝缘损坏
    的头像 发表于 04-24 10:23 2066次阅读
    <b class='flag-5'>消</b>谐装置的作用

    微机谐器与一次谐器区别与联系

    微机谐器与一次谐器都是用于电力系统中抑制谐波和消除铁磁谐振的设备,
    的头像 发表于 04-22 16:21 613次阅读

    用于 SPI 绝对编码器的 Arduino 示例代码

    作者:Damon Tarry, Design Applications Engineer, Same Sky 本 Arduino 示例代码教程旨在为用户提供一个坚实的起点,以便通过串行外设接口
    的头像 发表于 01-26 21:35 1312次阅读
    用于 SPI 绝对编码器的 <b class='flag-5'>Arduino</b> 示例<b class='flag-5'>代码</b>

    TVP5150输出图像有时有时无是怎么回事?

    我现在使用贵司的TVP5150AM视频解码芯片,现在出现一个问题,用显示器显示的图像时有时无,并且有图像的情况下也有点。 我的方案是用TVP5150进行采集相机输出的视频信号,然后通过FPGA
    发表于 01-06 07:28