基于FreeRTOS的STM32四軸飛行器: 七.遙控器
- 一.遙控器按鍵搖桿功能說明
- 二.搖桿和按鍵的配置
- 三.按鍵掃描
一.遙控器按鍵搖桿功能說明
兩個手柄四個ADC。
左側手柄:
前后推為飛控油門,左右推為控制飛機偏航角。
右側手柄:
控制飛機飛行方向,向前飛向后飛。
按鍵:
可以用于控制飛行微調或者定義一鍵關機一鍵定高等功能。
二.搖桿和按鍵的配置
按鍵原理圖:
觀察按鍵電路配置,按下為低電平所以設置為上拉輸入:
搖桿原理圖:
左側手柄上下控制ADC1-1,左右控制ADC1-6。
右側手柄上下控制ADC1-2,左右控制ADC1-3。
配置:
ADC的時鐘不能超過14MHZ,因為超過會導致ADC時鐘精度下降結果不準,HAL庫強制不讓超過。
數據對齊方式:
左對齊和右對齊,數據寄存器只有8,16,32位,ADC采集到的數據只有12位,所以可以放在左側12位或右側12位,一般右對齊。
掃描模式:
將使用的ADC1通道挨個掃描一遍,當多通道時一定要開掃描模式。
先將Number Of conversion設為4:
這時可以Enabled:
連續模式(Continuous Conversion Mode):
在掃描完一次后掃描第二次,要設置為Enable。
ADC規則轉換模式:
一般使用規則轉換,四個通道只有一個數字寄存器,必須開啟DMA,外部觸發源使用軟件觸發。
之后會開啟DMA長度為四的數組存儲數據,Rank決定了數據放在DMA數組的哪個位置。
根據原理圖配置Rank,設置Sampling Time為13.5 Cycles:
配置DMA:
選擇Normal(循環)模式,數據寬度選擇Half Word,因為ADC的值都為uint16使用uint16類型。
還要將DMA中斷關閉,如果不關中斷,轉換完后進入中斷函數,不會執行正常代碼。
三.按鍵掃描
搖桿初始化:
先使用ADC校準,再啟動ADC轉換。
創建按鍵枚舉類型:
定義讀取按鍵:
掃描按鍵:
這時按鍵為短按的情況。
處理長按邏輯:
處理手柄左上角和右上角的按鍵長按邏輯,定義time變量記錄時間,while判斷按鍵按下且time<12增加time數值,在按鍵松開或者time>12跳出while,繼續執行下面的判斷time<=5就是短按,否則為長按,繼續使用while判斷按鍵是否松開,最后返回枚舉長按值。
在將該處while注釋后,長按邏輯會有問題,因為在最后松開長按時可能time<=5,發生誤識別:
創建按鍵掃描任務:
查看串口數據打印正常: