鄧軍
摘 要:STM32103F系列微控制器的定時器有一種特有工作模式——編碼器接口模式,此模式可以用來反饋馬達的實時轉(zhuǎn)子位置,測量馬達的轉(zhuǎn)速,也可以反饋光柵尺的實時位置,測量光柵頭的移動速度,在工業(yè)控制場合,尤其是需要精確定位的壓機、機床等使用場合,有著非常實用的價值。現(xiàn)以STM32103F微控制器與海德漢(HEIDENHAIN)光柵尺LS1378C為例,詳細介紹定時器的編碼器工作原理,以及雙定時器配合測速度的編程算法。
關(guān)鍵詞:STM32編碼器;光柵尺;測速
STM32103F系列是ST公司采用高性能的32位ARM Cortex-M3內(nèi)核,主要面向工業(yè)控制領(lǐng)域推出的微控制器芯片。通用定時器有以下幾種工作模式:計數(shù)器模式、輸入捕獲模式、輸出比較模式、PWM模式、單脈沖模式、編碼器接口模式。其中,編碼器接口模式是一種有別于其他通用ARM控制器以及DSP控制器的特有模式,此模式可以用來反饋馬達的實時轉(zhuǎn)子位置,測量馬達的轉(zhuǎn)速,也可以反饋光柵尺的實時位置,測量光柵頭的移動速度,在工業(yè)控制場合,尤其是需要精確定位的壓機、機床等使用場合,有著非常實用的價值。
光柵尺位移傳感器(簡稱光柵尺),是利用光柵的光學(xué)原理工作的測量反饋裝置。光柵尺位移傳感器經(jīng)常應(yīng)用于機床與現(xiàn)在加工中心以及測量儀器等方面,可用作直線位移或者角位移的檢測。其測量輸出的信號為數(shù)字脈沖,具有檢測范圍大,檢測精度高,響應(yīng)速度快的特點。例如,在數(shù)控機床中常用于對刀具和工件的坐標(biāo)進行檢測,來觀察和跟蹤走刀誤差,以起到一個補償?shù)毒叩倪\動誤差的作用。
在這里需要說明的是,光柵尺只是一個反饋裝置,它可以將位移量和位移方向通過脈沖信號輸出的方式反饋出來,但它不能直接顯示出來,它還需要一個顯示裝置,比如通過CPLD來識別,或者本文中的微控制器STM32103F來識別。光柵尺的輸出信號為相位角相差90°的兩路方波信號,如果A路超前B路90°,表示光柵尺在正向移動,反之,A路落后B路90°,表示反向移動。這兩路方波信號都為差分信號,需要經(jīng)過差分輸入芯片,比如TI的MC3486,轉(zhuǎn)化為TTL電平的方波之后,才能進定時器的輸入引腳。此例中接入的是TIM3-CH1和TIM3-CH2兩個引腳。
海德漢LS1378C為增量式直線光柵尺,量程220mm,信號周期1um,即一個方波對應(yīng)1um,經(jīng)后續(xù)電子設(shè)備進行4分頻之后測量步距為0.25um。直觀來說,STM32103F識別到一個周期的方波脈沖,計數(shù)器增長4次,表示光柵尺移動了1um。
此例中,定時器Timer3配置成編碼器接口模式,提供傳感器當(dāng)前實時位置的信息。另外再開一個定時器Timer2,配置成10ms的定時工作模式,讀取10ms之內(nèi)的位置之差,即可獲得動態(tài)的信息,比如速度、加速度。
這個算法思想的前提,也就是本文討論的核心,是10ms內(nèi)定時器3計數(shù)器不溢出,因為定時器為16位,最大可計數(shù)的范圍為65535,如何保證10ms內(nèi)實際增長的計數(shù)不超過這一最大值呢?我們通過計算來說明,比如已知光柵尺連接的機械運動部件的最大速度不可能超過1m/s,那么10ms內(nèi)走的位移量為10mm,10mm/0.25um=40000次計數(shù),40000小于65536,所以這一算法的前提成立。 如果運動部件的實際運動速度可能更快,那么把10ms定位改為5ms即可,以此類推,但定時間隔不可無限制縮小,以免加重CPU負荷。
首先,初始化定時器Timer3為編碼器模式,同時在TI1和TI2邊沿計數(shù),PA口的6腳和7腳設(shè)置為浮空輸入,用來連接編碼器輸入信號,定時器3計數(shù)周期Period設(shè)置為65535,預(yù)分頻數(shù)設(shè)置為零(不分頻)。
接著,Timer2配置為10ms的定時,計數(shù)周期Period設(shè)置為2000,預(yù)分頻數(shù)設(shè)置為360,向下計數(shù)模式。
下面是編碼器讀取方法,在每次10ms定時調(diào)用此段:
#define MAX_COUNT 30000//10ms內(nèi)不可能超過的計數(shù)器最大值
#define ENCODER_TIM_PERIOD 65535//定時器的period值,最好比MAX_COUNT要大
int16_t speed_max = 0; // 全局變量,統(tǒng)計瞬時速度最大值,需要在每次重新測量之前清零
int32_t currentCount = 0; // 全局變量,計數(shù)器實時值,有正負,總量程220mm對應(yīng)88萬個計數(shù),1um對應(yīng)4個計數(shù)
currentCount除以4000,即為光柵尺當(dāng)前位置,單位為mm;
speed_max為最大瞬時速度,單位為mm/s。
結(jié)束語
在實際的項目使用中,如果光柵尺移動速度過快,超過了硬件反應(yīng)速度,可能導(dǎo)致脈沖丟失,顯示出一個錯誤的位移量,這種錯誤是不可接受的。為了避免超過光柵尺及硬件電路的極限處理能力,我們通過試驗測出這一極限速度,并告知用戶,用戶可采用其他機械輔助的方法限制運動速度,在極限速度與生產(chǎn)效率之間找到一個合適的平衡點,使光柵尺工作在正常狀態(tài)。如果實際生產(chǎn)中的最大瞬時移動速度超過這一限制,將發(fā)出報警以示提醒。
參考文獻
[1]嵌入式系統(tǒng)及其應(yīng)用-基于Cortex-M3內(nèi)核和STM32F103微控制器的系統(tǒng)設(shè)計與開發(fā)[M].上海:同濟大學(xué)出版社,2011,5.