(廈門華聯(lián)電子有限公司,福建 廈門 361006)
電荷轉(zhuǎn)移感應(yīng)按鍵設(shè)計(jì)說(shuō)明書
吳文勇
(廈門華聯(lián)電子有限公司,福建 廈門 361006)
本文主要講述電容電荷轉(zhuǎn)移理論,并根據(jù)此理論設(shè)計(jì)電荷轉(zhuǎn)移電路,最終由電荷轉(zhuǎn)移電路與倍壓脈沖發(fā)生器實(shí)現(xiàn)電荷轉(zhuǎn)移感應(yīng)按鍵功能。此感應(yīng)按鍵可應(yīng)用于玻璃、塑料等作為面板的非接觸式人機(jī)操作輸入。
電荷轉(zhuǎn)移;電容感應(yīng);容抗;倍壓
感應(yīng)技術(shù)正在迅速地成為人機(jī)界面操作的媒介,人們?cè)趹?yīng)用并享受這種全新的技術(shù)所帶來(lái)的方便、美觀、無(wú)機(jī)械壽命等好處。本文就個(gè)人研發(fā)的新型感應(yīng)設(shè)計(jì)技術(shù)作詳細(xì)說(shuō)明。
本文設(shè)計(jì)的感應(yīng)按鍵模塊有兩部分組成,一部分是共用的倍壓高頻脈沖發(fā)生器模塊,用于給另一部分電路提供高頻的脈沖信號(hào),另一部分是感應(yīng)按鍵能量轉(zhuǎn)移電路模塊。每一路按鍵采用一個(gè)轉(zhuǎn)移電路模塊,例如產(chǎn)品設(shè)計(jì)兩個(gè)按鍵,那么只要采用一個(gè)脈沖發(fā)器模塊和兩個(gè)感應(yīng)按鍵能量轉(zhuǎn)移電路模塊,再結(jié)合帶ADC轉(zhuǎn)換功能的MCU即可。在目前電子產(chǎn)品中MCU是不可缺少的一部分,所以設(shè)計(jì)人員并不需要額外增加MCU,就可以完成他的設(shè)計(jì)。
其中:XC= 1/ωC,稱為容抗,單位為 Ω(歐姆),容抗的倒數(shù)稱為容納BC = ωC,單位為 S。由(式-1)可見頻率和容抗成反比, 也就是頻率越高,容抗越小,如圖2曲線所示。
ω→0 , |XC|→∞直流開路(隔直)
ω→∞,|XC|→0高頻短路(旁路作用)
ε為極板與極板之間的介電常數(shù)
S 為極板面積
d 為極板與極板之間的間距
圖1
圖2
圖3
圖4
圖5
如圖5所示,設(shè)剛開始PULSE電壓為0V,則電源5V經(jīng)過(guò)二極管D2向C4充電。經(jīng)過(guò) ( τ=RC)后,C4電壓為5-VD2(VD2為二極管D1或D2 PN結(jié)的正向壓降,下同)。當(dāng)PULSE由0V變?yōu)?V時(shí),三極管Q2導(dǎo)通,三極管Q1截止,電壓VA為5V+C4兩端電壓,得出VA=5+5-VD2。二極管D1截止,二極管D2導(dǎo)通,PULSE_OUT電壓為10-2*VD2。當(dāng)PULSE電壓由5V變?yōu)?V時(shí),三極管Q2截止,三極管Q1導(dǎo)通,PULSE_OUT電壓變?yōu)?V。如
此循環(huán),可得PULSE_OUT脈沖電壓為10-2*VD2,頻率與PULSE相同。
電荷轉(zhuǎn)移電路:如圖6所示,在無(wú)手指情況下,當(dāng)脈沖由低電平變高電平時(shí),Ut經(jīng)過(guò)C1,C2,D1,R1對(duì)C3進(jìn)行充電;當(dāng)脈沖由高電平變低電平時(shí),C1,C2經(jīng)過(guò)D2進(jìn)行放電;放電后當(dāng)脈沖又產(chǎn)生高電平時(shí)又經(jīng)過(guò)C1,C2,D1,R1對(duì)C3進(jìn)行充電,如此循環(huán)C3即可以得到穩(wěn)定電壓U0。當(dāng)手指靠近電極時(shí),如圖7所示,此時(shí)人體與電極產(chǎn)生如圖所示的電容Cx,電容容量在幾PF到十幾PF。此時(shí)當(dāng)脈沖由低電平變高電平時(shí),Ut除了通過(guò)C1,C2,D1,R1對(duì)C3充電外,還對(duì)Cx充電,所以Cx得到了一部分電荷。根據(jù)電路形式Ut提供給C3的電荷明顯減?。划?dāng)脈沖由高電平變?yōu)榈碗娖綍r(shí),Cx經(jīng)過(guò)R3進(jìn)行放電,所以脈沖電壓Ut可以循環(huán)對(duì)Cx充電。也就是說(shuō)每個(gè)脈沖周期都會(huì)轉(zhuǎn)移一部分電荷到Cx,C3得到的電荷減少,電壓U0降低。根據(jù)以上分析得出,當(dāng)手指靠近電極時(shí),U0電壓將會(huì)降低。根據(jù)這個(gè)結(jié)論,MCU對(duì)U0進(jìn)行AD采樣并判斷采樣數(shù)據(jù)就可以知道是否有手指靠近,從而判斷是否有按鍵按下,實(shí)現(xiàn)感應(yīng)按鍵的目的。
圖6
圖7
本軟件設(shè)計(jì)采用AVR單片機(jī)ATmega16。AVR單片機(jī)的推出,徹底打破這種舊設(shè)計(jì)格局,廢除了機(jī)器周期,拋棄復(fù)雜指令計(jì)算機(jī)(CISC)追求指令完備的做法;采用精簡(jiǎn)指令集,以字作為指令長(zhǎng)度單位,將內(nèi)容豐富的操作數(shù)與操作碼安排在一字之中(指令集中占大多數(shù)的單周期指令都是如此),取指周期短,又可預(yù)取指令,實(shí)現(xiàn)流水作業(yè),故可高速執(zhí)行指令。
AVR單片機(jī)硬件結(jié)構(gòu)采取8位機(jī)與16位機(jī)的折中策略,即采用局部寄存器(32個(gè)寄存器文件)和單體高速輸入/輸出的方案(即輸入捕獲寄存器、輸出比較匹配寄存器及相應(yīng)控制邏輯)。提高了指令執(zhí)行速度(1Mips/MHz),克服了瓶頸現(xiàn)象,增強(qiáng)了功能;同時(shí)又減少了對(duì)外設(shè)管理的開銷,相對(duì)簡(jiǎn)化了硬件結(jié)構(gòu),降低了成本。故AVR單片機(jī)在軟/硬件開銷、速度、性能和成本諸多方面取得了優(yōu)化平衡,是高性價(jià)比的單片機(jī)。
ATmega16有一個(gè)10位的逐次逼近型ADC。ADC與一個(gè)8通道的模擬多路復(fù)用器連接,能對(duì)來(lái)自端口A的8路單端輸入電壓進(jìn)行采樣。單端電壓輸入以0V(GND)為基準(zhǔn)。器件還支持16路差分電壓輸入組合。兩路差分輸入(ADC1、ADC0與ADC3、ADC2)有可編程增益級(jí),在A/D轉(zhuǎn)換前給差分輸入電壓提供0dB(1x)、20dB(10x)或46dB(200x)的放大級(jí)。七路差分模擬輸入通道共享一個(gè)通用負(fù)端(ADC1),而其他任何ADC輸入可做為正輸入端。如果使用1x或10x增益,可得到8位分辨率。如果使用200x增益,可得到7位分辨率。
本設(shè)計(jì)主要采用Atmega16的ADC功能,選用8位分辨率采用方式,啟用ADC中斷功能。部分程序如下:
主程序:
void main(void)
{
// port initialization
// Watchdog Timer initialization
// Watchdog Timer Prescaler∶ OSC/128k
#pragma optsize-
//WDTCR=0x19;
//WDTCR=0x09;
#ifdef _OPTIMIZE_ SIZE_
#pragma optsize+
#endif
ADC_init();
// Global enable interrupts
#asm("sei");
Get_sensor_standard();//大約需要1秒鐘
while (1)
{
// Place your code here
}
ADC中斷采樣程序(采樣多個(gè)感應(yīng)按鍵):
interrupt [ADC_INT] void AD_INT(void)
{
register static unsigned char num; //采用register static 可以減少入棧及出棧時(shí)間,提高運(yùn)行速度
//設(shè)置CD4051通道
PORTC &= 0x3e;
P O R T C |= A D_C D 4 0 5 1_ MUX1[Channel];
//感應(yīng)按鍵采樣
num = ADC_Sensor[Channel]. ConvertNum;
A D C_S e n s o r[C h a n n e l]. CacheValue[num] = ADCH;
if(++ADC_Sensor[Channel]. ConvertNum >= DATA_NUM)
{
ADC_Sensor[Channel].ConvertNum = 0;
for(num = 0; num < DATA_NUM; num++)
ADC_Sensor[Channel].Value[num] = ADC_Sensor[Channel].CacheValue[num]; //完成一個(gè)通道采樣
setbit(ADC_Sensor[Channel].State, AD_COMPLETE_BIT);//設(shè)置當(dāng)前通道完成標(biāo)志
}
//ADC通道循環(huán)
if(++Channel >= CHANNEL)Channel = 0;
// Start the AD conversion
ADMUX = AD_MUX[Channel];
ADCSRA|=0x40;
}
[1]邱關(guān)源.電路[M].北京:高等教育出版社.
[2]Bruce Eckel.C++編程思想[M].北京:機(jī)械工業(yè)出版社.
[3]李火林,鄧聲南,甘筱青.?dāng)?shù)學(xué)模型及方法[M].江西:江西高校出版社.
[4]寧建國(guó).AVR單片機(jī)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社.
TP21
B