一、旋轉編碼開關如何工作
????????編碼器內部有一個開槽圓盤,連接到公共接地引腳 C。它還具有兩個接觸針 A 和 B,如下所示。
????????當您轉動旋鈕時,A 和 B 按照特定順序與公共接地引腳 C 接觸,具體順序取決于轉動旋鈕的方向。
????????當它們與公共地接觸時,會產生兩個信號。這些信號存在 90° 異相,因為一個引腳先于另一個引腳接觸公共地。它被稱為正交編碼。
????????當順時針旋轉旋鈕時,A 引腳先于 B 引腳接地。當逆時針旋轉旋鈕時,B 引腳先于 A 引腳接地。
????????通過監控每個引腳何時連接或斷開接地,我們可以確定旋鈕旋轉的方向。這可以通過簡單地觀察 A 的狀態改變時 B 的狀態來完成。
????????當改變狀態時,如果 A:下降沿,B:為高電平,則順時針轉動旋鈕。
????????當改變狀態時,如果 A:下降沿,B:為低電平,則逆時針轉動旋鈕。
????????總的來說,旋轉編碼開關是一種功能強大、應用廣泛的電子元器件,在工業自動化、機器人技術、伺服控制系統、電梯、電機控制、音視頻設備、游戲控制器以及其他需要精確位置控制和速度反饋的各種機械設備中都有重要的應用。
二、 Cube MX 具體配置
????????首先需要在CubeMX中選擇適當的引腳連接旋轉編碼開關的輸出引腳,并將其設置為EXTI模式,然后對引腳啟用中斷功能。
????????在配置過程中,還有一個重要的步驟是將引腳進行上拉。上拉電阻用于確保引腳保持在高電平狀態。這有助于防止由于噪聲或干擾而導致的誤觸發。我這里使用的是B14、B15引腳,具體的配置如下所示。
三、具體代碼實現?
????????通過EXTI的回調函數來判斷A、B引腳的IO口哪個先觸發。當A或者B引腳觸發后,然后通過檢測另外一個引腳的狀態來確定波動旋轉編碼開關的方向,具體操作如下所示。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){if(GPIO_Pin == GPIO_PIN_14){if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)){direction=1;num++;}}else if(GPIO_Pin == GPIO_PIN_15){if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14)){direction=2;num--;}}}
- direction變量為:旋轉的方向;
- num變量為:旋轉計數值;
完整代碼示例:https://download.csdn.net/download/qq_26043945/89322458