亚洲韩国日本欧美一区二区三区-亚洲韩国欧美一区二区三区-亚洲国内精品-亚洲国内-国产卡1卡2卡三卡网站免费-国产卡一

編碼器_傳感器_讀碼器_機器視覺 - 西安德伍拓自動化傳動系統有限公司
首頁 資訊百科 技術百科

基于STM32F407的直流減速電機帶編碼器方案

編輯:小伍    發布時間:2022-10-14 10:26:18

摘要:我們通過STM32的TIM3的編碼器模式,能夠測出任意時刻的脈沖值了。現在要解決的就是如何將這個脈沖值轉換成我們所要得到的信息(即轉動角度、轉速)。
基于STM32F407的直流減速電機編碼器方案

首先,什么是編碼器?


編碼器是將信號或數據進行編制、轉換為可用以通訊、傳輸和存儲的信號形式的設備。在這里,編碼器就是能夠將電機的轉動信息(比如轉速、轉動角度等)轉換為脈沖信號的設備。按照原理可分為(常見的)光電編碼器(光學式)和霍爾編碼器(磁式)。

編碼器的作用以及為什么要用編碼器?


如上所述,編碼器能夠將電機的機械幾何位移轉化為脈沖信號或數字量。也就是說,有了編碼器,我們通過檢測編碼器輸出的脈沖信號,就能獲取電機轉動角度、轉速等相關信息。這樣我們不但能定性的控制電機的轉向、轉速,還能定量的測量。

編碼器的原理是什么以及怎么運用呢?


簡單來說,就是電機帶動碼盤轉動,碼盤的結構使得當電機在轉動時會產生A、B兩相的脈沖信號,且這兩路脈沖信號的相位差為90度(即正交)。如下圖:

編碼器的原理是什么以及怎么運用呢?

由于A、B信號正交,因此可以根據兩個信號哪個先哪個后來判斷方向,根據每個信號脈沖數量的多少及每圈電機產生多少脈沖數就可以算出當前行走的距離,如果再加上定時器的話還可以計算出速度。

好了,現在我們的處境是,我們有一個帶編碼器的直流減速電機,我們知道當電機轉動的時候,它會產生A、B兩相正交脈沖信號,通過檢測脈沖信號我們就可以獲取電機的運動狀況。

我們通過什么手段來檢測脈沖數呢?


其中一種思路是,我們通過定時器的輸入捕獲或者GPIO引腳的外部中斷來檢測邊沿變化,以此來檢測脈沖數。這方法好像沒毛病,當電機正常運轉時行得通。但是如果電機輸出的脈沖信號出現了毛刺呢?這樣誤差就來了,怎么辦?通過軟件編寫算法來濾去毛刺似乎有點困難,于是我們想到通過硬件來處理這個毛刺。(而STM32正好有硬件編碼器,nice!)

這里的脈沖輸入是一種特殊的輸入捕獲情況,因此stm32專門在定時器中提供了編碼器模式,可大大簡化解析過程。

STM32的編碼器接口模式


在該模式下能計算電機輸出脈沖信號的個數,且stm32根據其內部機制能夠消除毛刺的干擾。

配置過程:

由于編碼器接口模式是一種特殊的輸入捕獲,所以要先配置一下輸入捕獲(畢竟你要通過捕獲邊沿來檢測脈沖)。在輸入捕獲過程中,我們把A6、A7復用為TIM3,作為輸入捕獲的引腳,對電機的A、B相脈沖進行輸入捕獲。

輸入捕獲配置完成之后再配置一下編碼器模式就可以開始工作了。

于是緊接著我們來看看編碼器模式的配置函數TIM_EncoderInterfaceConfig:

于是緊接著我們來看看編碼器模式的配置函數TIM_EncoderInterfaceConfig

其輸入參數中,TIMx就是輸入捕獲時設置的TIM3,polarity就分別是TI1和TI2的捕獲極性(TI1是定時器輸入通道1,TI2同理),即A、B兩相信號的捕獲極性(上升沿捕獲或者下降沿捕獲),重點來說說編碼器的模式TIM_EncoderMode:

當模式選為TIM_EncoderMode_TI1時,計數器僅在TI1的邊沿處計數

當模式選為TIM_EncoderMode_TI2時,計數器僅在TI2的邊沿處計數

當模式選為TIM_EncoderMode_TI12時,計數器在TI1和TI2邊沿處均計數

也就是說,模式1,我只以A相的脈沖信號為我的檢測信號,TI2我就不管了。(B只是相對A滯后了90度,其它都是一樣的,所以檢測A就夠了)。其它同理。

模式1和模式2顯然就沒什么差別了,那模式3前者有何不同呢?

這就涉及到網友們所說的編碼器軟件四倍頻技術了:

編碼器軟件四倍頻技術

如圖,A、B兩相正交信號,如果根據模式1或模式2對脈沖信號進行檢測,假設我們上升沿捕獲一次,那么圖中的信號我們只檢測到3個上升沿,也就是三個脈沖。但是如果采用模式3,對TI1和TI2檢測上升沿,那么同一段時間我們檢測到6個上升沿。如果下降沿也檢測,那么一共就是12個邊沿跳變。每個實際來的脈沖會被檢測4次,同樣是12/4=3個脈沖,但是這樣的話精度大大提高了。

入口參量:(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising ,TIM_ICPolarity_Rising);

通過這樣配置,我們就完成了編碼器軟件的初始化。通過以上配置,我們完成了TIM3輸入捕獲的初始化以及編碼器接口模式的相關配置,每來一個跳變沿,計數值變化一次。

至此,為了避免我們忘了初衷,現在我們來回顧一下我們最開始用編碼器的初衷,前面我們說要用編碼器來干嘛來著?獲取電機轉動角度、轉速。

現在的處境是,我們通過STM32的TIM3的編碼器模式,能夠測出任意時刻的脈沖值了。現在要解決的就是如何將這個脈沖值轉換成我們所要得到的信息(即轉動角度、轉速)。

首先,根據帶編碼器的直流減速電機的原理,顯然無論電機的轉速如何,每轉產生的脈沖數是固定的。這里假設電機每轉產生260個脈沖(具體數據各位自行查看自己的電機參數啦),那么只要我們用‘電機已產生的脈沖數’除以‘260個/轉’,就可以得到電機轉了多少圈,一圈即為360度,由此便可將脈沖數和轉動角度聯系起來。

這里要注意一點,由于我們用的是編碼器模式3(也就是TIM_EncoderMode_TI12),我們得到的脈沖數是電機實際產生的脈沖數的四倍。則電機實際產生的脈沖數應為‘得到的計數值’除以4。于是,電機轉動圈數為脈沖數除以260再除以4。

轉動角度算出來了,轉速呢?則是根據計數方向(遞增計數或遞減計數)來判斷的,所以我們接下來的工作就是要搞清楚計數方向和編碼器信號的關系。

讓我們來看一下STM32的中文參考手冊:

讓我們來看一下STM32的中文參考手冊:

網上幾乎在這張表的講解上都是一帶而過,真正能把這張表講清楚的幾乎沒有。后來看到一個人在表格上做了類似上圖的注釋,我才終于搞懂了。

大家還記得我們前面提到的TIM_EncoderInterfaceConfig函數嗎,里面有個參量就是選擇模式的,對吧。讓我們再來回顧一下:

注意到各模式后面的“xx edge depending on xx level”了嗎?這就是上面這個表里的第二縱列所提到的“相反信號的電平”。

TIM_EncoderMode_TI1: Counter counts on TI1FP1 edge depending on TI2FP2 level,意思就是當選擇模式1時,計數器根據TI2的電平高低來記錄TI1的邊沿信號。

這樣說可能不好理解,我們來舉個具體的例子:

電機轉動時產生A、B兩相信號通過TI1、TI2輸入到TIM3

如上圖,電機轉動時產生A、B兩相信號通過TI1、TI2輸入到TIM3。

假設我們選擇的是模式1,即計數器僅在TI1的邊沿處計數。我們觀察TI1的上升沿,若此時對應的TI2信號處于低電平(下圖紅框),于是根據表格我們可以得到計數方向為遞增,假設計數器遞增時電機正向轉動,則可判斷此時電機正轉。

假設計數器遞增時電機正向轉動,則可判斷此時電機正轉

再譬如,假設我們選擇模式2,即計數器僅在TI2的邊沿處計數。我們觀察TI2的下降沿,若此時對應的TI1信號為高電平(下圖藍框),于是根據表格我們可以得到計數方向為遞減,假設計數器遞減時電機反向轉動,則可判斷此時電機反轉。

假設計數器遞減時電機反向轉動,則可判斷此時電機反轉

也就是說,當以TI1為計數信號時,需要根據TI2的電平(也就是第二縱列的“相對信號的電平”)來進行判斷是向上計數還是向下計數。TI2也同理。

e.g.如果“僅在TI1計數”,當TI1為“上升”沿(表中第三縱列),此時要根據TI2的電平來做判斷。根據下圖,可知當TI1為上升沿的時候TI2為低電平,則根據上表可得知計數器為向上計數。這在下圖得到了驗證。

可知當TI1為上升沿的時候TI2為低電平

再例如,如果“僅在TI2計數”時,當TI2為下降沿時,如果TI1為低電平,則為向上計數(上圖左側);當TI2為下降沿時,如果TI1為高電平,則為向下計數(上圖中部);當TI2為上升沿時,如果TI1為高電平,則為向上計數(上圖左部);當TI2為上升沿時,如果TI1為低電平,則為向下計數(圖中中部);
至此為止,我們便實現了這樣的操作:通過使用帶編碼器的直流減速電機產生正交脈沖,通過STM32的TIM的編碼器模式對脈沖進行計數,根據計數方向和編碼器信號的關系來判斷電機轉動方向,利用脈沖計數值來計算電機轉動位移。

接下來是代碼部分,有些容易讓人迷惑的地方:

輸入捕獲初始化時Period和Prescaler的作用:

這里的period即為計數器的重裝載值,prescaler即為預分頻系數。注意在編碼器模式時,要把TIM理解為計數器,而不是定時器,這樣的話,時鐘信號就不是系統內部產生的,而是通過PA6、PA7輸入到TIM3的TI1和TI2的。

有了這么個理解,再來看Period和Prescaler就不難理解了。Period就是計數器每一次能檢測脈沖的最大值,每來一個脈沖計數值就加一,當計數值超過period就溢出中斷。Prescaler就是對電機產生的脈沖信號進行分頻的分頻系數。比如當分頻系數為2時,每當電機產生兩個脈沖,stm32才認為接收到一個有效脈沖,計數值才加一。

了解更多編碼器相關知識,敬請關注西安德伍拓自動化傳動系統有限公司網站。公司技術團隊為您免費提供編碼器的選型、安裝、調試、保養等技術指導服務,盡量避免企業因為編碼器技術人員的短缺帶來的損失,采取“線上+線下”服務的服務形式,幫助企業解決技術難題。
上一篇: 旋轉編碼器的原理、應用及未來發展趨勢
下一篇: 編碼器在高跨度門式起重機中的應用
編碼器傳感器機器視覺非標設備
主站蜘蛛池模板: 91精品欧美成人| 涩涩色中文综合亚洲| 亚洲伊人久久大香线蕉苏妲己 | 色网在线免费观看| 国产欧美一区二区三区观看| 91短视频在线看| 色视网站| 狠狠色做五月深爱婷婷| 波多野结衣一区二区三区高清在线 | 91精品久久久久久久久中文字幕| 性开放视频| 精品国产九九| 91短视频版在线观看免费| 久久久夜色精品国产噜噜| 成人区精品一区二区不卡亚洲| 一级做a爰片欧美aaaa| 久久香蕉精品| 91国内精品在线| 精品一区二区91| 最近免费中文在线视频| 欧美一a一片一级一片| 丁香激情综合| 色噜噜狠狠狠综合曰曰曰88av| xxxxx在线观看| 免费伦费一区二区三区四区| 999久久66久6只有精品| 婷婷激情六月| 国产美女在线精品免费观看| 深爱激情成人| 高清视频 一区二区三区四区| 九九热免费在线观看| 亚洲国产高清视频| 国产一进一出视频网站| 亚洲综合色一区二区三区另类| 国产精品亚洲综合网站| 色色视频免费网| 国产91精品在线观看| 国内精品视频在线播放| 亚洲欧美黄色片| 国产麻豆| 久久中文字幕免费|