在幾年前蘋果提出了iphone 7,用震動回饋來代替了實體的home鍵,一直到iphone 8出現,都使用著震動回饋的home鍵,如今,可以將震動回饋反應至鍵盤上,可以讓紅軸或是黑軸等線性軸得到震動的回饋,震動時代表著有按鍵被觸發或是釋放,也就是常見的壓下以及放開,QMK讓鍵盤可以使用DRV2605L
的馬達驅動模組來驅動震動馬達,當然震動馬達有分成兩種,一種是比較旋轉馬達(Eccentric Rotating Mass vibration motors, ERM),透過轉動偏心的重物來提供震動,另一種則是比較貴的x軸線性馬達(Linear resonant actuators, LRA),透過彈簧以及磁鐵來提供震動,在此將介紹兩種不同的馬達以及測試可以用的馬達。
QMK的官網特別提供了兩種測試可用的馬達,一種是LV061228B-L65-A
,是一種LAR震動馬達,另一種是Mini Motor Disc
,是一種ERM馬達,照片分別如下所示
QMK 使用DRV2605L
來驅動馬達,或者可以透過一隻單獨的接腳來控制馬達(但要記得提供馬達電源,需搭配合適的驅動電流),因此建議使用DRV2605L
來驅動馬達,比較不需擔心電流問題。DRV2605L
使用I2C
與鍵盤的控制器連接,因此需把鍵盤控制器32u4
上的I2C
接腳空出來,不然無法接上此控制板。
使用DRV2605L
來驅動馬達時,需要在rules.mk
加入下列這行
HAPTIC_ENABLE += DRV2605L
然後在config.h
裡面加上這一些,分為ERM以及LRA的版本,兩種版本都要了解所使用的馬達的合理驅動電壓,若不參照所使用的馬達的datasheet時,則後果自負
#define FB_ERM_LRA 0
#define FB_BRAKEFACTOR 3 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* Please refer to your datasheet for the optimal setting for your specific motor. */
#define RATED_VOLTAGE 3
#define V_PEAK 5
#define FB_ERM_LRA 1
#define FB_BRAKEFACTOR 3 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* Please refer to your datasheet for the optimal setting for your specific motor. */
#define RATED_VOLTAGE 2
#define V_PEAK 2.8
#define V_RMS 2.0
#define V_PEAK 2.1
#define F_LRA 205 /* resonance freq */
keycode | 描述 |
---|---|
HPT_ON | 開啟震動模式 |
HPT_OFF | 關閉震動模式 |
HPT_TOG | 震動開關 |
HPT_RST | 恢復成預設的震動模式 |
HPT_FBK | 設定按下按鍵震動還是釋放按鍵震動還是按下按鍵或是釋放按鍵都震動 |
HPT_MODI | 下一個DRV2605L 震動模式 |
HPT_MODD | 前一個DRV2605L 震動模式 |
HPT_CONT | 連續震動開關 |
HPT_CONI | 增加DRV2605L震動強度 |
HPT_COND | 減少DRV2605L震動強度 |
DRV2605L
提供許多震動模式,可藉由在config.h
裡面加入來設定預設的震動模式,震動模式的名稱以及代碼可見這裡的詳細說明
#define DRV_MODE_DEFAULT *sequence name or number*