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