隨著工業(yè)的發(fā)展,嵌入式技術(shù)應(yīng)用日益廣泛和成熟。ARM嵌入式處理器作為一種32位高性能、低功耗的RISC芯片,支持多種操作系統(tǒng)、主頻高、運(yùn)算處理能力強(qiáng),并可兼容8/16位器件,還能帶海量低價(jià)的SDRAM數(shù)據(jù)存儲(chǔ)器。得到各行各業(yè)的青睞,已經(jīng)顯示出強(qiáng)大的功能和巨大的商業(yè)價(jià)值。尤其在控制領(lǐng)域獲得了越來(lái)越為廣泛的應(yīng)用。利用以ARM為內(nèi)核的嵌入式微處理器進(jìn)行運(yùn)動(dòng)控制系統(tǒng)的開(kāi)發(fā),有著廣闊的發(fā)展空間。
在一些要求低成本的運(yùn)動(dòng)控制系統(tǒng)中,經(jīng)常用步進(jìn)電機(jī)做執(zhí)行元件。步進(jìn)電機(jī)在這種應(yīng)用場(chǎng)合下最大的優(yōu)勢(shì)是:可以開(kāi)環(huán)方式控制而無(wú)需反饋就能對(duì)位置和速度進(jìn)行控制。但也正是因?yàn)樨?fù)載位置對(duì)控制電路沒(méi)有反饋,步進(jìn)電機(jī)就必須正確響應(yīng)每次勵(lì)磁變化。如果勵(lì)磁頻率選擇不當(dāng),電機(jī)不能夠移到新的位置,那么實(shí)際的負(fù)載位置相對(duì)控制器所期待的位置出現(xiàn)永久誤差,即發(fā)生失步現(xiàn)象或過(guò)沖現(xiàn)象。因此步進(jìn)電機(jī)開(kāi)環(huán)控制系統(tǒng)中,如何防止失步和過(guò)沖是開(kāi)環(huán)控制系統(tǒng)能否正常運(yùn)行的關(guān)鍵。
步進(jìn)電機(jī)加減速控制原理
失步和過(guò)沖現(xiàn)象分別出現(xiàn)在步進(jìn)電機(jī)啟動(dòng)和停止的時(shí)候。一般情況下,系統(tǒng)的極限啟動(dòng)頻率比較低,而要求的運(yùn)行速度往往比較高。如果系統(tǒng)以要求的運(yùn)行速度直接啟動(dòng),因?yàn)樵撍俣纫殉^(guò)極限啟動(dòng)頻率而不能正常啟動(dòng),輕則可能發(fā)生丟步,重則根本不能啟動(dòng),產(chǎn)生堵轉(zhuǎn)。系統(tǒng)運(yùn)行起來(lái)以后,如果達(dá)到終點(diǎn)時(shí)立即停止發(fā)送脈沖串,令其立即停止,則由于系統(tǒng)慣性作用,會(huì)使步進(jìn)電機(jī)轉(zhuǎn)子轉(zhuǎn)到接近終點(diǎn)平衡位置的下一個(gè)平衡位置,并在該位置停下,從而產(chǎn)生過(guò)沖現(xiàn)象。因此,在步進(jìn)電機(jī)啟動(dòng)或停止時(shí)就需要進(jìn)行加、減速控制。加減速控制多采用軟件來(lái)實(shí)現(xiàn),分為加速、勻速和減速三個(gè)階段。其控制曲線如圖1所示。
圖1 步進(jìn)電機(jī)加減速控制曲線
加減速控制方法
采用微處理器對(duì)步進(jìn)電機(jī)進(jìn)行加減速控制,實(shí)際上就是改變輸出脈沖的時(shí)間間隔,升速時(shí)脈沖頻率逐漸加快,減速時(shí)脈沖頻率逐漸變慢。采用恒加速度算法,易操作性強(qiáng),效果也很好。如圖2所示,Δtm時(shí)間內(nèi)相鄰脈沖變化完成時(shí),即步進(jìn)電機(jī)轉(zhuǎn)過(guò)一步,所以,圖2中陰影部分面積為1。
圖2 步進(jìn)電機(jī)加減速時(shí)脈沖頻率變化圖
設(shè)電動(dòng)機(jī)的加速時(shí)的第m步頻率為Fm,第m-1步頻率為Fm-1。加速度是F的斜率,設(shè)為a,則
a=(Fm-Fm-1)/Δtm;
另有((Fm + Fm-1)Δtm)/2=1;
由以上兩式可推出:
A=((fmax-f0)*(fmax+f0))/(2*trans);
軟件實(shí)現(xiàn)
采用定時(shí)器中斷方式控制電機(jī)變速時(shí),實(shí)際上是不斷改變定時(shí)器裝載值的大小??刂泼}沖由ARM芯片S3C4510的定時(shí)器發(fā)出,則定時(shí)器的溢出頻率應(yīng)為二倍的控制脈沖頻率。實(shí)現(xiàn)函數(shù)如下:
void pulse (REG16 f0,REG16 fmax,REG16 tran,REG16 steep)
{ UINT16 I,A;
SysDisableInt(INT_TIMER0);
SysSetInterrupt(INT_TIMER0,OnTimer2);
trans = tran;
A = ((fmax-f0)*(fmax+f0))/(2*trans);
for(i=0;i <= trans;i++)
{ f[i> = sqrt_16(2*A*i+f0*f0);
}
f0 += f0; //2f0
TMOD=0x00; //disable timer0 and timer1
TDATA0=0x2FAF080/f0;//f0=50,000,000/TDATA0
TMOD=0x03; //enable timer0 and timer1 in interval mode
step = steep+steep; //2step
trans = trans+trans;
tempstep=0; //the number of pulse
output = 0;
status = 0; //the state of pulse,high or low
SysEnableInt(INT_TIMER0); }
其中f0為起始脈沖頻率,fmax為到達(dá)勻速運(yùn)行狀態(tài)時(shí)的最大脈沖頻率,tran為加速或減速時(shí)的過(guò)渡脈沖步數(shù),steep為該程序段總的脈沖步數(shù)。
結(jié)語(yǔ)
采用以ARM為內(nèi)核的微處理器主頻高、指令執(zhí)行速度快,能輸出較高的脈沖頻率,并采用加減速控制方法控制步進(jìn)電機(jī)能平穩(wěn)高速的運(yùn)行,因此非常適合用于經(jīng)濟(jì)型數(shù)控機(jī)床中,代替原來(lái)基于PC機(jī)的數(shù)控機(jī)床,降低成本。
另外需要注意的是,嵌入式數(shù)控系統(tǒng)的開(kāi)發(fā)一般都是基于嵌入式實(shí)時(shí)操作系統(tǒng)的,比如UC/0S-II。而操作系統(tǒng)的本身都要依賴于定時(shí)中斷作為調(diào)度的基礎(chǔ),在移植操作系統(tǒng)和選擇控制步進(jìn)電機(jī)的定時(shí)器時(shí)要特別小心,兩者不能產(chǎn)生沖突和影響,否則整個(gè)系統(tǒng)將會(huì)崩潰。