中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 自制鼠標!回報率1000Hz!

        自制鼠標!回報率1000Hz!

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

        這是一個基于制作的。

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

        嘛,買一個就好了,為啥費勁做一個?

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

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

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

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

        功能/亮點

        • 鼠標回報率:實測950Hz,最大1000Hz,市面上場景鼠標回報率在500Hz左右(該數(shù)據(jù)為項目作者實測數(shù)據(jù))

        • 主控:stm32f103c8t6

        • 光電傳感器:原相paw3395

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

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

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

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

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

        硬件實現(xiàn)

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

        原理圖

        PCB圖

        軟件設計原理

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

        • PAW3395使用spi協(xié)議 驅動

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

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

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

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

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

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

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

        • 0xff,為向上移動一個單位

        • 0x01,為向下移動一個單位

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

        我是這么處理的:

        只要判斷滾輪移動就以一個單位處理,及0xff或0x01;

        其他情況為滾輪未移動,及0x80。

        但如果滾了一次后編碼器就會長時間保持一個值造成重復判斷,造成一直向上/下滾的情況,這就引出來一個新問題:什么時候將編碼器的值清零?

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

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

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

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

        成本說明

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

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

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



        關鍵詞: 鼠標 STM32 電路設計

        評論


        相關推薦

        技術專區(qū)

        關閉