摘要: 提出了一種基于微加速度計(jì)的無線慣性鼠標(biāo)的設(shè)計(jì)方案。該方案以微加速度計(jì)ADXL213作為信號(hào)檢測(cè)元件,并采用低功耗處理器MSP430F135和RF芯片nRF401進(jìn)行信號(hào)處理與無線傳輸。按該方案設(shè)計(jì)的鼠標(biāo)結(jié)構(gòu)簡單、密封性好,在降低鼠標(biāo)功耗和提高鼠標(biāo)使用靈活性等方面具有較大的應(yīng)用前景。
1 引言
鼠標(biāo)作為PC機(jī)的輸入工具,其重要性不言而喻。但是,隨著計(jì)算機(jī)外圍設(shè)備的越來越多,各種連線也越來越多,給用戶帶來了許多的不便。于是,人們便有了無線接口的想法,迫切希望有一種鼠標(biāo),它能夠克服諸如有線的距離限制、有線鼠標(biāo)的線材損耗、連線多且錯(cuò)綜復(fù)雜等問題。在這種情況下,無線鼠標(biāo)應(yīng)運(yùn)而生。目前市場(chǎng)上的無線鼠標(biāo)幾乎都是光電射頻鼠標(biāo),它雖然克服了有線的缺點(diǎn),但在功耗、使用場(chǎng)合等方面仍然存在一些不足。
采用微加速度計(jì)設(shè)計(jì)的無線鼠標(biāo),既可以獨(dú)立使用,作為桌面PC 的鼠標(biāo);同時(shí)也可以作為單獨(dú)的模塊嵌入到現(xiàn)有的機(jī)械鼠標(biāo)和光電鼠標(biāo)中,實(shí)現(xiàn)鼠標(biāo)的懸空使用,方便用戶的操作。該設(shè)計(jì)兼顧了設(shè)計(jì)成本與鼠標(biāo)使用壽命,使得慣性鼠標(biāo)具有相當(dāng)大的競(jìng)爭力。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 信號(hào)檢測(cè)電路的設(shè)計(jì)
ADXL213是一種低成本、低功耗、集成了信號(hào)調(diào)理電路和占空比調(diào)制器的微加速度計(jì)芯片。輸出為PWM數(shù)字信號(hào),因此可與計(jì)數(shù)電路或單片機(jī)直接接口,無須放大和A/D電路。用戶只需外接三個(gè)無源器件就可以設(shè)置濾波器輸出帶寬和輸出PWM波的周期。
ADXL213的典型帶寬為1Hz~2500Hz,其-3dB帶寬公式為:
可見,帶寬主要由C(x,y)確定。C(x,y)越小,信號(hào)帶寬越寬,分辨率越高,響應(yīng)速度越快。設(shè)計(jì)時(shí),首先要確定被測(cè)加速度的頻率范圍,然后再設(shè)計(jì)濾波器的參數(shù)。盡量使濾波器的帶寬略高于信號(hào)的最高頻率,這樣做不僅有利于濾除高頻干擾,也利于降低系統(tǒng)噪聲干擾。
對(duì)于占空比的設(shè)計(jì),占空比調(diào)制器(DCM)的周期就是芯片輸出方波的周期T2。該周期是由RSEL確定的,其關(guān)系式為T2=RSEL/125MΩ(RSEL是用來設(shè)置輸出信號(hào)循環(huán)周期的電阻)。當(dāng)DCM輸出方波頻率大于模擬帶寬10倍以上,測(cè)量準(zhǔn)確度就很理想。從這一點(diǎn)來看,T2越小越好,但是T2的減小會(huì)提高對(duì)計(jì)數(shù)器以及微控制器的處理速度要求。另一方面,要提高測(cè)量的分辨率就應(yīng)該盡量提高T2時(shí)間內(nèi)的計(jì)數(shù)次數(shù),這就要求計(jì)數(shù)器和控制器有更高的處理速度,而實(shí)際中硬件的處理速度是受到器件性能限制的。綜上所述,T2是根據(jù)模擬帶寬、計(jì)數(shù)器和處理器速度以及測(cè)量分辨率的要求共同確定的。在設(shè)計(jì)時(shí)要明確測(cè)量的指標(biāo)要求,綜合考慮各種因素。
本設(shè)計(jì)中要求被測(cè)帶寬為20~50Hz,則選擇濾波器的帶寬為60Hz,選定T2為1.25ms,即DCM輸出方波頻率為800 Hz,該頻率是測(cè)量最大頻率的16倍,因此可以很好地反映加速度的變化。根據(jù)上述選擇,可以計(jì)算出電阻RSEL為156KΩ,兩個(gè)電容選用0.08μF。
對(duì)于鼠標(biāo)的按鍵設(shè)計(jì),主要是要考慮消抖??紤]到鼠標(biāo)體積、功耗等要求,設(shè)計(jì)中采用軟件延時(shí)方式來消抖。加速度計(jì)及鼠標(biāo)的按鍵信號(hào)的處理由MSP430F135單片機(jī)來完成。
設(shè)計(jì)時(shí)應(yīng)將鼠標(biāo)響應(yīng)的實(shí)時(shí)性放在第一位,而將鼠標(biāo)的功耗放在第二位。加速度計(jì)需設(shè)置一個(gè)控制開關(guān),以解決其一直有信號(hào)輸出的問題(加速度計(jì)有零漂,鼠標(biāo)傾斜等原因)。按鍵及加速度計(jì)與單片機(jī)的連接如圖1:
圖1 鼠標(biāo)按芻及加速度計(jì)與單片機(jī)的連接圖
2.2 無線模塊的設(shè)計(jì)
圖2 發(fā)送端的硬件電路圖
圖3 接收端的電路圖
傳輸模塊的關(guān)鍵是無線收發(fā)芯片??紤]到鼠標(biāo)的體積和功耗等方面的因素,無線通信模塊選用了Nordic公司的nRF401芯片。nRF401在工作時(shí),只需要外接一個(gè)晶振和幾個(gè)阻容、電感元件,基本無需測(cè)試。設(shè)計(jì)中,單片機(jī)通過異步串口與nRF401通信,然后再分別使用三個(gè)引腳作為nRF401的通信控制即可。外接晶體及阻容、電感等元件均按照nRF401推薦的典型參數(shù)值選取。發(fā)送端的硬件電路如圖2。接收端的nRF401接收到數(shù)據(jù)后通過USB接口與PC機(jī)相連,接收端的處理器采用AT89C51,具體連接見圖3。
為了獲得較好的RF性能,PCB設(shè)計(jì)至少需要兩層板來實(shí)現(xiàn),分成射頻電路和控制電路兩部分來布置。nRF401采用PCB天線,在天線的下面沒有接地面。為了減少分布參數(shù)的影響,PCB上應(yīng)該避免長的電源走線,所有元件地線,VDD連接線,VDD去耦電容必須離nRF401盡可能地近。nRF401的電源必須經(jīng)過很好的濾波,并且與數(shù)字電路的電源分離,在離電源腳VDD盡可能近的地方用高性能的電容去耦,最好是一個(gè)小電容和一個(gè)大電容相并聯(lián)。PCB板頂層和底層最好敷銅接地,把這兩層的敷銅用較多的過孔緊密相連,再將VSS腳連接到敷銅面。所有開關(guān)信號(hào)和控制信號(hào)都不能經(jīng)過PLL環(huán)路濾波器元件和VCO電感附近。
2.3 USB接口硬件設(shè)計(jì)
鼠標(biāo)與計(jì)算機(jī)的通信采用USB通信方式。USB控制芯片選擇了PHILIPS公司的PDIUSBD12。PDIUSBD12與89C51的連接如圖3,PDIUSBD12的8位并行數(shù)據(jù)接入89C51的P0口,地址線A15(P2.7)作為PDIUSBD12的片選,地址線A14(P2.6)作為PDIUSBD12的命令或數(shù)據(jù)的選擇線。PDIUSBD12 與89C51的數(shù)據(jù)交換采用中斷方式(外中斷INT0)。PDIUSBD12從USB口得到信息后向89C51發(fā)出中斷信號(hào),89C51進(jìn)入中斷處理程序進(jìn)行響應(yīng)。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 信號(hào)檢測(cè)部分的軟件設(shè)計(jì)
信號(hào)檢測(cè)部分軟件設(shè)計(jì)的關(guān)鍵是計(jì)算加速度計(jì)輸出信號(hào)的占空比,從而計(jì)算出加速度值。待機(jī)時(shí),處理器工作在低功耗模式LPM3,從而降低整個(gè)系統(tǒng)的功耗。加速度計(jì)的輸出信號(hào)接MSP430F135的比較/捕獲模塊的輸入端,為了能精確測(cè)出輸出信號(hào)的占空比,可利用MSP430F135中Timer_A的比較/捕獲模塊,令其工作在捕獲模式,且讓其在上升沿和下降沿都捕獲。在上升沿時(shí),捕獲一個(gè)定時(shí)器數(shù)據(jù),這個(gè)數(shù)據(jù)在捕獲寄存器器中讀出;再等下降沿到來,在下降沿時(shí)又捕獲一個(gè)定時(shí)器數(shù)據(jù);兩次捕獲的定時(shí)器數(shù)據(jù)差就是脈沖的寬度也即輸出信號(hào)中高電平的寬度。
限于篇幅,這里僅給出X軸的信號(hào)檢測(cè)部分的程序,分別用start和end記錄上升沿和下降沿捕獲時(shí)計(jì)數(shù)單元的值:
#include 《msp430x13x.h》
unsigned int start,end;
unsigned char overflow;
void main(void) {
WDTCTL=WDTPW+WDTHOLD; //關(guān)閉看門狗
P1DIR|=BIT0+BIT4; //P1.0設(shè)為輸出
P1SEL|=BIT1; //P1.1為模塊使用
CCTL0=CM0+SCS+CAP+CCTE0; //軟件捕獲,CCIOA
輸入,允許捕獲中斷
TACTL=TASSEL0+TACLR+TAIE+MC1; // ACLK,連續(xù)計(jì)數(shù)模式,清除TAR,允許定時(shí)器溢出中斷
_EINT(); //系統(tǒng)總中斷
for(;;){ //低功耗模式3
_BIS_SR(CPUOFF+SCG1+SCG0);
_NOP();}}
interrupt[TIMERA0_VECTOR]void TimerA0(void) {
Switch(TAIV) {
case:2; //捕獲中斷
if(CCTL0&&CM0) //上升沿
{CCTL0=(CCTL0&&(~CM0))|CM1; //改為下降沿觸發(fā)
star=TAR; //記錄初始時(shí)間
overflow=0; } //溢出計(jì)數(shù)復(fù)位
else if(CCTL0&&CM1) //下降沿
{CCTL0=(CCTL1&&(~CM1))|CM0; //改為上升沿觸發(fā)
end=TAR; } //用start、end和overflow計(jì)算寬度
break;
case 10; //定時(shí)器溢出中斷
overflow++; //溢出計(jì)數(shù)加1
break;
default: break; }}
3.2 無線通信模塊部分的軟件設(shè)計(jì)
為了節(jié)能,nRF401大多數(shù)情況下應(yīng)處于關(guān)閉狀態(tài)。由于無線部分硬件不具備自動(dòng)喚醒功能,nRF401由MSPF135根據(jù)加速度信號(hào)來喚醒。在通信模塊的設(shè)計(jì)中,鼠標(biāo)的功耗、響應(yīng)的及時(shí)性和指針定位的準(zhǔn)確性是要考慮的主要問題。鼠標(biāo)的通信是一種非對(duì)稱的單工通信,系統(tǒng)的功耗主要產(chǎn)生在鼠標(biāo)主體部分即發(fā)送端。接收端由USB接口供電,可以一直處于接收監(jiān)聽狀態(tài),不影響系統(tǒng)的功耗,因此不需要設(shè)置同步碼來喚醒接收端,可以在幀尾加上2字節(jié)的CRC校驗(yàn)來校驗(yàn)數(shù)據(jù)傳輸?shù)恼_性,提高抗干擾能力。
綜上所述,通信幀格式采用了1字節(jié)地址加4字節(jié)有效數(shù)據(jù)信息再加2字節(jié)CRC校驗(yàn)的短幀格式。當(dāng)CRC校驗(yàn)錯(cuò)誤時(shí),直接丟棄該幀。這樣做雖然犧牲了數(shù)據(jù)傳輸?shù)目煽啃裕〝?shù)據(jù)傳輸?shù)目煽啃詫?duì)鼠標(biāo)來說并不太重要),卻換來了整個(gè)系統(tǒng)功耗的降低和響應(yīng)時(shí)間的加快。
程序設(shè)計(jì)時(shí)應(yīng)注意:nRF401的通信速率最高為20kbit/s;發(fā)送數(shù)據(jù)之前需將發(fā)送端置于發(fā)射模式(TXEN = l),接收端一直打開。在待機(jī)模式,電路不接收和發(fā)射數(shù)據(jù)。待機(jī)模式轉(zhuǎn)換為發(fā)射模式的轉(zhuǎn)換時(shí)間至少2ms;待機(jī)模式轉(zhuǎn)換為接收模式的轉(zhuǎn)換時(shí)間至少3ms。
3.3 USB接口的軟件設(shè)計(jì)
USB接口的軟件設(shè)計(jì)部分包括接口外設(shè)端的固件程序、PC操作系統(tǒng)上的USB設(shè)備驅(qū)動(dòng)程序和串行通信程序。固件設(shè)計(jì)的目標(biāo)是使PDIUSBD12在USB上達(dá)到最大的傳輸速率。本方案的固件設(shè)計(jì)采用完全的中斷驅(qū)動(dòng)方式。當(dāng)CPU處理前臺(tái)任務(wù)時(shí),USB的傳輸在后臺(tái)進(jìn)行,中斷和主循環(huán)的數(shù)據(jù)交換通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)進(jìn)行。這樣既保證了最佳的傳輸速率,又簡化了編程和調(diào)試。固件結(jié)構(gòu)如圖4所示,圖中箭頭表示數(shù)據(jù)傳輸方向。
圖4 固件結(jié)構(gòu)和數(shù)據(jù)流向
固件中必須先定義命令和數(shù)據(jù)所在的地址:
unsigned char d12 _cmd xdata_at_0X7FFF;
unsigned char d12_data xdata_at_0X3FFF;
向PDIUSBD12發(fā)命令和對(duì)其進(jìn)行讀寫的子程序:
void_wrt_cmd (unsigned char command)
{d12_cmd=command;} // 向PDIUSBD發(fā)命令
void wrt_data (unsigned char tmp_data)
{d12_data=tmp_data;} // 向PDIDUSBD寫數(shù)據(jù)
void read_data()
{return (d12_data);} // 從PDIUSBD12讀數(shù)據(jù)
PDIUSBD12命令接口包括了對(duì)PDIUSBD12讀寫操作的所有命令,通過定義若干個(gè)子程序?qū)?yīng)于各自不同的命令。當(dāng)固件中其它程序需要對(duì)PDIUSBD12進(jìn)行讀寫時(shí),只須調(diào)用其中相應(yīng)的子程序。
本設(shè)計(jì)的驅(qū)動(dòng)程序直接采用了通用的USB鼠標(biāo)的驅(qū)動(dòng)程序,因而可以在很大程度上簡化軟件設(shè)計(jì)。
4 結(jié)語
本文作者創(chuàng)新點(diǎn):本設(shè)計(jì)按照低功耗系統(tǒng)的設(shè)計(jì)原則,利用加速度計(jì)和用戶操作的靈活性來判斷和檢測(cè)鼠標(biāo)的移動(dòng),設(shè)計(jì)了一種沒有活動(dòng)部件、機(jī)械傳動(dòng)機(jī)構(gòu)和光電器件的密封性好的低功耗無線慣性鼠標(biāo)。測(cè)試結(jié)果表明該無線慣性鼠標(biāo)靈敏度達(dá)到了使用要求,很好地解決了現(xiàn)有無線鼠標(biāo)存在的電池壽命低、使用場(chǎng)合不靈活等缺點(diǎn),具有較大的應(yīng)用前景。
-
鼠標(biāo)
+關(guān)注
關(guān)注
6文章
589瀏覽量
39727 -
光電器件
+關(guān)注
關(guān)注
1文章
177瀏覽量
18488 -
低功耗
+關(guān)注
關(guān)注
10文章
2362瀏覽量
103600
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論