一、引入
(1)編碼器接口的好處:
- 節約軟件資源:外部中斷計次,程序頻繁進入中斷,則軟件資源會被簡單頻繁的工作給占用,效率不高
- 使用定時器的編碼器接口,再配合編碼器,就可以測量旋轉速度和旋轉方向
(2)編碼器測速:
- 一般應用在電機控制的項目上,使用編碼器測量電機的速度,然后再用PID算法進行閉環控制
- 一般電機轉速比較高,會選擇無接觸式的霍爾傳感器或者光柵
二、編碼器接口(Encoder Interface)
作用 | 可以接收增量(正交)編碼器的信號,根據編碼器旋轉產生的正交信號脈沖,自動控制CNT自增或自減,從而指示編碼器的位置、旋轉方向和旋轉速度 |
解釋 | 正交:輸出兩個方波信號,相位相差90度 超前90°——正轉 滯后90°——反轉 |
原理 | 測頻法測正交脈沖的頻率,CNT計次,然后每隔一段時間取一次計次 |
優點 | 可以根據旋轉方向,不僅能自增計次,還能自減計次,是一個帶方向的計次 |
特點 | 每個高級定時器和通用定時器都擁有一個編碼器接口 如果一個定時器配置成了編碼器接口模式,基本上就干不了其他活了 C8T6芯片只有TIM1-4總共4個計時器,所以最多只能接4個編碼器 也可以通過外部中斷來接編碼器——通過軟件資源彌補硬件資源 兩個輸入引腳借用了輸入捕獲的通道1和通道2 (編碼器的兩個輸入引腳就是定時器的CH1和CH2引腳,CH3和CH4不能接編碼器) |
定位 | 編碼器接口模式基本上相當于使用了一個帶有方向選擇的外部時鐘 |
三、正交編碼器
功能 | 測量位置、或者帶有方向的速度值 |
配置 | 一般有兩個信號輸出引腳,一個是A相,一個是B相 |
正交信號優勢 | ①精度更高:A、B相都可以計次,相當于計次頻率提高一杯 ②可抗噪聲:正交信號必須交替跳變,所以可以設計一個抗噪聲電路,如果一個信號不變,另一個信號連續跳變,也就是產生了噪聲,這時計次值是不會變化的 |
編碼器接口設計邏輯 | ①將A相和B相素有的邊沿作為計數器的計數時鐘,出現邊沿信號時,計數自增or自減 ②判斷計數是增還是減:計數方向由另一相的狀態來確定,當出現某個邊沿時,判斷另一相的高低電平 |
四、編碼器接口的電路結構
高級定時器和通用定時器都是一樣的,每個定時器都只有一個編碼器接口,基本定時器是沒有編碼器接口
(1)編碼器接口的輸入連接與核心資源
編碼器接口的核心功能是通過檢測編碼器 A 相、B 相的相位信號實現計數,其輸入部分的硬件與資源關聯如下:
編碼器的 A 相、B 相分別連接到編碼器接口的兩個輸入端,這兩個輸入端復用了定時器輸入捕獲單元的前兩個通道(CH1 和 CH2),即編碼器的實際輸入引腳為定時器的 CH1 和 CH2 引腳; |
輸入捕獲單元的 CH3、CH4 與編碼器接口無關,不參與編碼器信號的處理。 |
(2)編碼器接口對輸入捕獲資源的復用
編碼器接口雖然復用了 CH1 和 CH2 通道,但并非使用輸入捕獲單元的全部功能,具體復用的資源包括:
輸入捕獲濾波器 | CH1 和 CH2 通道配置的輸入濾波器會被編碼器接口使用,用于對 A 相、B 相的輸入信號進行濾波,減少噪聲干擾(例如通過設置濾波系數,濾除高頻毛刺)。 |
邊沿檢測電路 | CH1 和 CH2 通道的邊沿檢測功能(上升沿 / 下降沿檢測)也會被編碼器接口利用,用于捕捉 A 相、B 相信號的跳變,作為計數觸發的依據 |
(3)與編碼器接口無關的輸入捕獲資源
輸入捕獲預分頻器 | 輸入捕獲單元的預分頻器(用于控制捕獲信號的分頻)不影響編碼器接口,因為編碼器的計數觸發直接由 A 相、B 相的邊沿信號決定,無需對信號進行分頻處理 |
捕獲比較寄存器 (CCR) | CCR 是輸入捕獲模式下用于存儲捕獲時刻計數器值的寄存器,而編碼器接口的核心是通過 A、B 相信號控制計數器(CNT)的增減,無需使用 CCR 寄存器 |
(4)編碼器接口對計數的控制邏輯
編碼器接口的輸出部分本質上是一個 “從模式控制器”,其核心作用是根據 A 相、B 相的信號狀態控制計數器(CNT)的計數行為(計數時鐘和計數方向):
計數時鐘 | 不依賴定時器的內部時鐘(如 72MHz 內部時鐘),而是以 A 相、B 相的邊沿信號作為計數觸發時鐘 |
計數方向 | 不受時基單元初始化時設置的計數方向影響,而是由 A 相、B 相的相位關系決定: 當檢測到某一相的邊沿信號時,通過判斷另一相的當前狀態(高 / 低電平) 若符合 “正轉” 相位關系則控制 CNT 自增,若符合 “反轉” 相位關系則控制 CNT 自減。 |
此時的計數時鐘和計數方向都處于編碼器接口托管的狀態
五、編碼器接口的基本結構
(一)連接方式
輸入捕獲的前兩個通道,通過GPIO口接入編碼器的A、B相,然后通過濾波器和邊沿檢測極性選擇,產生TI1FP1和TI2FP2 ,通向編碼器接口,編碼器接口通過預分頻器控制CNT計數器的時鐘,同時編碼器接口根據編碼器的旋轉方向,控制CNT的計數方向
(二)運行邏輯
編碼器正轉時,CNT自增,編碼器反轉時,CNT自減
(三)使用補碼的特性
這里ARR是有效的,一般設置ARR為最大量程65535,這樣利用補碼的特性很容易得到負數:
如正轉,CNT正常自增;但反轉CNT自減,0減一下,是65535,65534,65533
故將65535這個16位無符號數轉為16位的有符號數,根據補碼的定義,65535對應-1,65534對應-2,65533對應-3
六、工作細節
下表描述的就是編碼器接口的工作邏輯
TI1FP1和TI2FP2就是A、B相,在A相和B相的上升沿或者下降沿觸發計數
是向上計數還是向下計數呢?
取決于邊沿信號發生的這一時刻,另一相的電平狀態(即上標的相對信號的電平)
- 僅在TI1(TI2)計數,就是僅在一相的邊沿技術,另一相邊沿忽略,不計數
僅在TI1計數:僅在A相的上升沿和下降沿自增或自減,而B相的這兩個狀態忽略掉,不執行計數
僅在TI2計數:僅在B相的上升沿和下降沿計數,A相的邊沿忽略,不計數
- 在TI1和TI2上計數(一般用這個模式):
如果A相上升沿、A相下降沿、B相上升沿、B相下降沿這四種狀態都執行自增或自減,即A相和B相的邊沿都計數,正轉的狀態都向上計數,反轉的狀態都向下計數
七、例子
(一)實例1——兩個引腳都不反相
? ??展示計數方向邏輯與正交編碼器抗噪聲的原理
????上圖使用的就是兩個引腳的邊沿都計數的模式
? ? 這里是TI1和TI2的時序信號,下面是計數器值的變化情況
第一個狀態 | TI1上升沿,TI2低電平 | 向上計數 |
第一個狀態 | TI1高電平,TI2上升沿 | 向上計數 |
第一個狀態 | TI1下降沿,TI2高電平 | 向上計數 |
第一個狀態 | TI1低電平,TI2下降沿 | 向上計數 |
毛刺狀態 | 展示抗噪聲原理: TI2沒有變化,TI1卻跳變了好幾次 這不符合正交信號的變化規律 這樣就可以將這個噪聲濾掉 | TI1上升沿,TI2低電平,向上計數 TI1下降沿,TI2低電平,向下計數 TI1上升沿,TI2低電平,自增 TI1下降沿,TI2低電平,自減 因此在出現毛刺現象的時候,計數器就會加、減、加、減來回擺動,最終的計數值還是原來的那個值 |
第三個狀態 | TI2上升沿,TI1低電平 | 向下計數 |
第三個狀態 | TI2高電平,TI1上升沿 | 向下計數 |
第三個狀態 | TI2下降沿,TI1高電平 | 向下計數 |
第三個狀態 | TI2低電平,TI1下降沿 | 向下計數 |
(二)實例2——TI1反相、TI2不反相
? ? ?展示極性的變化對計數的影響
TI1反相是什么意思?——首先要理解這個極性選擇的作用是什么
- TI1和TI2進來都會經過這個極性選擇的部分,在輸入捕獲的情況下,這個極性選擇是選擇上升沿有效還是下降沿有效
- 但是編碼器接口顯然始終都是上升沿和下降沿都有效的,上升沿和下降沿都需要計次的
所以在編碼器接口這里就不再是邊沿的極性選擇了,而是高低電平的極性選擇
選擇上升沿的參數 | 信號直通過來,高低電平極性不反轉; |
選擇下降沿的參數 | 信號通過一個非門過來,高低電平極性反轉 |
這意味著存在兩個控制極性的參數,用于決定是否對 TI1 或 TI2 的信號進行極性反轉
均不反相 | TI1 和 TI2 都不進行反轉 |
TI1 反相 | 選擇對 TI1 的信號進行處理時,即 TI1 高低電平取反,這才是反相后實際給編碼器接口的電平 |
- 需要注意的是,在分析過程中,如果直接將 TI1 和 TI2 畫成輸入信號并對照相關表格,得到的計數方向可能是錯誤的。
- 因為 TI1 反相后,實際給到編碼器接口的電平是 TI1 高低電平取反后的結果。
- 例如:第一個狀態原本是 TI1 上升沿、TI2 低電平,經過 TI1 反相后,實際狀態變為 TI1 下降沿、TI2 低電平,此時編碼器會向下計數。
實例1和實例2的計數方向是相反的,這有什么用呢?
比如,當連接一個編碼器時,若發現其數據的加減方向與預期相反 —— 即正轉時計數器自減,反轉時計數器自增,這時就可以通過調整極性來解決,只需將任意一個引腳(TI1 或 TI2)進行反相,就能實現計數方向的反轉。不過,實際上想要反轉計數方向,也可以直接將 A、B 相兩個引腳互換。