記錄一下自己用STM32完整開發一臺雙模機械鍵盤的過程(附代碼和原理圖)

前一陣老友提了個需求,感覺現在市面上的鍵盤都不咋好用,想搞一套自己隨意定義鍵位的機械鍵盤。稍微查了一下,現在市面上這種客製化鍵盤基本都是arduino開發的一些方案,倒是也沒啥不好,就是感覺爲了把燈做的更絢麗就又加了一塊MCU,然後還沒有什麼雙模的開源解決方案,其中最讓人受不了的就是,鍵位設定很難受,朋友表示作爲一個資深程序員無法接受這種訂製不到位的鍵盤,於是乎我們抽了幾天時間,重新開發了一套鍵盤。這份博客就是我用自己的鍵盤寫的,感覺還不錯。下面分幾段來慢慢記錄這個鍵盤的完成過程。

先附鏈接:https://github.com/BG2CRW/CoopBoard

做鍵盤要準備出如下東西:PCB,定位板,軸,鍵帽,殼,一大堆原件

第一步肯定是先定結構然後畫一套板子(參考http://tieba.baidu.com/p/4592747695?traceid=的帖子)
這一步比較簡單,有很多工具可以用,我們在這一步需要把大PCB和定位板做出來,這裏首先要推兩個網站:
鍵位編輯網站http://www.keyboard-layout-editor.com/#/
定位板生成網站http://builder.swillkb.com/
先用上面網站生成配列,這是我的40%鍵盤配列,個人追求小且好用

可以直接修改rawdata,W是鍵寬度,H是鍵上下高度,A表示鍵上字符的位置
修改完成後就複製raw data,然後打開下面的網站
軸位形狀一般選第三種,然後draw my cad即可
這裏下載DXF格式的cad圖
接下來就是導入AD中
選文件-導入即可
然後就會出現一個對話框,如果你沒有安裝插件就不能像下面這樣導入DXF格式,解決辦法請百度“ad無法導入dxf“
導入時要注意三個地方,單位mm,位置-每次導入都要保持相同位置,我一般就是(0,0),導入層-一般選機械層2就行,製作多配列時,可以把其他配列DXF導入到其他機械層,修改鍵位時只要選擇顯示哪個層就行了
這裏pcb形狀更改一下,按住shift多選四個邊框,然後在設計-板子形狀裏按如下選擇即可
生成特定外形的PCB

再接着就是個精細的機械操作了,選中軸的器件拖動到對應的鍵位上,可以按住ctl加鼠標滾輪放大縮小,並且可以按方向鍵精確調整位置,總之這裏的位置一定要精確,不要差太多,也不要把鍵所在位置搞錯,平下心慢慢來,這裏真急不得!

這裏放完所有軸之後就可以放衛星軸和螺絲固定孔位了
衛星軸在pcb上
說白了就是四個無焊盤的通孔,可以根據cherry的mx軸規格表現畫,原理圖庫和封裝庫均在github上,即本文開始時放的鏈接
選工具欄中放置器件(快捷鍵PC)
放置封裝,在封裝右邊點… 打開封裝庫
選擇對應的衛星軸寬度
這裏還有注意一點,一般1X衛星軸一般都是細孔在上,粗孔在下,空格的衛星軸則相反,當然,有時候也要看定位板,一般要保證,cad圖上的橫線正好穿過通孔的中間
擺放完畢就可以開始佈線了,佈線方法就不多說了,但是不建議大家自動佈線,本鍵盤的原理圖已經在github中放出供大家參考。

然後稍微講一講CoopBoard的設計思想,考慮到開板成功率,將來升級兼容性和成本因素,本鍵盤分爲兩塊PCB。大板我們稱之爲IO板,小板稱之爲核心板。IO板顧名思義,沒有單片機,所有的LED,按鍵,開關等接口通過FPC排線引出,由於面積大,這塊板打板我們需要一步成功,不再返工,至於核心板我們稍後再說。現在IO板繪製完成後,要打4個M3的螺絲孔以便將來PCB與殼子進行固定。大家在畫PCB的時候記得畫上就好。IO板上是留有一個電池的位置和一個開關的位置,這些全都通過FPC引出。

在覈心板上我們在設計的時候就要考慮電源管理,usb接口,藍牙接口,不過我現在出的這版是純USB的版本,不帶電源管理和藍牙通信模塊,不過核心板上留的串口是爲了擴展用的。

然後在往加工廠發定位板的時候,發1mm的就好,然後dxf文件上同樣也一定記得在對應位置上打孔,這個大家隨便畫一下就好。

然後一大塊就是畫殼,我使用solidworks畫的,然後用自家3D打印機打的


尺寸再大點我家機器估計就hold不住了。個人感覺顏值還是很高的,stl文件也在我的github中有,大家可以一看。


小板還沒出的時候,其實我們就已經可以開始組裝了,顏值還是很高的,大家上眼瞧


當然,我的審美不太好,大家也不要吐槽。安裝過程中在衛星軸的安裝那個地方大家需要自己百度一下安裝方法,不同的衛星軸安裝方法不太一樣,並且挺麻煩。

接下來就可以開始考慮核心板的程序問題了,單片機採用STM32F103RCT6,一款物美價廉,性能強悍的單片機。功能在設計的時候爲了方便每一個用戶可以自由更改按鍵定義,並且在沒有STLINK的時候,也可以通過USB進行程序升級和燒寫,於是我開發了一個新的bootloader程序,這段代碼在燒寫的時候佔在程序區的前面一塊,程序在上電的時候如果沒有檢測到第一列按鍵被按下則跳轉到後面的程序,即正常的鍵盤工作代碼。如果按下了鍵盤第一列的任意按鍵,那麼上電的時候,鍵盤就會卡在USB燒寫程序的位置,設備管理器中會出現一個DFU,然後使用專用的燒寫工具即可將生成的固件hex燒寫進入單片機。具體燒寫方法在最後會詳細進行說明。

目前程序開發也不完全,僅僅完成了鍵盤功能的開發,對燈還沒有進行開發,但是硬件上是支持每個單色LED可控,在我們的IO板上大家可以看到均使用74HC595進行控制,並且在輸出加掛了三極管進行驅動,已測試每個燈都能達到較大亮度。

程序頂層全部C++進行開發,在編譯的時候要勾選use mircolib,否則無法編譯。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章