开关抖动及消除

分享到:

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

1

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

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

    滤波电容

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

2

 

    RC滤波+施密特触发器

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

3

 

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

4

开关打开时:

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

开关闭合时:

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

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

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

    专用消抖芯片

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

 

    软件滤波

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

下面是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();

  }

}

继续阅读
霍尔开关原理及参数

霍尔开关在物联网方面设计使用越来越多,尤其在一些智能表计领域,常用于复位激活功能。霍尔开关是一种有源磁电转换器件,它是在霍尔效应原理的基础上把磁输入信号转换为电信号。可以把它理解为“磁性开关”。霍尔开关这种非接触式触发对产品一体性具有很大的优势。

开关抖动及消除

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

新兴汽车功能开关应用

自动驾驶汽车人工智能的发展正在改变人们的驾驶体验。全自动驾驶车辆将彻底改变汽车驾驶舱。事实上,我们已经看到了具有半自动驾驶功能的汽车的出现。功能性和舒适性是驱动汽车内部变化的主要因素。考虑到车辆中的功能越来越多,设计师和工程师必须花时间优化驾驶员和新驾驶舱环境之间的用户界面。

通过AC整流桥上的有源开关提高效率和功率密度

提高功率转换效率和功率密度一直是电力行业的主要目标。在过去的十年中,由于功率器件、拓扑结构和控制方案的发展,已经取得了巨大的进步。超结MOSFET、SiC二极管和最新的GaNFET的开发确保了在更高频率下更高的开关效率;同时,先进拓扑及其相应控制方案的实现也在高速发展。

多开关结构的固态功控系统的开发设计

伴随着电子技术和计算机技术的飞速发展,国内先进飞机配电系统研究的技术手段也突飞猛进,固态功控系统的研究,就是基于目前飞机配电系统的发展而出现的,目前市场上的都是单开关结构,最近多开关的SSPC组已经处于研发之中,SSPC组共享大规模控制芯片,可进一步提高功率密度和扩展功能。