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?!?/p>
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 = 04095;
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ì),易被氧化,大大降低按鍵的使用壽命。
-
電阻
+關(guān)注
關(guān)注
86文章
5528瀏覽量
172320 -
adc
+關(guān)注
關(guān)注
98文章
6514瀏覽量
545071 -
GPIO
+關(guān)注
關(guān)注
16文章
1213瀏覽量
52185
原文標(biāo)題:采用蒙特卡洛分析可靠性
文章出處:【微信號(hào):電子工程師筆記,微信公眾號(hào):電子工程師筆記】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論