單片機學習!
目錄
文章目錄
前言
一、編碼器接口簡介
1.1 編碼器接口作用
1.2 編碼器接口工作流程
1.3 編碼器接口資源分布
1.4?編碼器接口輸入引腳
二、正交編碼器
2.1 正交編碼器功能
2.2 引腳作用
2.3 如何測量方向
2.4 正交信號優(yōu)勢
2.5 執(zhí)行邏輯
三、編碼器定時器框圖
3.1 編碼器接口分布情況
3.2 編碼器接口設計
四、編碼器接口基本結構
4.1 電路執(zhí)行邏輯
4.2 反轉得負數(shù)邏輯
五、工作模式
5.1 編碼器接口工作邏輯
5.2 三種工作模式
六、實例
6.1 TI1和TI2均不反相
6.2 TI1反相
6.3 實例總結
總結
前言
? ? ? ? 本文介紹通過定時器的編碼器接口來自動計次。之前博文介紹過通過觸發(fā)外部中斷,在中斷函數(shù)里手動進行計次。編碼器接口自動計次與觸發(fā)外部中斷手動計次相比較而言,使用編碼器接口的好處就是節(jié)約軟件資源。如果使用外部中斷計次,當電機高速旋轉時,編碼器每秒產生上千上萬個脈沖,程序就得頻繁進中斷。進中斷之后,完成的任務又只是簡單的加一減一,軟件資源就被這種簡單而又低級的工作給占用了。所以對于這種需要頻繁執(zhí)行且操作又簡單的任務,一般都會設計一個硬件電路模塊來自動完成。編碼器接口就是用來自動給編碼器進行計次的電路,每隔一段時間取一下計次值,就能得到編碼器旋轉的速度了。
一、編碼器接口簡介
- Encoder Interface 編碼器接口
- 編碼器接口可接收增量(正交)編碼器的信號,根據(jù)編碼器旋轉產生的正交信號脈沖,自動控制CNT自增或自減,從而指示編碼器的位置、旋轉方向和旋轉速度
- 每個高級定時器和通用定時器都擁有1個編碼器接口
- 兩個輸入引腳借用了輸入捕獲的通道1和通道2
1.1 編碼器接口作用
? ? ? ? 使用定時器的編碼接口,再配合編碼器,就可以測量旋轉速度和旋轉方向。這里編碼器測速一般應用在電機控制的項目上,使用PWM驅動電機,再使用編碼器測量電機的速度,再用PID算法進行閉環(huán)控制。一般電機旋轉速度比較高,會使用無接觸式的霍爾傳感器或者光柵進行測速。
? ? ? ? 編碼器接口可以自動給編碼器進行計次的電路,每隔一段時間計次值,就能得到編碼器旋轉的速度了。
1.2 編碼器接口工作流程
????????編碼器接口的工作流程就是接收正交信號,自動執(zhí)行CNT自增或自減。
????????正交編碼器可輸出兩個方波信號也就是正交信號,相位相差90°,超前90°或者滯后90°,分別代表正轉和反轉。
????????一個編碼器,有兩個輸出,一個是A相,一個是B相。然后接入到STM32的定時器的編碼器接口,編碼器接口自動控制定時器時基單元中的CNT計數(shù)器,進行自增或自減。
????????工作邏輯:如初始化之后,CNT初始值為0,然后編碼器右轉,CNT就++,右轉產生一個脈沖,CNT就加一次。比如右轉產生10個脈沖后停下來,那么這個過程CNT就由0自增到10,停下來。編碼器左轉,CNT就--,左轉產生一個脈沖,CNT減一次。比如編碼器再左轉產生5個脈沖,那CNT就在原來10的基礎上自減5,停下來。
????????這個編碼器接口其實就相當于是一個帶有方向控制的外部時鐘。它同時控制著CNT的計數(shù)時鐘和計數(shù)方向。這樣CNT的值就表示了編碼器的位置。
? ? ? ? 方向測速:如果每隔一次取一次CNT的值,再把CNT清零。每次取出來的值就表示了編碼器的速度。用測周法和測頻法的方法來看,這個編碼器測速實際上就是測頻法測正交脈沖的頻率。CNT計次,然后每隔一段時間取一次計次,就是測頻法的方法。但是這個編碼器接口計次更高級,它可以根據(jù)旋轉方向,不僅能自增計次,還能自減計次,是一個帶方向的測速。
1.3 編碼器接口資源分布
????????編碼器接口資源比較緊張,如果一個定時器配置成了編碼器接口模式,那它基本上就干不了其他活了,如CT86芯片只有TIM1、2、3、4,一共四個定時器,所以最多只能接4個編碼器,而且接完4個編碼器就沒有定時器可以用了。如果編碼器需求比較多的話,要考慮一下這個資源夠不夠用。當然,還是可以用外部中斷代碼來接編碼器,這樣就是用軟件資源來彌補硬件資源。硬件資源和軟件資源是互補的。一般在有硬件資源的情況下優(yōu)先使用硬件資源。
1.4?編碼器接口輸入引腳
????????編碼器接口的兩個輸入引腳借用了輸入捕獲的通道1和通道2,這個可以從下文通用定時器結構框圖來看。編碼器的兩個輸入引腳就是每個定時器的CH1和CH2引腳。另外兩個CH3和CH4不能接編碼器。
二、正交編碼器
2.1 正交編碼器功能
????????正交編碼器一般可以測量位置,或者帶有方向的速度值。
2.2 引腳作用
????????正交編碼器一般有兩個信號輸出引腳,一個是A相,一個是B相。編碼器的旋轉軸轉起來時,A相和B相就會輸出上圖中的方波信號。轉的越快,這個方波的頻率就越高,所以方波的頻率就代表了速度,可以取出任意一相的信號來測頻率,就能知道旋轉速度了。
2.3 如何測量方向
????????但是只有一相的信號無法測量旋轉方向。因為無論正轉還是反轉,他都是這樣的方波。想要測量方向,還必須要有另一根線的輔助。
- 一種方案是不用B相,再定義一個方向輸出引腳,正轉置高電平,反轉置低電平。這也是一種解決方案,但這樣的信號并不是正交信號。
- 另一種解決方案就是正交信號,當正轉時,A相提前B相90°,反轉時,A相滯后B相90°,這里的正轉反轉都是極性問題,是相對的。? ? ? ?
2.4 正交信號優(yōu)勢
????????使用正交信號相比較單獨定義一個方向引腳,有什么優(yōu)勢?
- 正交信號精度更高:因為A、B相都可以計次,相當于計次頻率提高了一倍。
- 正交信號可以抗噪聲:因為正交信號,兩個信號必須是交替跳變的,所以可以設計一個抗噪聲電路。如果一個信號不變,另一個信號連續(xù)跳變,也就是產生了噪聲,那這時計次值是不會變化的。
2.5 執(zhí)行邏輯
? ? ? ? 分析一下正交信號如何計次和區(qū)分旋轉方向,從上圖波形中分析。
在正轉的時候:
- 第一個時刻,A相上升沿,對應B相低電平。是表里的第一行;
- 第二個時刻,B相上升沿,對應A相高電平,是表里的第三行;
- 第三個時刻,A相下降沿,對應B相高電平,是表里的第二行;
- 第四的時刻,B相下降沿,對應A相低電平,是表里的第四行。
可對應上圖正轉波形和表格。
在反轉的時候:
- 第一個時刻,B相上升沿,對應A相低電平。是表里的第一行;
- 第二個時刻,A相上升沿,對應B相高電平,是表里的第三行;
- 第三個時刻,B相下降沿,對應A相高電平,是表里的第二行;
- 第四的時刻,A相下降沿,對應B相低電平,是表里的第四行。
可對應上圖反轉波形和表格。
????????不難發(fā)現(xiàn),當A相,B相出現(xiàn)兩個表中的邊沿時,一相對應另一相的狀態(tài),正傳和反轉正好是反相的。如A相上升沿,正轉,B相就是低電平;反轉,B像就是高電平。對比其他也都是相反的。
? ? ? ? 編碼器接口的設計邏輯:首先,把A相和B相的所有邊沿作為計數(shù)器的計數(shù)時鐘。出現(xiàn)邊沿信號時,就計數(shù)自增或自減。計數(shù)的增減也就是計數(shù)的方向,由另一相的狀態(tài)來確定,當出現(xiàn)某個邊沿時,判斷另一相的高低電平,如果對應另一相的狀態(tài)出現(xiàn)在上圖表中,那么正轉計數(shù)自增;反轉計數(shù)自減,這樣就能實現(xiàn)編碼器接口的功能,這也是STM32定時器編碼器接口的執(zhí)行邏輯。
????????
三、編碼器定時器框圖
3.1 編碼器接口分布情況
? ? ? ? 高級定時器和通用定時器的編碼器接口都是一樣的,這兩個定時器都只有一個編碼器接口。基本定時器沒有編碼器接口。
3.2 編碼器接口設計
編碼器接口輸入部分:
? ? ? ? 上圖中可以看出編碼器接口有兩個輸入端,分別要接到編碼器的A相和B相。兩個網(wǎng)絡標號TI1FP1和TI2FP2,對應輸入部分電路的TI1FP1和TI2FP2,這里編碼器接口的兩個引腳借用了輸入捕獲單元的前兩個通道。所以最終編碼器的輸入引腳就是定時器的CH1和CH2兩個引腳。信號的通路是,CH1通過輸入濾波器和邊沿檢測器從TI1FP1通向編碼器接口;CH2通過輸入濾波器和邊沿檢測器從TI2FP2通向編碼器接口。CH3和CH4與編碼器接口無關。其中CH1和CH2的輸入捕獲濾波器和邊沿檢測器編碼器接口也有使用,而電路后面部分是否交叉連接(TI1FP2和TI2FP1)、預分頻器和CCR寄存器都與編碼器接口無關。
編碼器接口輸出部分:
? ? ? ? 編碼器接口輸出部分其實就相當于從模式控制器,控制CNT的計數(shù)時鐘和計數(shù)方向。這里的輸出執(zhí)行流程按照上一部分圖中相位和邊沿對應的表格,若出現(xiàn)邊沿信號,并且對應另一相的狀態(tài)為正轉,則控制CNT自增,否則控制CNT自減。這里72MHz內部時鐘和時基單元初始化時設置的計數(shù)方向并不會使用,因為此時計數(shù)時鐘和計數(shù)方向都是處于編碼器接口托管的狀態(tài),計數(shù)器自增和自減受編碼器控制。
四、編碼器接口基本結構
4.1 電路執(zhí)行邏輯
? ? ? ? 輸入捕獲的前兩個通道,通過GPIO口接入編碼器的A、B相,然后通過濾波器和邊沿檢測極性選擇,產生TI1FP1和TI2FP2通向編碼器接口,編碼器接口通過預分頻器控制CNT計數(shù)器的時鐘。同時編碼器接口還根據(jù)編碼器的旋轉方向,控制CNT的計數(shù)方向。編碼器正轉時,CNT自增,編碼器反轉時,CNT自減。這里ARR也是有效的,一般會設置ARR為65535最大量程。這樣可以利用補碼的特性很容易得到負數(shù)。
4.2 反轉得負數(shù)邏輯
? ? ? ? 當CNT初始為0,正轉,CNT自增:0、1、2、3、4、6等等。當CNT初始為0,反轉,0下一個數(shù)就是65535,接著是65534、65533、65532等等。但是這里負數(shù)應該是-1、-2、-3。這里會有一個操作直接把16位的無符號數(shù)轉換為16位的有符號數(shù),根據(jù)補碼的定義65535就對應-1;65534就對應-2;65533就對應-3.這樣就可以直接得到負數(shù)。
五、工作模式
5.1 編碼器接口工作邏輯
? ? ? ? 上方表描述的就是編碼器接口的工作邏輯,TI1FP1和TI2FP2接的就是編碼器的A、B相,在A相和B相的上升沿或者下降沿觸發(fā)計數(shù)。向上計數(shù)和向下計數(shù)取決于邊沿信號發(fā)生的這個時刻,另一相的電平狀態(tài),對應表中相對信號的電平。TI1FP1對應TI2,TI2FP2對應TI1,就是另一相電平的意思。
? ? ? ?
5.2 三種工作模式
????????表中第一列可以看到,編碼器還分了3種工作模式,分別是僅在TI1計數(shù);僅在TI2計數(shù);在TI1和TI2都計數(shù)。
? ? ? ? 上文中總結的表格:
????????左表4種狀態(tài),都是正轉,都可以計次自增;右表這四種狀態(tài),都是反轉,都可以計次自減。這些狀態(tài)都涉及了兩個引腳,分別是A相上升沿、A相下降沿、B相上升沿、B相下降沿,如果這幾種狀態(tài)都執(zhí)行自增或自減,就是A相和B相的邊沿都計數(shù)。這就對應工作模式的第三種模式:TI1和TI2都計數(shù)。
????????當然這里還可以忽略一些邊沿:
- 可以僅在A相的上升沿和下降沿自增或自減,而B相的這兩個狀態(tài)忽略掉,不執(zhí)行計數(shù);
- 也可以僅在B相的上升沿和下降沿自增或自減,而A相的這兩個狀態(tài)忽略掉,不執(zhí)行計數(shù)。
這樣也可以實現(xiàn)功能,只不過是計次的精度低了一些。這兩種僅在一個邊沿計數(shù)的模式就對應了工作模式里的前兩種模式:僅在TI1計數(shù)和僅在TI2計數(shù)。
? ? ? ? 工作模式表中的自增自減也對應上文總結的表格,若TI1接A相、TI2接B相,當A、B相為下表這四個狀態(tài)時,就是正轉,計數(shù)器需要自增。
????????
- 上表A相上升沿,B相低電平,對應工作模式表中TI1和TI2都計數(shù),A相上升沿對應另一相低電平,執(zhí)行向上計數(shù);
- 上表A相下降沿,B相高電平,對應工作模式表中TI1和TI2都計數(shù),A相下降沿對應另一相高電平,執(zhí)行向上計數(shù);
- 上表B相上升沿,A相高電平,對應工作模式表中TI1和TI2都計數(shù),B相上升沿對應另一相高電平,執(zhí)行向上計數(shù);
- 上表B相下降沿,A相低電平,對應工作模式表中TI1和TI2都計數(shù),B相下降沿對應另一相低電平,執(zhí)行向上計數(shù);
觀察發(fā)現(xiàn)這里正轉的狀態(tài)都是向上計數(shù)。
????????若TI1接A相、TI2接B相,當A、B相為下表這四個狀態(tài)時,就是反轉轉,計數(shù)器需要自減。
- 上表A相上升沿,B相高電平,對應工作模式表中TI1和TI2都計數(shù),A相上升沿對應另一相高電平,執(zhí)行向下計數(shù);
- 上表A相下降沿,B相低電平,對應工作模式表中TI1和TI2都計數(shù),A相下降沿對應另一相低電平,執(zhí)行向下計數(shù);
- 上表B相上升沿,A相低電平,對應工作模式表中TI1和TI2都計數(shù),B相上升沿對應另一相低電平,執(zhí)行向下計數(shù);
- 上表B相下降沿,A相高電平,對應工作模式表中TI1和TI2都計數(shù),B相下降沿對應另一相高電平,執(zhí)行向下計數(shù);
觀察發(fā)現(xiàn)這里反轉的狀態(tài)都是向下計數(shù)。
總結:正轉的狀態(tài)都是向上計數(shù),反轉的狀態(tài)都是向下計數(shù)。
六、實例
6.1 TI1和TI2均不反相
????????上圖為兩個引腳的邊沿都計數(shù)的模式,執(zhí)行的邏輯對應圖上方的表格。
圖中上半部分為TI1和TI2的時序信號,下半部分為計數(shù)器值的變化情況。
第一個狀態(tài),TI1上升沿,TI2低電平,表格中上升沿、低電平對應向上計數(shù),所以圖中計數(shù)器變高了一級。后面連著幾個狀態(tài)對應表格都是向上計數(shù)為正轉。
第二個狀態(tài)展示的是正交編碼器抗噪聲的原理,在這個狀態(tài)中TI2沒有變化,但是TI1卻跳變了好幾次,這不符合正交編碼器的信號規(guī)律,正交信號,兩個輸出交替變化,就像人走路一樣,先左腿邁一步,后右腿邁一步,左右腿交替向前邁,而這里的狀態(tài)就相當于右腿沒動,左腿連續(xù)走了好幾步。顯然這個相當于左腿的動作信號是一個毛刺信號。通過上表中正交信號的邏輯就可以把這種噪聲濾掉。
從噪聲的毛刺信號開始看:
- TI1上升沿,TI2低電平,對照表格向上計數(shù),這里自增;
- TI1下降沿,TI2還是低電平,對照表格向下計數(shù),這里自減;
- TI1上升沿,TI2低電平,對照表格向上計數(shù),這里自增;
- TI1下降,TI2還是低電平,對照表格向下計數(shù),這里自減;
所以這里如果出現(xiàn)了一個引腳不變,另一個引腳連續(xù)跳變多次的毛刺信號,計數(shù)器就會加、減、加、減來回擺動,最終計數(shù)值還是原來那個數(shù),并不受毛刺噪聲的影響。這就是正交編碼器抗噪聲的原理。
第三個狀態(tài)是反轉的波形,TI1下降沿,TI2低電平,表格中下降沿、低電平對應向下計數(shù),所以圖中計數(shù)器變低了一級。后面連著幾個狀態(tài)對應表格都是向下計數(shù)為反轉。
第四個狀態(tài),TI1不動,TI2多次跳變,計數(shù)值也是來回擺動,過濾噪聲。
第五個狀態(tài)是正轉,向上計數(shù)。
6.2 TI1反相
? ? ? ? 上圖展示的是極性的變化對計數(shù)的影響。前一個實例是兩個引腳都不反向,這個實例是TI1反相、TI2不反相的圖。
????????TI1反相:TI1和TI2的信號進來都會經過極性選擇的部分,(在輸入捕獲模式下,極性選擇是選擇上升沿有效還是下降沿有效),編碼器接口是上升沿和下降沿均有效的,上升沿和下降沿都需要計次,所以編碼器接口這里不在是邊沿的極性選擇,而是高低電平的極性選擇。如果選擇上升沿的參數(shù),就是信號直通過來,高低電平極性不反轉;如果選擇下降沿的參數(shù),就是信號通過一個非門過來,高低電平極性反轉。所以在極性選擇這里會有兩個控制極性的參數(shù),選擇是否加一個非門反轉極性。對應實例,如果兩個信號TI1、TI2都不反轉,就對應第一個實例均不反相;如果把TI1高低電平反轉一下,就是這里TI1反相的實例。
? ? ? ? 分析的時候,圖中上半部分的TI1和TI2的時序信號是輸入信號,若直接對照上表分析,得到的計次方向是錯誤的,這里TI1反向之后,先把圖中TI1高低電平取反,取反后才是反相后實際給編碼器接口的電平,再對照表格分析。
6.3 實例總結
????????TI1和TI2均不反相的實例圖和TI1反相后的實例圖對照來看,這兩個圖的計數(shù)方向是相反的,這里可以用于需要反轉計數(shù)方向時,可以把任意一個引腳反相。當然反轉計數(shù)方向時也可以直接把A、B相兩個引腳換一下。文章來源:http://www.zghlxwxcb.cn/news/detail-850641.html
總結
????????以上就是今天要講的內容,本文僅僅簡單介紹了編碼器接口的作用、電路結構、執(zhí)行邏輯。文章來源地址http://www.zghlxwxcb.cn/news/detail-850641.html
到了這里,關于STM32 TIM編碼器接口的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!