一、編碼器接口
? ? ? ? 編碼器接口可以接收正交編碼器的信號,根據編碼器旋轉產生的正交信號脈沖,通過硬件自動控制CNT值的自增或自減,從而指出編碼器的位置、旋轉方向和旋轉速度。
? ? ? ? 每個高級定時器和通用定時器都有一個編碼器接口,他們會占用TIM的CH1和CH2兩個通道。
二、編碼器接口結構框圖
? ? ? ? 編碼器接到CH1和CH2通過濾波器和和邊沿檢測電路,通過TI1FP1和TI2FP2來到編碼器接口,編碼器接口這時給下面的時基單元提供基礎脈沖,來促使CNT++或CNT--,從而達到記錄速度和位置的特點。
? ? ? ? 將上圖簡化一下可以得到這樣的一個圖。
??
三、計數方向與編碼器信號的關系
? ? ? ? 在一般情況下我們會選擇最后一種,在TI1和TI2上計數,也就是CH1和CH2任意一個引腳跳變,都會導致CNT計數。
? ? ? ? A相一邊接到TI1FP1 , B相是TI1FP2。
????????正轉時,A相超前B相90度,A相出現上升沿,B相為低,則CNT++。B相上升沿,A相高,則CNT++。當A相下降沿B項高CNT++。當B相下降沿,A相低時,CNT++;
? ? ? ? 反轉時,A相滯后B相90度。查表同理。
四、硬件抗干擾
? ? ? ? 這里我們僅分析毛刺階段,計數器如何操作的。當A相上升沿,B相低,CNT++; A相下降沿,B相低,CNT--。這種毛刺信號并不會導致CNT的值累加,實現硬件抗干擾。
五、代碼
? ? ? ? 在本次實驗中,我們使用單片機一邊進行定時器TIM2定時中斷,在定時中斷里面讀取TIM3接收編碼器的CNT值。這里僅介紹Encoder的編碼邏輯,TIM2的不詳細介紹。 ①開啟TIM3、GPIO時鐘。②配置GPIO和時基單元。③配置輸入捕獲IC,捕獲CH1和CH2。④配置成編碼器模式后開啟時鐘。
????????為了節省文章篇幅,代碼已經放在github倉庫里了。hal庫的暫未更新,請耐心等待。
STM32F103c8t6_learning/GPIO_std/STM32f1_Encoder at main · Jiang-kun02/STM32F103c8t6_learning
參考
[6-7] TIM編碼器接口_嗶哩嗶哩_bilibili
[6-8] 編碼器接口測速_嗶哩嗶哩_bilibili