0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

開關(guān)抖動及消除設(shè)計

硬件攻城獅 ? 來源:CSDN技術(shù)社區(qū) ? 2022-12-26 16:25 ? 次閱讀

當(dāng)按下和釋放微動按鍵時,會由短時間的抖動現(xiàn)象才會到達(dá)想要的狀態(tài)。如下圖所示:

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

從上圖可知。按鍵抖動時間大概為150us。

在一些對按鍵抖動敏感的情況下需要進(jìn)行消抖設(shè)計,目前常見的消抖設(shè)計如下:

濾波電容

關(guān)于去抖硬件最簡單的方式并聯(lián)一顆100nF陶瓷電容,進(jìn)行濾波處理。

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

RC濾波+施密特觸發(fā)器

要想更嚴(yán)謹(jǐn)設(shè)計消抖電路,會增加施密特觸發(fā)器,更大程度的保證后端不受按鍵抖動影響,電路如下:

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

分別來看按鍵閉合斷開時電路狀態(tài):

4a11d312-84f0-11ed-bfe3-dac502259ad0.jpg

開關(guān)打開時:

電容C1通過R1 D1回路充電,Vb電壓=Vcc-0.7為高電平,后通過反向施密特觸發(fā)器使Vout輸出為低。

開關(guān)閉合時:

電容C1通過R2進(jìn)行放電,最后Vb電壓變?yōu)?,通過反向施密特觸發(fā)器使Vout輸出為高。

當(dāng)按下按鍵出現(xiàn)快速抖動現(xiàn)象時,通過電容會使Vb點電壓快速變成Vcc或GND。在抖動過程時對電容會有輕微的充電或放電,但后端的施密特觸發(fā)器有遲滯效果不會導(dǎo)致Vout發(fā)現(xiàn)抖動現(xiàn)象。

此電路中D1的使用使為了限制R1 R2一起給C1供電,增加充電時間影響效果。如果減小R1的值會使電流增加,功耗較高。

專用消抖芯片

一些廠家會提供專用芯片,避免自搭電路的不穩(wěn)定性, 如美信-Max6816:

4a25d0d8-84f0-11ed-bfe3-dac502259ad0.jpg

軟件濾波

軟件消除抖動也是很常見的方式,一般形式是延時查詢按鍵狀態(tài)或者中斷形式來消除抖動。

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

}

}

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開關(guān)
    +關(guān)注

    關(guān)注

    19

    文章

    3088

    瀏覽量

    93147
  • 濾波電容
    +關(guān)注

    關(guān)注

    8

    文章

    455

    瀏覽量

    39887
  • 抖動
    +關(guān)注

    關(guān)注

    1

    文章

    68

    瀏覽量

    18807
  • 按鍵
    +關(guān)注

    關(guān)注

    4

    文章

    222

    瀏覽量

    57491

原文標(biāo)題:開關(guān)抖動及消除

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何實現(xiàn)軟件與硬件的開關(guān)抖動設(shè)計

    開關(guān)、磁性開關(guān)和磁簧開關(guān)以及繼電器等。所有開關(guān)都有一個共同點:就是有抖動。這就是它們的工作方式。 通常情況下,這種
    的頭像 發(fā)表于 03-04 14:03 ?4075次閱讀

    verilog寫cpld的程序如何消除按鍵的抖動?

    verilog寫cpld的程序如何消除按鍵的抖動?
    發(fā)表于 04-02 09:22

    消除按鍵抖動的兩種方法分享

      按鍵也是機械裝置,在按下或放開的一瞬間會產(chǎn)生抖動,如下圖:    消除方法有兩種:  軟件除抖和硬件除抖,其中硬件除抖是應(yīng)用了電容對高頻信號短路的原理?! ≤浖妒菣z測出鍵閉合后執(zhí)行一個延時
    發(fā)表于 09-02 17:52

    如何通過軟件編程實現(xiàn)消除鍵盤的抖動

    如何通過軟件編程實現(xiàn)消除鍵盤的抖動?記文本答:由于按鍵是機械開關(guān)結(jié)構(gòu),所以當(dāng)用手按下其中-一個鍵時,往往會出現(xiàn)所按鍵在閉合位置和斷開位置之間發(fā)生跳幾下后才會穩(wěn)定到閉合狀態(tài)的情況。在釋放- .個鍵
    發(fā)表于 07-22 08:24

    如何消除無刷電機的靜態(tài)抖動

    換相脈寬采集是什么?無刷電機PID的運算時間如何定?如何消除無刷電機的靜態(tài)抖動
    發(fā)表于 08-09 06:52

    單片機如何消除按鍵抖動?

    單片機如何消除按鍵抖動
    發(fā)表于 10-21 09:29

    如何消除按鍵抖動的影響

    按鍵抖動:在機械按鍵的觸點閉合和斷開時,都會產(chǎn)生抖動,為了保證系統(tǒng)能正確識別按鍵的開關(guān),就必須對按鍵的抖動進(jìn)行處理。按鍵的抖動對于人類來說是
    發(fā)表于 01-17 07:46

    運用外部中斷函數(shù)消除按鍵抖動

    目的實現(xiàn):按鍵數(shù)碼管數(shù)字加減,運用外部中斷函數(shù),消除按鍵抖動***仿真c代碼#includecode unsigned char SEG[]={0XC0
    發(fā)表于 03-02 06:31

    sr鎖存器是如何消除脈沖抖動的?

    數(shù)電分析,電平從高到低再到高的過程,sr鎖存器是如何消除脈沖抖動的?
    發(fā)表于 04-26 11:00

    請問sr鎖存器是如何消除脈沖抖動的?

    數(shù)電分析,電平從高到低再到高的過程,sr鎖存器是如何消除脈沖抖動的?
    發(fā)表于 05-10 15:03

    模擬開關(guān)型防抖動電路

    模擬開關(guān)型防抖動電路
    發(fā)表于 09-11 14:14 ?10次下載
    模擬<b class='flag-5'>開關(guān)</b>型防<b class='flag-5'>抖動</b>電路

    按鍵抖動消除verilog設(shè)計

    按鍵作為一種機械開關(guān),在進(jìn)行按鍵操作時,機械接觸點的彈性及電壓突變等原因,在機械開關(guān)合閉的時候會出現(xiàn)電壓抖動,因此在實際的應(yīng)用當(dāng)中需要做一定的處理。
    的頭像 發(fā)表于 04-27 09:55 ?1565次閱讀
    按鍵<b class='flag-5'>抖動</b><b class='flag-5'>消除</b>verilog設(shè)計

    rs觸發(fā)器消除按鍵抖動的原因

    按鍵抖動是指由于按鍵接點的不完美接觸而導(dǎo)致的按鍵信號在短時間內(nèi)多次跳變的現(xiàn)象。在電子設(shè)備的設(shè)計與制造中,消除按鍵抖動是非常重要的一個問題。為了解決這個問題,工程師們引入了RS觸發(fā)器。 第一部分:按鍵
    的頭像 發(fā)表于 11-17 15:53 ?1617次閱讀

    FPGA如何消除時鐘抖動

    在FPGA(現(xiàn)場可編程門陣列)設(shè)計中,消除時鐘抖動是一個關(guān)鍵任務(wù),因為時鐘抖動會直接影響系統(tǒng)的時序性能、穩(wěn)定性和可靠性。以下將詳細(xì)闡述FPGA中消除時鐘
    的頭像 發(fā)表于 08-19 17:58 ?424次閱讀

    CDCM7005高性能時鐘同步器和抖動消除器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCM7005高性能時鐘同步器和抖動消除器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-21 11:44 ?0次下載
    CDCM7005高性能時鐘同步器和<b class='flag-5'>抖動</b><b class='flag-5'>消除</b>器數(shù)據(jù)表