一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

ADC口檢測(cè)多個(gè)組合按鍵的方法

CHANBAEK ? 來源:頭條號(hào)物聯(lián)網(wǎng)全棧開發(fā) ? 作者:頭條號(hào)物聯(lián)網(wǎng)全棧 ? 2023-03-21 10:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ADC口檢測(cè)多個(gè)組合按鍵的方法

一般情況下,一個(gè)GPIO口只能連接一個(gè)按鍵,通過檢測(cè)外部輸入的高、低電平判斷按鍵的開閉狀態(tài)。

使用按鍵切換串聯(lián)或并聯(lián)的電阻網(wǎng)絡(luò)電壓的通路,可能得到該網(wǎng)絡(luò)與不同的按鍵狀態(tài)相對(duì)應(yīng)的分壓值,處理器檢測(cè)該分壓值之后再映射到按鍵狀態(tài),從而實(shí)現(xiàn)按鍵檢測(cè)。

接如果按鍵同一時(shí)刻只有一個(gè)閉合,可以用下圖分壓電阻相互串聯(lián)的方式檢測(cè)。

電阻串聯(lián)分壓的按鍵檢測(cè)電路,適用于沒有組合鍵的情況

如果按鍵存在多個(gè)同時(shí)閉合的情況,則應(yīng)該用下圖電阻并聯(lián)的方式實(shí)現(xiàn)檢測(cè);

存在多個(gè)按鍵同時(shí)被按下時(shí)的ADC檢測(cè)電路

當(dāng)需要檢測(cè)n個(gè)可能同時(shí)閉合的按鍵時(shí),存在種按鍵狀態(tài)的組合。

比如,2個(gè)按鍵存在以下4種按鍵狀態(tài)的組合:

2個(gè)按鍵的4種組合狀態(tài)

以下電路可用于2個(gè)組合按鍵的檢測(cè),

2個(gè)組合按鍵的檢測(cè)電路

2種按鍵的4種不同狀態(tài),可以得到4個(gè)不同的分壓值,經(jīng)過12位ADC轉(zhuǎn)換得到不同的ADC值,以此為中心劃分為4個(gè)區(qū)間。

4種組合狀態(tài)的ADC區(qū)間劃分

處理器通過判斷轉(zhuǎn)換得到的ADC值所在區(qū)間,以判斷輸入按鍵的狀態(tài)。

如果ADC區(qū)間范圍太小,當(dāng)按鍵處于該區(qū)間對(duì)應(yīng)的狀態(tài)時(shí),轉(zhuǎn)換的ADC值有可能因?yàn)檎`差而落在其它區(qū)間,造成按鍵狀態(tài)的誤檢測(cè),為了避免這一情況,應(yīng)該選擇合適的電阻值,使得每一組按鍵狀態(tài)對(duì)應(yīng)的ADC區(qū)間的范圍盡量大。

電阻阻值的選取

對(duì)于3個(gè)組合按鍵的ADC檢測(cè),根據(jù)上面的分析,電阻阻值的選擇轉(zhuǎn)換為以下約束條件,最大值的求解:

選擇一組電阻R2,R3,R4,R1的阻值,計(jì)算3個(gè)按鍵的8個(gè)組合狀態(tài)下的并聯(lián)電阻與R1的ADC值,以此為中心劃分8個(gè)區(qū)間,與相鄰值的平均值為邊界,劃分8個(gè)區(qū)間;

每一個(gè)區(qū)間的邊界之差為區(qū)間范圍,求得8個(gè)區(qū)間中的最小范圍值;

在所有可選阻值中,求解使得8個(gè)區(qū)間的最小范圍值最大的一組阻值。

我們可以通過編寫octave程序,將R2,R3,R4,R1遍歷所有可選阻值,求出其中使最小范圍值最大的一組阻值,程序如下:

re = linspace(1, 20, 30);%1kΩ-20kΩ之間等間隔取30個(gè)阻值
rl=length(re);
rk = [0 0 0;0 0 1;0 1 0; 0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];%3個(gè)按鍵的8種狀態(tài)列成3*8的矩陣
maxdiff = 0;
r2o = 0;
r3o = 0;
r4o = 0;
r1o = 0;
for i=1:rl
  for j=1:rl
    for m=1:rl
      for n=1:rl
         r2=re(i);
         r3=re(j);
         r4=re(m);
         r1 = re(n);
         gn = rk * [1/r2; 1/r3; 1/r4] + 0.00001;%矩陣乘法計(jì)算R2,R3,R4并聯(lián)的導(dǎo)納
         rn = 1./gn;%計(jì)算3個(gè)電阻的并聯(lián)阻抗
         ad = 4096 * r1 ./ (rn + r1);
         ads = sort(ad);
         mind = 65535;
         for p = 1:7
            nd = ads(p + 1) - ads(p);
            if(nd < mind)
              mind = nd;%計(jì)算8個(gè)區(qū)間的最小范圍值
            endif
         end
         if(mind > maxdiff)
          r2o = r2;
          r3o = r3;
          r4o = r4;
          r1o = r1;
          maxdiff = mind;//求解最小范圍值的最大值
         endif
      end
    end
  end
end
maxdiff
r2o
r3o
r4o
r1o

遍歷得到,R2=8.2kΩ,R3=10.8kΩ,R4=18.0kΩ,R1=6.3kΩ,此時(shí)8個(gè)ADC區(qū)間的最小范圍值為186。

3個(gè)按鍵8組狀態(tài)的ADC區(qū)間劃分

汽車電子設(shè)計(jì)規(guī)范對(duì)按鍵檢測(cè)的要求

根據(jù)某百年車企某特的軟硬件設(shè)計(jì)規(guī)范要求,對(duì)按鍵檢測(cè)有以下要求:

  1. 按鍵斷開時(shí),最小的絕緣電阻為100KΩ,對(duì)于涉水的開關(guān)(比如門狀態(tài)開關(guān),最小的絕緣電阻為10KΩ)
  2. 接鍵閉合時(shí),最大的接觸電阻為50Ω

考慮了絕緣電阻和接觸電阻的按鍵模式

3)對(duì)于有機(jī)械觸點(diǎn)的按鍵,在閉合瞬間,需要提供不小于10mA的潤(rùn)濕電流(wetting current)

潤(rùn)濕電流是指能夠通過維持一定的小電弧清理觸頭表面的塵垢和腐蝕以保持觸頭狀態(tài)良好的最小電流值。

采用蒙特卡洛分析可靠性

R2、R3、R4、R1選擇1%精度的電阻,考慮初始誤差,老化和溫度的影響,其阻值在95%至105%之間均勻分布;

按鍵斷開時(shí)的絕緣電阻在100KΩ-1MΩ之間均勻分布;

按鍵閉合時(shí)的絕緣電阻在0-50Ω之間均勻分布;

ADC轉(zhuǎn)換誤差在-10LSB于+10LSB之間均勻分布;

用Octave編寫蒙特卡洛仿真程序,

format long;
adc = 0:1:4095;
adcc = zeros(1, 4096);
r2=8.2;
r3=10.8;
r4=18;
r1=6.3;
n=1000000;
for i=1:n
  r2d = ((rand - 0.5)*10/100 + 1) * r2;
  r3d = ((rand - 0.5)*10/100 + 1) * r3;
  r4d = ((rand - 0.5)*10/100 + 1) * r4;
  r1n = ((rand - 0.5)*10/100 + 1) * r1;
  r2on =r2d + (rand -0.5) * 0.05 + 0.025;
  r3on =r3d + (rand -0.5) * 0.05 + 0.025;
  r4on =r4d + (rand -0.5) * 0.05 + 0.025;
  r2off =(rand - 0.5)*900 + 550;
  r3off =(rand - 0.5)*900 + 550;
  r4off =(rand - 0.5)*900 + 550;
  rk = [0 0 0;0 0 1;0 1 0; 0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];
  rki = floor(rand*8);
  rkn = rk(rki + 1,:);
  r2n = r2on;
  r3n = r3on;
  r4n = r4on;
  if(rkn(1) == 0)
    r2n = r2off;
  end
  if(rkn(2) == 0)
    r3n = r3off;
  end
  if(rkn(3) == 0)
    r4n = r4off;
  end
  rs = 1/ (1 / r2n + 1 / r3n + 1 /r4n);
  adv = r1n * 4096 / (r1n + rs);
  adn = floor(adv +(rand - 0.5) *20);
  if(adn < 0)
    adn = 0;
  end
  if(adn >= 4096)
    adn = 4095;
  end
  adn=adn+1;
  adcc(adn)=adcc(adn)+1;
end
 plot(adc, adcc);

取1000000個(gè)樣本,統(tǒng)計(jì)仿真得到的ADC值,繪制分布圖,如下:

ADC值分布圖

可見,8個(gè)按鍵組合的ADC值沒有限定在區(qū)間范圍內(nèi),而是發(fā)生了重疊。

也就是發(fā)生了按鍵狀態(tài)誤檢測(cè)的現(xiàn)象。

結(jié)束:
將一個(gè)ADC口用于檢測(cè)3個(gè)可能同時(shí)按下的按鍵時(shí),會(huì)發(fā)生誤檢測(cè)的情況。

同時(shí)使用ADC口檢測(cè)按鍵還存在沒辦法提供潤(rùn)濕電流的情況,在工作環(huán)境比較惡劣時(shí),按鍵的機(jī)械觸點(diǎn)易沾染灰塵等雜質(zhì),易被氧化,大大降低按鍵的使用壽命。

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

    關(guān)注

    6

    文章

    430

    瀏覽量

    38347
  • 檢測(cè)電路
    +關(guān)注

    關(guān)注

    13

    文章

    312

    瀏覽量

    58931
  • adc
    adc
    +關(guān)注

    關(guān)注

    99

    文章

    6705

    瀏覽量

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

    關(guān)注

    4

    文章

    227

    瀏覽量

    58069
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1280

    瀏覽量

    54064
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    DshanMCU-R128s2 ADC按鍵配置方法

    FreeRTOS平臺(tái)上使用的按鍵ADC-KEY,采用的ADC模塊為GPADC。 按鍵功能驅(qū)動(dòng)的實(shí)現(xiàn)是通過ADC分壓,使每個(gè)
    的頭像 發(fā)表于 12-22 19:11 ?2814次閱讀
    DshanMCU-R128s2 <b class='flag-5'>ADC</b><b class='flag-5'>按鍵</b>配置<b class='flag-5'>方法</b>

    采用RK2206芯片的ADC按鍵設(shè)計(jì) 含ADC驅(qū)動(dòng)程序設(shè)計(jì)

    對(duì)應(yīng)一個(gè)GPIO,進(jìn)行高低電平輸入檢測(cè)。可是在GPIO口緊缺的情況下,不得不需要一個(gè)有效的解決方案,其中ADC檢測(cè)實(shí)現(xiàn)按鍵功能是一種相對(duì)有
    發(fā)表于 03-14 13:56 ?5012次閱讀
    采用RK2206芯片的<b class='flag-5'>ADC</b><b class='flag-5'>按鍵</b>設(shè)計(jì) 含<b class='flag-5'>ADC</b>驅(qū)動(dòng)程序設(shè)計(jì)

    ADC實(shí)現(xiàn)一個(gè)IO上掛多個(gè)按鍵

    有時(shí)候做設(shè)計(jì)時(shí),我們會(huì)遇到外部按鍵比較多,IO不夠用的情況。這時(shí)大部分人會(huì)考慮通過其它芯片擴(kuò)展IO,或者直接換一個(gè)IO足夠的MCU。其實(shí),還有個(gè)方法可以實(shí)現(xiàn)一個(gè)IO上掛
    發(fā)表于 09-01 13:25 ?3429次閱讀

    使用STC15W408AS單片機(jī)I/O按鍵檢測(cè)

    在上面介紹了使用I/O點(diǎn)了LED,實(shí)際也可以用I/O按鍵檢測(cè)。這里采用的是P1.0外接按鍵
    發(fā)表于 06-15 14:53 ?1933次閱讀
    使用STC15W408AS單片機(jī)I/O<b class='flag-5'>口</b>的<b class='flag-5'>按鍵</b><b class='flag-5'>檢測(cè)</b>

    【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】一個(gè)ADC實(shí)現(xiàn)多個(gè)按鍵檢測(cè)

    檢測(cè)多個(gè)按鍵按鍵被按下之后,與ADC引腳相連的點(diǎn)的電壓會(huì)隨著參與分壓的電阻變化而變化,我們只要讓每個(gè)
    發(fā)表于 11-14 13:34

    單片機(jī)如何用一個(gè)IO采集多個(gè)按鍵信號(hào)?

    按鍵信號(hào)的采集方法,可以用一個(gè)IO采集多個(gè)按鍵信號(hào),不僅電路簡(jiǎn)單,而且編程比較容易實(shí)現(xiàn)。該方法
    發(fā)表于 11-26 16:51

    使用獨(dú)立按鍵進(jìn)行控制IO

    到獨(dú)立按鍵進(jìn)行控制。通常一個(gè)獨(dú)立按鍵需要使用一個(gè)IO,如果項(xiàng)目需要按鍵實(shí)現(xiàn)多個(gè)功能,往往需要使用到多個(gè)
    發(fā)表于 01-05 06:29

    如何使用ADC實(shí)現(xiàn)多按鍵功能

    我們?cè)谑褂们度胧焦δ荛_發(fā)的時(shí)候經(jīng)常需要使用按鍵實(shí)現(xiàn)一些功能。按鍵一般接觸較多的就是獨(dú)立按鍵,但一般情況上會(huì)需要多個(gè)按鍵,使用獨(dú)立
    發(fā)表于 01-07 06:32

    如何用I/O按鍵檢測(cè)

    在上面介紹了使用I/O點(diǎn)了LED,實(shí)際也可以用I/O按鍵檢測(cè)。這里采用的是P1.0外接按鍵
    發(fā)表于 02-18 06:43

    如何利用ADC的特點(diǎn)實(shí)現(xiàn)單片機(jī)用一個(gè)I/O采集多個(gè)按鍵信號(hào)?

    我們知道,一般情況下單片機(jī)的一個(gè)I/O作為普通I/O的話,只能檢測(cè)識(shí)別一個(gè)按鍵。日常設(shè)計(jì)中,如果碰到按鍵數(shù)量較多的話,會(huì)采用行列式鍵盤,
    的頭像 發(fā)表于 10-03 18:40 ?1.9w次閱讀
    如何利用<b class='flag-5'>ADC</b>的特點(diǎn)實(shí)現(xiàn)單片機(jī)用一個(gè)I/O采集<b class='flag-5'>多個(gè)</b><b class='flag-5'>按鍵</b>信號(hào)?

    使用ADC設(shè)計(jì)按鍵電路的應(yīng)用說明

    .使用ADC方式的按鍵電路,具有硬件電路簡(jiǎn)單、按鍵電路與單片機(jī)連線少、能節(jié)省I/O、易于修改、節(jié)省成本等優(yōu)點(diǎn)。但在按鍵數(shù)比較多時(shí),如果軟硬
    發(fā)表于 11-20 17:48 ?24次下載
    使用<b class='flag-5'>ADC</b>設(shè)計(jì)<b class='flag-5'>按鍵</b>電路的應(yīng)用說明

    如何實(shí)現(xiàn)單片機(jī)用一個(gè)I/O采集多個(gè)按鍵信號(hào)?

    如何實(shí)現(xiàn)單片機(jī)用一個(gè)I/O采集多個(gè)按鍵信號(hào) 使用模數(shù)轉(zhuǎn)換(ADC)的特點(diǎn)就可以實(shí)現(xiàn)單片機(jī)用一個(gè)I/O采集多個(gè)按鍵信號(hào)。 一、單片機(jī)的I/O
    發(fā)表于 02-11 14:23 ?11次下載
    如何實(shí)現(xiàn)單片機(jī)用一個(gè)I/O采集<b class='flag-5'>多個(gè)</b><b class='flag-5'>按鍵</b>信號(hào)?

    簡(jiǎn)述采用蒙特卡洛分析可靠性

    ADC檢測(cè)多個(gè)組合按鍵方法 一般情況下,一個(gè)G
    的頭像 發(fā)表于 05-29 11:56 ?1690次閱讀
    簡(jiǎn)述采用蒙特卡洛分析可靠性

    采用ADC掃描實(shí)現(xiàn)一個(gè)IO上掛多個(gè)按鍵

    有時(shí)候做設(shè)計(jì)時(shí),我們會(huì)遇到外部按鍵比較多,IO不夠用的情況。這時(shí)大部分人會(huì)考慮通過其它芯片擴(kuò)展IO,或者直接換一個(gè)IO足夠的MCU。其實(shí),還有個(gè)方法可以實(shí)現(xiàn)一個(gè)IO上掛
    的頭像 發(fā)表于 08-11 09:16 ?3075次閱讀
    采用<b class='flag-5'>ADC</b>掃描實(shí)現(xiàn)一個(gè)IO上掛<b class='flag-5'>多個(gè)</b><b class='flag-5'>按鍵</b>

    硬件設(shè)計(jì)如何實(shí)現(xiàn)一個(gè)IO上掛多個(gè)按鍵

    有時(shí)候做設(shè)計(jì)時(shí),我們會(huì)遇到外部按鍵比較多,IO不夠用的情況。這時(shí)大部分人會(huì)考慮通過其它芯片擴(kuò)展IO,或者直接換一個(gè)IO足夠的MCU。其實(shí),還有個(gè)方法可以實(shí)現(xiàn)一個(gè)IO上掛
    發(fā)表于 08-11 09:16 ?1755次閱讀
    硬件設(shè)計(jì)如何實(shí)現(xiàn)一個(gè)IO上掛<b class='flag-5'>多個(gè)</b><b class='flag-5'>按鍵</b>?