<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種基于微加速度計(jì)的無(wú)線教鞭系統(tǒng)設(shè)計(jì)

          一種基于微加速度計(jì)的無(wú)線教鞭系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2014-07-22 來(lái)源:網(wǎng)絡(luò) 收藏

            3 系統(tǒng)軟件設(shè)計(jì)

          本文引用地址:http://www.ex-cimer.com/article/255889.htm

            3.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 模塊

            1)寄存器中數(shù)據(jù)的重建

            與微處理器之間通過(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_()多字節(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)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ì)原理

          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();