張昭,修宇亮,黨麗琴,王留杰
(武夷學(xué)院 機(jī)電工程學(xué)院,福建 武夷山 354300)
鼠標(biāo)是人類日常生活中最常用的設(shè)備之一,它是人們操控計算機(jī)最主要的設(shè)備之一。從最開始的機(jī)械鼠標(biāo),然后再發(fā)展到如今的光電鼠標(biāo),逐漸滿足人類的需求。隨著現(xiàn)代技術(shù)的不斷革新以及計算機(jī)、平板電腦等數(shù)字設(shè)備的流行,人們對鼠標(biāo)的要求也不斷提高。目前市場上出現(xiàn)的傳統(tǒng)的二維操作鼠標(biāo)已經(jīng)滿足不了人們在三維空間操作鼠標(biāo)的要求。本文設(shè)計一款適應(yīng)人們需求的,可以在三維空間靈活操控的無線空中鼠標(biāo),以微控制器STC89C52RC作為主要芯片,使用集成運(yùn)動傳感器MPU6050采集鼠標(biāo)姿態(tài)數(shù)據(jù),通過無線通信模塊傳輸?shù)接嬎銠C(jī),實(shí)現(xiàn)在三維空間內(nèi)實(shí)時操作鼠標(biāo)功能。
選用STC89C52RC作為主控部件來連接其他的各個模塊,選用MPU6050運(yùn)動傳感器,利用其內(nèi)帶的三軸陀螺儀傳感器進(jìn)行鼠標(biāo)運(yùn)動數(shù)據(jù)采集,利用其內(nèi)部的數(shù)字運(yùn)動處理器對數(shù)據(jù)進(jìn)行姿態(tài)解算,選用nRF24L01無線通信模塊來完成鼠標(biāo)和接收端的數(shù)據(jù)傳輸,最后用PDIUSBD12通信模塊向計算機(jī)傳輸數(shù)據(jù),控制計算機(jī)執(zhí)行相應(yīng)的操作。系統(tǒng)總體設(shè)計框圖如圖1所示。
圖1 無線空中鼠標(biāo)系統(tǒng)方框圖Fig.1 Block diagram of wireless air mouse system
鼠標(biāo)模塊選用MPU6050傳感器,利用其內(nèi)部自帶的三軸陀螺儀來采集鼠標(biāo)運(yùn)動姿態(tài)信息。
2.1.1 MPU 6050陀螺儀介紹
MPU6050傳感器內(nèi)部有一個3軸陀螺儀和3軸加速度傳感器[1]。該芯片結(jié)合動力學(xué)解算與動態(tài)卡爾曼濾波算法[2],能在運(yùn)動狀態(tài)下將姿態(tài)數(shù)據(jù)精確穩(wěn)定地輸出。MPU6050和單片機(jī)之間的通信采用400 kHz的IIC接口。MPU6050陀螺儀可測范圍為±250,±500,±1000,±2000°/秒(dps),加速度計可測范圍為±2,±4,±8,±16 g[3]。MPU6050外圍電路如圖2所示。
圖2 MPU6050外圍電路Fig.2 Peripheral circuit of MPU6050
2.1.2 MPU 6050姿態(tài)解算
僅需要MPU6050中陀螺儀Y,Z軸的角速度數(shù)據(jù),不選用三軸加速度數(shù)據(jù)是因?yàn)槠涫且环N重力感應(yīng),數(shù)據(jù)處理較為復(fù)雜,且用加速度傳感器會不便于操作鼠標(biāo),而如果同時選用三軸陀螺儀傳感器和三軸加速度傳感器會導(dǎo)致鼠標(biāo)靈敏度過大。MPU6050內(nèi)帶的陀螺儀是用來測試角速度變化的傳感器[4],其傳感器模型圖如圖3所示。
圖3 三軸陀螺儀傳感器模型圖Fig.3 Model diagram of three-axis gyroscope sensor
而MPU6050內(nèi)部自帶的三軸的陀螺儀可以同時檢測出X、Y、Z軸的轉(zhuǎn)動角速度。將其模型圖轉(zhuǎn)換成向量模型如圖4所示。由模型圖,可以看到RXZ是R向量在X/Z兩軸所形成的平面上的投影,RYZ是R向量在Y/Z兩軸平面上的投影,通過勾股定理,可以得到
圖4 三軸陀螺儀傳感器向量模型圖Fig.4 Vector model diagram of three-axis gyroscope sensor
同樣可以得到
如圖4定義AXZ為RXZ和Z軸間的夾角,AYZ為RYZ和Z軸間的夾角。假設(shè)要檢測陀螺儀繞Y軸的旋轉(zhuǎn)角在t1到t2時間段的變化率,即AXZ角的變化率。將t1時刻的旋轉(zhuǎn)角定義為AXZ1,而t2時刻的旋轉(zhuǎn)角定義為AXZ2,則變化率為
Rate AXZ的單位則為deg/s,但是MPU6050陀螺儀通過IIC端口向單片機(jī)輸出的是ADC值。
陀螺儀測量范圍轉(zhuǎn)化為靈敏度如表1所示,如果選擇±2 000°/s的測量范圍,而內(nèi)帶的陀螺儀產(chǎn)生的其中一個坐標(biāo)軸數(shù)據(jù)為100,從圖中可以看到測量范圍在±2 000°/s下的靈敏度數(shù)據(jù)為16.4 LSB/(°/s)。根據(jù)上面的式(6)得
表1 MPU6050陀螺儀靈敏度數(shù)據(jù)Tab.1 MPU6050 gyroscope sensitivity data
表示MPU6050陀螺儀檢測到其自身正在以大概6度每秒的速度繞X軸旋轉(zhuǎn)。ADC的值也不完全都是正數(shù),如果有負(fù)數(shù)出現(xiàn)則表示,其是按照規(guī)定的正方向相反的方向旋轉(zhuǎn)的。
系統(tǒng)接收模塊通過接收到的角速度,積分計算出鼠標(biāo)轉(zhuǎn)過的角度
式中:θnow為當(dāng)前角度;θlast是上次計算的角度;ω是當(dāng)前測量的角速度;d t是積分時間(角速度采樣間隔)。
本鼠標(biāo)還具有左鍵,右鍵,滾輪向上,向下的功能。鼠標(biāo)左右鍵的按鍵數(shù)據(jù)和滾輪上下滾動的數(shù)據(jù)與陀螺儀傳感器角度數(shù)據(jù)組成6字節(jié)數(shù)據(jù),以此來控制鼠標(biāo)的移動和鼠標(biāo)按鍵操作。
2.2.1 接收電路設(shè)計
接收模塊接收到鼠標(biāo)運(yùn)動數(shù)據(jù),通過SPI總線傳輸?shù)絊TC89C52RC單片機(jī)進(jìn)行數(shù)據(jù)處理。
單片機(jī)讀取來自接收端的數(shù)據(jù)后無法直接傳輸給計算機(jī),需要將接收到的數(shù)據(jù)封裝到USB協(xié)議包中傳輸?shù)接嬎銠C(jī)。因此選用一款通用的USB接口芯片PDIUSBD12來實(shí)現(xiàn)與計算機(jī)的數(shù)據(jù)傳輸。PDIUSBD12芯片通過8位并行接口實(shí)現(xiàn)與單片機(jī)之間的數(shù)據(jù)傳輸。單片機(jī)與PDIUSBD12芯片相連電路如圖5所示。
圖5 單片機(jī)與PDIUSBD12連接電路Fig.5 Single chip microcomputer and PDIUSBD12 connecting circuit
無線通信的接收端和發(fā)射端選用了兩塊深圳云佳科技生產(chǎn)的nRF24L01芯片來完成。NRF24L01是工作在2.4~2.5 GHz全球開放的ISM頻段,而且不需要許可證就可以使用,并且擁有很高效的GFSK調(diào)制,還具有自動應(yīng)答和自動重發(fā)功能,地址以及CRC檢驗(yàn)功能[5]。nRF24L01通信芯片的工作模式有很多種,主要包括接收、發(fā)送、待機(jī)和掉電4中工作模式,這4種工作模式主要由CE、PWR_UP和PRIM_RX位來控制[5]。其中,收發(fā)模式有Enhanced ShockBurstTM和ShockBurstTM兩種。Enhanced ShockBurstTM收發(fā)模式下發(fā)送方要求終端設(shè)備在接收到數(shù)據(jù)后有應(yīng)答信號,以便發(fā)送方檢測有無數(shù)據(jù)丟失,一旦丟失則重發(fā)數(shù)據(jù)[6]。選用Enhanced ShockBurstTM收發(fā)模式,nRF24L01芯片與單片機(jī)之間使用了串行通信。
3.1.1 鼠標(biāo)模塊主程序設(shè)計
首先對整個系統(tǒng)進(jìn)行初始化,然后開始判斷鼠標(biāo)左右鍵是否被觸發(fā),如果被觸發(fā)則獲取鼠標(biāo)左右鍵數(shù)據(jù),然后判斷鼠標(biāo)滾輪上下鍵是否被觸發(fā),如果被觸發(fā)則獲取滾輪上下鍵數(shù)據(jù)。然后獲取陀螺儀數(shù)據(jù)的Z,Y軸角速度,將其輸出的ADC值分別除以90和100賦予X,Y變量以調(diào)節(jié)靈敏度。然后將X,Y的高八位和低八位分離。最后傳輸?shù)綗o線通信模塊nRF24L01的發(fā)射端,之后繼續(xù)獲取下一組數(shù)據(jù),形成循環(huán)。發(fā)射模塊主程序流程圖如圖6所示。
圖6 鼠標(biāo)模塊主程序流程圖Fig.6 Mouse module main program flow chart
3.1.3 無線通信模塊發(fā)射流程
單片機(jī)向無線通信模塊發(fā)送數(shù)據(jù)時將通過SPI接口傳到nRF24L01中,當(dāng)CSN為低時,單片機(jī)會一直向nRF24L01傳輸數(shù)據(jù)。數(shù)據(jù)傳輸完畢后,設(shè)置延時,配置PWR_UP為高,PRIM_RX為高,CE為低,使nRF24L01進(jìn)入發(fā)送模式,數(shù)據(jù)發(fā)送完成之后,接收端將產(chǎn)生應(yīng)答到發(fā)射端,如果接到應(yīng)答信號則數(shù)據(jù)發(fā)送完成,繼續(xù)發(fā)送下一數(shù)據(jù),直到發(fā)送完成后進(jìn)入待機(jī)模式。nRF24L01發(fā)射端流程圖如圖7所示。
圖7 nRF24L01發(fā)送數(shù)據(jù)流程圖Fig.7 Flow chart of nRF24L01 sending data
3.2.1 接收模塊主程序設(shè)計
接收模塊主程序包含一個中斷服務(wù)子程序,主要是由于單片機(jī)和PDIUSBD12芯片之間是以令牌包的形式進(jìn)行的數(shù)據(jù)傳輸,PDIUSBD12芯片接收到數(shù)據(jù)后會使單片機(jī)進(jìn)入中斷服務(wù)子程序來判斷PDIUSBD12三個端點(diǎn)的狀態(tài)。然后將從鼠標(biāo)模塊接收到的數(shù)據(jù)進(jìn)行數(shù)據(jù)包處理,主要是將接收到的高八位和低八位三軸角速度重新組合在一起,根據(jù)角速度計算鼠標(biāo)光標(biāo)X軸Y軸變化量。因?yàn)镻DIUSBD12可以傳輸16字節(jié)數(shù)據(jù)。接收模塊主程序設(shè)計流程圖如圖8所示。
圖8 接收模塊主程序流程圖Fig.8 Main program flow chart of receiving module
測試工具選擇計算機(jī)、萬用表、Areson Mouse Test Program鼠標(biāo)測試軟件。
鼠標(biāo)實(shí)物圖如圖9、圖10所示。鼠標(biāo)功能測試選用的鼠標(biāo)檢測工具為Areson Mouse Test Program,可以測試出鼠標(biāo)的回報率(Report Rate),還可以測試鼠標(biāo)的幀數(shù),可以反映出鼠標(biāo)移動過程中的移動曲線是否平滑,除此之外還可以測試鼠標(biāo)按鍵。功能測試首先測試鼠標(biāo)的左右按鍵,經(jīng)測試鼠標(biāo)左右按鍵可正常使用,測試結(jié)果分別如圖11,圖12所示。
圖9 鼠標(biāo)模塊Fig.9 Mouse module
圖10 接收模塊Fig.10 Receiving module
圖11 鼠標(biāo)左側(cè)按鍵測試Fig.11 Left mouse button test
圖12 鼠標(biāo)右側(cè)按鍵測試Fig.12 Right mouse button test
接著測試鼠標(biāo)的回報率即從手指發(fā)出指令到電腦接收并執(zhí)行相應(yīng)指令的速度參數(shù)?;貓舐试礁弑硎臼髽?biāo)性能越好,反映在計算機(jī)顯示屏上可以看出回報率越高鼠標(biāo)指針在屏幕上運(yùn)動的曲線越完美,回報率越低曲線會接近多邊形。以普通的光電鼠標(biāo)作為對比。光電鼠標(biāo)回報率為150左右,本次設(shè)計出的無線空中鼠標(biāo)回報率在50左右。反映在屏幕上曲線如圖13,14所示。
圖13 光電鼠標(biāo)回報率測試Fig.13 Photoelectric mouse return test
測試中,雖然無線空中鼠標(biāo)的回報率低于普通鼠標(biāo)的回報率,但是并不能看出曲線的差別,因此選擇Track選項(xiàng),定位顯示每一幀來觀察其中的差別。結(jié)果如圖15,16所示。從測試圖15和16中,很容易看出光電鼠標(biāo)每幀之間的距離小于無線空中鼠標(biāo)每幀之間的距離,這可以解釋為回報率越高的鼠標(biāo)在控制鼠標(biāo)光標(biāo)移動的過程中移動曲線更加圓滑,如果回報率過低,則在鼠標(biāo)移動的過程中可能會呈現(xiàn)不規(guī)則移動,會影響鼠標(biāo)的性能。
經(jīng)過測試本次設(shè)計的無線空中鼠標(biāo)按鍵可正常使用,在移動方面雖然回報率低于光電鼠標(biāo),但并不影響鼠標(biāo)的正常移動,鼠標(biāo)移動的曲線較為平滑,經(jīng)測試,可供正常使用。而在幀數(shù)顯示方面,兩幀之間的距離依然無法像普通光電鼠標(biāo)那么短,這就導(dǎo)致鼠標(biāo)光標(biāo)在移動過程中會出現(xiàn)晃動,移動的曲線不夠圓滑,但在正常操作過程中感受并不明顯。
圖14 空中鼠標(biāo)回報率測試Fig.14 Air mouse return test
圖15 光電鼠標(biāo)幀數(shù)顯示Fig.15 Frame number display of photoelectric mouse
圖16 空中鼠標(biāo)幀數(shù)顯示Fig.16 Frame number display of air mouse
以STC89C52RC單片機(jī)為控制核心,采用MPU6050傳感器對鼠標(biāo)角速度進(jìn)行采集和姿態(tài)解算,利用nRF24L01芯片將鼠標(biāo)運(yùn)動姿態(tài)信息發(fā)送到系統(tǒng)接收模塊。接收模塊采用單片機(jī)為控制核心,通過PDIUSBD12芯片將鼠標(biāo)運(yùn)動姿態(tài)數(shù)據(jù)傳輸?shù)接嬎銠C(jī),從而實(shí)現(xiàn)在三維空間控制鼠標(biāo)功能。經(jīng)過和普通光電鼠標(biāo)對比測試證明本次設(shè)計的鼠標(biāo)基本達(dá)到了預(yù)期的效果。