一種基于微加速度計(jì)的無(wú)線教鞭系統(tǒng)設(shè)計(jì)
3 系統(tǒng)軟件設(shè)計(jì)
本文引用地址:http://www.ex-cimer.com/article/255889.htm3.1 遠(yuǎn)端子系統(tǒng)軟件設(shè)計(jì)
3.1.1 發(fā)送和接收模塊
無(wú)線RF射頻收發(fā)模塊nRF24L01通過(guò)SPI總線連接用戶端和主機(jī)端,在使用時(shí)要分別對(duì)其配置,用戶端配置為發(fā)射模式,主機(jī)端配置為接收模式,并且要嚴(yán)格按照其數(shù)據(jù)格式及流程發(fā)送和接收數(shù)據(jù)。
3.1.2 微加速度計(jì)模塊
1)寄存器中數(shù)據(jù)的重建
微加速度計(jì)ADXL345與微處理器之間通過(guò)I2C總線連接,它們之間的數(shù)據(jù)傳輸需要遵循I2C總線協(xié)議,寄存器0x32至寄存器0x37分別保存x、y、z軸輸出數(shù)據(jù),輸出數(shù)據(jù)為二進(jìn)制補(bǔ)碼,DATAx0為最低有效字節(jié),DATAx1為最高有效字節(jié),其中x代表X、Y或Z。因?yàn)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/ADXL345">ADXL345為16位數(shù)據(jù)格式,從數(shù)據(jù)寄存器中獲取加速度數(shù)據(jù)后,用戶必須對(duì)數(shù)據(jù)進(jìn)行重建。我們利用接口函數(shù)Multiple_read_ADXL345()多字節(jié)連續(xù)讀取寄存器的數(shù)據(jù),然后將高字節(jié)左移8位和低字節(jié)8位相或的方法對(duì)數(shù)據(jù)重建,且對(duì)我們來(lái)說(shuō),只需X和Z方向的加速度數(shù)據(jù)即可,程序如下:
ADXL345_DataReconstrution()
{ unsigned int Acceleration[2];
Multiple_Read_ADXL345();
Acceleration[0]=BUF[1];
ACCeleration[0]=(ACceleration[0]<<8)|BUF[0];
Acceleration[1]=BUF[5];
Acceleration[1]=(Acceleration[1]<<8)|BUF[4];
}
2)微加速度計(jì)ADXL345與普通鼠標(biāo)精度的比較
現(xiàn)在市面上普通光學(xué)鼠標(biāo)主流分辨率為400DPI,即每移動(dòng)1英寸可反饋400個(gè)不同點(diǎn)的坐標(biāo),也即該鼠標(biāo)的分辨率為25.4 mm/400=0.06 35mm。而ADXL345采用13位或10位的分辨率模式,此模式可以通過(guò)DATA_FORMAT寄存器(地址0x31)進(jìn)行設(shè)置,除此之外,該寄存器還可以沒(méi)置g的范圍,有±2 g,±4 g,±8 g,±16 g,該教鞭選擇10位模式,±2 g已經(jīng)能滿足對(duì)分辨率的要求,此時(shí)分辨率為4g/1024LSB=3.9mg/ LSB,我們是將采集到的加速度數(shù)據(jù)采用16進(jìn)制數(shù)字方式存儲(chǔ)在寄存器中,然后取出數(shù)據(jù)重建劃分步長(zhǎng)后,通過(guò)無(wú)線傳送至接收端控制鼠標(biāo)的移動(dòng),而USB鼠標(biāo)報(bào)告描述中規(guī)定,若接收到的數(shù)據(jù)為1則移動(dòng)一個(gè)像素,假設(shè)尺寸為300mm*190 mm的14寸顯示器,分辨率設(shè)置為1 024*768,那么橫向最小點(diǎn)間距為300 mm/1 024=0.293 0 mm,雖然這個(gè)數(shù)據(jù)沒(méi)有普通光學(xué)鼠標(biāo)高,但是對(duì)于一般教鞭已經(jīng)足夠,最重要的是我們可以通過(guò)軟件設(shè)置步長(zhǎng),可以在教鞭微動(dòng)的時(shí)候做出準(zhǔn)確移動(dòng),在需要情況下大幅晃動(dòng)教鞭能夠快速將光標(biāo)移動(dòng)到屏幕邊緣,符合人體工程學(xué)的要求,并且我們可以改變g值,分辨率模式及步長(zhǎng)來(lái)自由調(diào)整教鞭的移動(dòng)。設(shè)置的步長(zhǎng)程序如下:
3.2 主機(jī)端子系統(tǒng)軟件設(shè)計(jì)
圖3為接收端主程序流程圖,該接收端軟件部分主要包括:PDIUSBD12固件驅(qū)動(dòng),USB設(shè)備的枚舉過(guò)程。為了使軟件可移植性強(qiáng)、易維護(hù),采用分層的方法編寫PDIUSBD12的驅(qū)動(dòng)程序。USB驅(qū)動(dòng)程序分成接口和設(shè)備控制驅(qū)動(dòng)層、協(xié)議層和應(yīng)用層。應(yīng)用分層的方法編寫的程序條理清晰,可移植性好。而USB HID類是比較大的一個(gè)類,HID類設(shè)備屬于人機(jī)交互操作的設(shè)備。使用HID設(shè)備的一個(gè)好處就是,操作系統(tǒng)自帶了HID類的驅(qū)動(dòng)程序,而用戶無(wú)需去開發(fā)很麻煩的驅(qū)動(dòng)程序,只要直接使用API調(diào)用即可完成通信。所以我們將USB設(shè)備枚舉成HID設(shè)備,這樣就可以不用安裝驅(qū)動(dòng)而直接使用。USB設(shè)備的枚舉過(guò)程實(shí)際上就是告知PC設(shè)備描述類型。當(dāng)插入U(xiǎn)SB設(shè)備后,主機(jī)會(huì)向設(shè)備請(qǐng)求各種描述符來(lái)識(shí)別設(shè)備,包括5個(gè)標(biāo)準(zhǔn)描述符:設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符、字符串描述符和3個(gè)HID設(shè)備類特定描述符:HID描述符、報(bào)告描述符、實(shí)體描述符。當(dāng)主機(jī)從它的描述符中知道了能夠知道的所有信息后,便開始為這個(gè)設(shè)備安裝驅(qū)動(dòng)程序。此時(shí)USB枚舉過(guò)程結(jié)束,設(shè)備可以正常使用了。
4 結(jié)束語(yǔ)
本文應(yīng)用微加速度計(jì)和無(wú)線RF模塊,實(shí)現(xiàn)無(wú)線遙控的鼠標(biāo)操作。遙控有效距離可達(dá)30~60 m,功耗小,成本低,而且遙控?zé)o指向性,能大大增強(qiáng)多媒體的人機(jī)交互性能。而且該成品外觀設(shè)計(jì)合理,手感舒適,符合人體工程學(xué)設(shè)計(jì),能防止鼠標(biāo)手的出現(xiàn)。
加速度計(jì)相關(guān)文章:加速度計(jì)原理
評(píng)論