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