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

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

3天内不再提示

开关抖动及消除设计

硬件攻城狮 来源:CSDN技术社区 2022-12-26 16:25 次阅读

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

49d0ca52-84f0-11ed-bfe3-dac502259ad0.jpg

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

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

滤波电容

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

49e863ce-84f0-11ed-bfe3-dac502259ad0.jpg

RC滤波+施密特触发器

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

49fa8d9c-84f0-11ed-bfe3-dac502259ad0.jpg

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

4a11d312-84f0-11ed-bfe3-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:

4a25d0d8-84f0-11ed-bfe3-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();

}

}

审核编辑:汤梓红

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

    关注

    19

    文章

    3126

    浏览量

    93478
  • 滤波电容
    +关注

    关注

    8

    文章

    457

    浏览量

    39981
  • 抖动
    +关注

    关注

    1

    文章

    69

    浏览量

    18846
  • 按键
    +关注

    关注

    4

    文章

    223

    浏览量

    57568

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

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

收藏 人收藏

    评论

    相关推荐

    如何实现软件与硬件的开关抖动设计

    开关、磁性开关和磁簧开关以及继电器等。所有开关都有一个共同点:就是有抖动。这就是它们的工作方式。 通常情况下,这种
    的头像 发表于 03-04 14:03 4253次阅读

    verilog写cpld的程序如何消除按键的抖动

    verilog写cpld的程序如何消除按键的抖动
    发表于 04-02 09:22

    消除按键抖动的两种方法分享

      按键也是机械装置,在按下或放开的一瞬间会产生抖动,如下图:    消除方法有两种:  软件除抖和硬件除抖,其中硬件除抖是应用了电容对高频信号短路的原理。  软件除抖是检测出键闭合后执行一个延时
    发表于 09-02 17:52

    如何通过软件编程实现消除键盘的抖动

    如何通过软件编程实现消除键盘的抖动?记文本答:由于按键是机械开关结构,所以当用手按下其中-一个键时,往往会出现所按键在闭合位置和断开位置之间发生跳几下后才会稳定到闭合状态的情况。在释放- .个键
    发表于 07-22 08:24

    如何消除无刷电机的静态抖动

    换相脉宽采集是什么?无刷电机PID的运算时间如何定?如何消除无刷电机的静态抖动
    发表于 08-09 06:52

    单片机如何消除按键抖动

    单片机如何消除按键抖动
    发表于 10-21 09:29

    如何消除按键抖动的影响

    按键抖动:在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。按键的抖动对于人类来说是
    发表于 01-17 07:46

    运用外部中断函数消除按键抖动

    目的实现:按键数码管数字加减,运用外部中断函数,消除按键抖动***仿真c代码#includecode unsigned char SEG[]={0XC0
    发表于 03-02 06:31

    sr锁存器是如何消除脉冲抖动的?

    数电分析,电平从高到低再到高的过程,sr锁存器是如何消除脉冲抖动的?
    发表于 04-26 11:00

    请问sr锁存器是如何消除脉冲抖动的?

    数电分析,电平从高到低再到高的过程,sr锁存器是如何消除脉冲抖动的?
    发表于 05-10 15:03

    模拟开关型防抖动电路

    模拟开关型防抖动电路
    发表于 09-11 14:14 10次下载
    模拟<b class='flag-5'>开关</b>型防<b class='flag-5'>抖动</b>电路

    按键抖动消除verilog设计

    按键作为一种机械开关,在进行按键操作时,机械接触点的弹性及电压突变等原因,在机械开关合闭的时候会出现电压抖动,因此在实际的应用当中需要做一定的处理。
    的头像 发表于 04-27 09:55 1652次阅读
    按键<b class='flag-5'>抖动</b><b class='flag-5'>消除</b>verilog设计

    rs触发器消除按键抖动的原因

    按键抖动是指由于按键接点的不完美接触而导致的按键信号在短时间内多次跳变的现象。在电子设备的设计与制造中,消除按键抖动是非常重要的一个问题。为了解决这个问题,工程师们引入了RS触发器。 第一部分:按键
    的头像 发表于 11-17 15:53 1954次阅读

    FPGA如何消除时钟抖动

    在FPGA(现场可编程门阵列)设计中,消除时钟抖动是一个关键任务,因为时钟抖动会直接影响系统的时序性能、稳定性和可靠性。以下将详细阐述FPGA中消除时钟
    的头像 发表于 08-19 17:58 1004次阅读

    CDCM7005高性能时钟同步器和抖动消除器数据表

    电子发烧友网站提供《CDCM7005高性能时钟同步器和抖动消除器数据表.pdf》资料免费下载
    发表于 08-21 11:44 0次下载
    CDCM7005高性能时钟同步器和<b class='flag-5'>抖动</b><b class='flag-5'>消除</b>器数据表