在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 自制鼠標(biāo)!回報(bào)率1000Hz!

            自制鼠標(biāo)!回報(bào)率1000Hz!

            作者: 時(shí)間:2024-12-06 來源:嘉立創(chuàng) 收藏

            這是一個(gè)基于制作的

            本文引用地址:http://www.biyoush.com/article/202412/465287.htm

            嘛,買一個(gè)就好了,為啥費(fèi)勁做一個(gè)?

            本人在做數(shù)字圖像處理時(shí),接觸過一款adns3080光流傳感器,能夠近距離拍照生成黑白像素圖像。

            深入了解后,發(fā)現(xiàn)其原理竟然使用的傳感器原理一樣!索性就自己嘗試著做了一個(gè)鼠標(biāo)!

            且本著要做就做最好的原則,還選擇了當(dāng)時(shí)最流行的鼠標(biāo)傳感器paw3395,希望能給同樣想DIY鼠標(biāo)的伙伴提供一些參考意義!

            本文主要分享——功能亮點(diǎn)、硬件實(shí)現(xiàn)、軟件設(shè)計(jì)原理、成本說明

            功能/亮點(diǎn)

            • 鼠標(biāo)回報(bào)率:實(shí)測(cè)950Hz,最大1000Hz,市面上場(chǎng)景鼠標(biāo)回報(bào)率在500Hz左右(該數(shù)據(jù)為項(xiàng)目作者實(shí)測(cè)數(shù)據(jù))

            • 主控:stm32f103c8t6

            • 光電傳感器:原相paw3395

            • 使用HID協(xié)議與電腦通訊

            • 目前以實(shí)現(xiàn)市面上鼠標(biāo)所有基本功能,正常鼠標(biāo)功能:光標(biāo)移動(dòng)、左右鍵、中鍵、滾輪、DPI切換,DPI切換時(shí)LED閃爍3次

            • 拓展功能:兩個(gè)自定義按鍵(已預(yù)留接口),本例程未添加

            • 尼龍外殼:基于嘉立創(chuàng)3D打印

            • 電路:基于嘉立創(chuàng)EDA設(shè)計(jì),尺寸支持免費(fèi)打樣

            硬件實(shí)現(xiàn)

            硬件比較簡(jiǎn)單,本質(zhì)就是stm32最小系統(tǒng)板 + PAW3395驅(qū)動(dòng)電路 + 按鍵和滾輪電路+3D外殼的適配。

            原理圖

            PCB圖

            軟件設(shè)計(jì)原理

            • 總體架構(gòu)使用類RTOS操作系統(tǒng) 的架構(gòu)

            • PAW3395使用spi協(xié)議 驅(qū)動(dòng)

            • 使用CbueMX自動(dòng)生成初始HID協(xié)議

            • 自定義HID報(bào)文發(fā)送函數(shù),聲明一個(gè)HID報(bào)文發(fā)送任務(wù),每1ms更新一次位移數(shù)據(jù) 并向電腦發(fā)送報(bào)文

            滾輪數(shù)據(jù)更新的原理?

            本章主要解決:滾輪不靈敏or滾輪一直往上/下滾動(dòng)的問題

            在CubeMX中使用TIM2的編碼器模式,默認(rèn)配置如下:

            想理解滾輪數(shù)據(jù)更新的原理,首先要搞清楚,在HID協(xié)議中,滾輪的各項(xiàng)數(shù)據(jù):

            • 滾輪數(shù)據(jù)為0x80時(shí),代表滾輪未移動(dòng)

            • 0xff,為向上移動(dòng)一個(gè)單位

            • 0x01,為向下移動(dòng)一個(gè)單位

            其他數(shù)值為向上或向下移動(dòng)好幾個(gè)單位,移動(dòng)距離太大,我們把握不住,該怎么解決?

            我是這么處理的:

            只要判斷滾輪移動(dòng)就以一個(gè)單位處理,及0xff或0x01;

            其他情況為滾輪未移動(dòng),及0x80。

            但如果滾了一次后編碼器就會(huì)長(zhǎng)時(shí)間保持一個(gè)值造成重復(fù)判斷,造成一直向上/下滾的情況,這就引出來一個(gè)新問題:什么時(shí)候?qū)⒕幋a器的值清零?

            很簡(jiǎn)單,判斷完就清零,將判斷出來的數(shù)值暫存在 wheel_num 中,通過上面剛自定義的報(bào)文發(fā)送函數(shù) myMouse_update() 每1ms發(fā)送給電腦。

            每1ms發(fā)送給電腦是最佳選擇嗎?

            1ms要做的事情太多了,既要spi讀鼠標(biāo)位移值,又要發(fā)送HID報(bào)文給電腦,還要判斷滾輪數(shù)據(jù),容易時(shí)序紊亂。所以最終我測(cè)試出每5ms判斷一次,會(huì)更合理,也符合實(shí)際使用,因此最終代碼如下:

            //更新滾輪數(shù)據(jù)void Mouse_wheel_Updata(void){  if((int16_t)__HAL_TIM_GET_COUNTER(&htim2) > 0)// 返回16位數(shù)據(jù),如果需要負(fù)值要強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換
                wheel_num = 0xFF;   
              else if((int16_t)__HAL_TIM_GET_COUNTER(&htim2) < 0)    wheel_num = 0x01;  else
                wheel_num = 0x80;  
              //清除編碼器計(jì)數(shù)
              TIM2->CNT=0;  // x表示第幾個(gè)定時(shí)器,例如TIM8->CNT=0;}

            成本說明

            鼠標(biāo)成本:200元以內(nèi)。

            后期可以控制在:50元以內(nèi)。

            開源參考資料:
            https://oshwhub.com/lidongze/shu-biao-zhong-ji-ban



            評(píng)論


            相關(guān)推薦

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

            關(guān)閉