張昭,修宇亮,黨麗琴,王留杰
(武夷學院 機電工程學院,福建 武夷山 354300)
鼠標是人類日常生活中最常用的設備之一,它是人們操控計算機最主要的設備之一。從最開始的機械鼠標,然后再發展到如今的光電鼠標,逐漸滿足人類的需求。隨著現代技術的不斷革新以及計算機、平板電腦等數字設備的流行,人們對鼠標的要求也不斷提高。目前市場上出現的傳統的二維操作鼠標已經滿足不了人們在三維空間操作鼠標的要求。本文設計一款適應人們需求的,可以在三維空間靈活操控的無線空中鼠標,以微控制器STC89C52RC作為主要芯片,使用集成運動傳感器MPU6050采集鼠標姿態數據,通過無線通信模塊傳輸到計算機,實現在三維空間內實時操作鼠標功能。
選用STC89C52RC作為主控部件來連接其他的各個模塊,選用MPU6050運動傳感器,利用其內帶的三軸陀螺儀傳感器進行鼠標運動數據采集,利用其內部的數字運動處理器對數據進行姿態解算,選用nRF24L01無線通信模塊來完成鼠標和接收端的數據傳輸,最后用PDIUSBD12通信模塊向計算機傳輸數據,控制計算機執行相應的操作。系統總體設計框圖如圖1所示。

圖1 無線空中鼠標系統方框圖Fig.1 Block diagram of wireless air mouse system
鼠標模塊選用MPU6050傳感器,利用其內部自帶的三軸陀螺儀來采集鼠標運動姿態信息。
2.1.1 MPU 6050陀螺儀介紹
MPU6050傳感器內部有一個3軸陀螺儀和3軸加速度傳感器[1]。該芯片結合動力學解算與動態卡爾曼濾波算法[2],能在運動狀態下將姿態數據精確穩定地輸出。MPU6050和單片機之間的通信采用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姿態解算
僅需要MPU6050中陀螺儀Y,Z軸的角速度數據,不選用三軸加速度數據是因為其是一種重力感應,數據處理較為復雜,且用加速度傳感器會不便于操作鼠標,而如果同時選用三軸陀螺儀傳感器和三軸加速度傳感器會導致鼠標靈敏度過大。MPU6050內帶的陀螺儀是用來測試角速度變化的傳感器[4],其傳感器模型圖如圖3所示。

圖3 三軸陀螺儀傳感器模型圖Fig.3 Model diagram of three-axis gyroscope sensor
而MPU6050內部自帶的三軸的陀螺儀可以同時檢測出X、Y、Z軸的轉動角速度。將其模型圖轉換成向量模型如圖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軸間的夾角。假設要檢測陀螺儀繞Y軸的旋轉角在t1到t2時間段的變化率,即AXZ角的變化率。將t1時刻的旋轉角定義為AXZ1,而t2時刻的旋轉角定義為AXZ2,則變化率為

Rate AXZ的單位則為deg/s,但是MPU6050陀螺儀通過IIC端口向單片機輸出的是ADC值。

陀螺儀測量范圍轉化為靈敏度如表1所示,如果選擇±2 000°/s的測量范圍,而內帶的陀螺儀產生的其中一個坐標軸數據為100,從圖中可以看到測量范圍在±2 000°/s下的靈敏度數據為16.4 LSB/(°/s)。根據上面的式(6)得

表1 MPU6050陀螺儀靈敏度數據Tab.1 MPU6050 gyroscope sensitivity data

表示MPU6050陀螺儀檢測到其自身正在以大概6度每秒的速度繞X軸旋轉。ADC的值也不完全都是正數,如果有負數出現則表示,其是按照規定的正方向相反的方向旋轉的。
系統接收模塊通過接收到的角速度,積分計算出鼠標轉過的角度

式中:θnow為當前角度;θlast是上次計算的角度;ω是當前測量的角速度;d t是積分時間(角速度采樣間隔)。
本鼠標還具有左鍵,右鍵,滾輪向上,向下的功能。鼠標左右鍵的按鍵數據和滾輪上下滾動的數據與陀螺儀傳感器角度數據組成6字節數據,以此來控制鼠標的移動和鼠標按鍵操作。
2.2.1 接收電路設計
接收模塊接收到鼠標運動數據,通過SPI總線傳輸到STC89C52RC單片機進行數據處理。
單片機讀取來自接收端的數據后無法直接傳輸給計算機,需要將接收到的數據封裝到USB協議包中傳輸到計算機。因此選用一款通用的USB接口芯片PDIUSBD12來實現與計算機的數據傳輸。PDIUSBD12芯片通過8位并行接口實現與單片機之間的數據傳輸。單片機與PDIUSBD12芯片相連電路如圖5所示。

圖5 單片機與PDIUSBD12連接電路Fig.5 Single chip microcomputer and PDIUSBD12 connecting circuit
無線通信的接收端和發射端選用了兩塊深圳云佳科技生產的nRF24L01芯片來完成。NRF24L01是工作在2.4~2.5 GHz全球開放的ISM頻段,而且不需要許可證就可以使用,并且擁有很高效的GFSK調制,還具有自動應答和自動重發功能,地址以及CRC檢驗功能[5]。nRF24L01通信芯片的工作模式有很多種,主要包括接收、發送、待機和掉電4中工作模式,這4種工作模式主要由CE、PWR_UP和PRIM_RX位來控制[5]。其中,收發模式有Enhanced ShockBurstTM和ShockBurstTM兩種。Enhanced ShockBurstTM收發模式下發送方要求終端設備在接收到數據后有應答信號,以便發送方檢測有無數據丟失,一旦丟失則重發數據[6]。選用Enhanced ShockBurstTM收發模式,nRF24L01芯片與單片機之間使用了串行通信。
3.1.1 鼠標模塊主程序設計
首先對整個系統進行初始化,然后開始判斷鼠標左右鍵是否被觸發,如果被觸發則獲取鼠標左右鍵數據,然后判斷鼠標滾輪上下鍵是否被觸發,如果被觸發則獲取滾輪上下鍵數據。然后獲取陀螺儀數據的Z,Y軸角速度,將其輸出的ADC值分別除以90和100賦予X,Y變量以調節靈敏度。然后將X,Y的高八位和低八位分離。最后傳輸到無線通信模塊nRF24L01的發射端,之后繼續獲取下一組數據,形成循環。發射模塊主程序流程圖如圖6所示。

圖6 鼠標模塊主程序流程圖Fig.6 Mouse module main program flow chart
3.1.3 無線通信模塊發射流程
單片機向無線通信模塊發送數據時將通過SPI接口傳到nRF24L01中,當CSN為低時,單片機會一直向nRF24L01傳輸數據。數據傳輸完畢后,設置延時,配置PWR_UP為高,PRIM_RX為高,CE為低,使nRF24L01進入發送模式,數據發送完成之后,接收端將產生應答到發射端,如果接到應答信號則數據發送完成,繼續發送下一數據,直到發送完成后進入待機模式。nRF24L01發射端流程圖如圖7所示。

圖7 nRF24L01發送數據流程圖Fig.7 Flow chart of nRF24L01 sending data
3.2.1 接收模塊主程序設計
接收模塊主程序包含一個中斷服務子程序,主要是由于單片機和PDIUSBD12芯片之間是以令牌包的形式進行的數據傳輸,PDIUSBD12芯片接收到數據后會使單片機進入中斷服務子程序來判斷PDIUSBD12三個端點的狀態。然后將從鼠標模塊接收到的數據進行數據包處理,主要是將接收到的高八位和低八位三軸角速度重新組合在一起,根據角速度計算鼠標光標X軸Y軸變化量。因為PDIUSBD12可以傳輸16字節數據。接收模塊主程序設計流程圖如圖8所示。

圖8 接收模塊主程序流程圖Fig.8 Main program flow chart of receiving module
測試工具選擇計算機、萬用表、Areson Mouse Test Program鼠標測試軟件。
鼠標實物圖如圖9、圖10所示。鼠標功能測試選用的鼠標檢測工具為Areson Mouse Test Program,可以測試出鼠標的回報率(Report Rate),還可以測試鼠標的幀數,可以反映出鼠標移動過程中的移動曲線是否平滑,除此之外還可以測試鼠標按鍵。功能測試首先測試鼠標的左右按鍵,經測試鼠標左右按鍵可正常使用,測試結果分別如圖11,圖12所示。

圖9 鼠標模塊Fig.9 Mouse module

圖10 接收模塊Fig.10 Receiving module

圖11 鼠標左側按鍵測試Fig.11 Left mouse button test

圖12 鼠標右側按鍵測試Fig.12 Right mouse button test
接著測試鼠標的回報率即從手指發出指令到電腦接收并執行相應指令的速度參數。回報率越高表示鼠標性能越好,反映在計算機顯示屏上可以看出回報率越高鼠標指針在屏幕上運動的曲線越完美,回報率越低曲線會接近多邊形。以普通的光電鼠標作為對比。光電鼠標回報率為150左右,本次設計出的無線空中鼠標回報率在50左右。反映在屏幕上曲線如圖13,14所示。

圖13 光電鼠標回報率測試Fig.13 Photoelectric mouse return test
測試中,雖然無線空中鼠標的回報率低于普通鼠標的回報率,但是并不能看出曲線的差別,因此選擇Track選項,定位顯示每一幀來觀察其中的差別。結果如圖15,16所示。從測試圖15和16中,很容易看出光電鼠標每幀之間的距離小于無線空中鼠標每幀之間的距離,這可以解釋為回報率越高的鼠標在控制鼠標光標移動的過程中移動曲線更加圓滑,如果回報率過低,則在鼠標移動的過程中可能會呈現不規則移動,會影響鼠標的性能。
經過測試本次設計的無線空中鼠標按鍵可正常使用,在移動方面雖然回報率低于光電鼠標,但并不影響鼠標的正常移動,鼠標移動的曲線較為平滑,經測試,可供正常使用。而在幀數顯示方面,兩幀之間的距離依然無法像普通光電鼠標那么短,這就導致鼠標光標在移動過程中會出現晃動,移動的曲線不夠圓滑,但在正常操作過程中感受并不明顯。

圖14 空中鼠標回報率測試Fig.14 Air mouse return test

圖15 光電鼠標幀數顯示Fig.15 Frame number display of photoelectric mouse

圖16 空中鼠標幀數顯示Fig.16 Frame number display of air mouse
以STC89C52RC單片機為控制核心,采用MPU6050傳感器對鼠標角速度進行采集和姿態解算,利用nRF24L01芯片將鼠標運動姿態信息發送到系統接收模塊。接收模塊采用單片機為控制核心,通過PDIUSBD12芯片將鼠標運動姿態數據傳輸到計算機,從而實現在三維空間控制鼠標功能。經過和普通光電鼠標對比測試證明本次設計的鼠標基本達到了預期的效果。