王金領 盧 鷗
(海天塑機集團有限公司技術中心,浙江 寧波 315800)
在數(shù)控系統(tǒng)中,各個運動軸的插補算法是運動控制的核心之一,良好的插補算法是設備加工精度、運行平穩(wěn)的關鍵因素。
數(shù)控系統(tǒng)的插補實現(xiàn)一般有兩種方式:(1)“一次插補法”,又被稱為“基準脈沖插補”。這種插補算法實現(xiàn)比較簡單,所有的插補運算全部由一個CPU實現(xiàn),在每次插補運算中每個進給軸只能產(chǎn)生一個脈沖,所以無論怎樣改進插補算法,其產(chǎn)生的脈沖頻率都會受到CPU頻率的限制。并且因為采用單CPU工作方式,如果CPU占用率過高,任務調度開銷嚴重,還會出現(xiàn)脈沖頻率波動現(xiàn)象。(2)“二次插補法”現(xiàn)代中高檔數(shù)控系統(tǒng)基本采用了二次插補方式,該算法采用兩塊CPU分別進行粗插補和精插補,粗插補CPU一般由ARM或DSP擔任,實現(xiàn)加工代碼譯碼、速度控制、粗插補等運算;而精插補一般是采用FPGA實現(xiàn),這是利用了FPGA超強的并行運算能力,可以同時處理多個運算。
由于二次插補方式的這些優(yōu)點,所以現(xiàn)代系統(tǒng)基本都是采用該方式實現(xiàn)運動插補。
傳統(tǒng)的FPGA精插補方式一般采用除法運算,在每個插補周期開始時,由一次插補周期內FPGA的時鐘數(shù)Clocks除以該周期需要輸出的脈沖數(shù)Pulse,從而得到每產(chǎn)生一個脈沖需要間隔的時鐘數(shù)Period,即:
Period=Clocks÷Pulse
(1)
如果Clocks能夠被Pulse整除,則該除法算式不會產(chǎn)生余數(shù),按照每Period個FPGA時鐘產(chǎn)生一個脈沖輸出,則在一個插補周期結束時,就會產(chǎn)生Pulse個脈沖輸出。但是在Clocks不能夠被整除時,則會產(chǎn)生余數(shù),如果這時候仍然按照每間隔Period個時鐘周期產(chǎn)生一個脈沖輸出,則有可能在一個插補周期結束時,產(chǎn)生超過Pulse個脈沖的輸出。
若要解決這個算法存在的問題,一般是在脈沖輸出部分添加一個積分電路,將每次的余數(shù)計入積分器,在積分器數(shù)值達到Period脈沖時,進行一次脈沖輸出的修正,從而達到最終輸出Pulse個脈沖的目的。
雖然能夠輸出正確的脈沖個數(shù),但是在脈沖修正的過程中,必然會造成輸出脈沖頻率的變化,從而會導致設備進給速度的變化,可能會造成設備的抖動或者刀具紋路的變化,從而降低了設備的加工精度。
為了解決傳統(tǒng)FPGA精插補算法的缺陷,產(chǎn)生理論上完全均勻化的脈沖輸出,對傳統(tǒng)精插補算法進行了改進。在每個插補周期開始時,利用同步時鐘將脈沖累加器Sum清零,在以后的每個FPGA時鐘將累加器的值加上插補周期需要輸出的脈沖數(shù)Pulse,然后判斷累加器的值是否超出插補周期內FPGA的時鐘周期數(shù)Clocks/ 2,若是則產(chǎn)生一個脈沖的上升沿,如果累加器的值超出Clocks,則產(chǎn)生一個下降沿輸出,同時將Sum值減去Clocks。這樣在一個插補周期內累加器的累加值每次累加Pulse,共計累加了Clocks次,在不考慮溢出的情況下總的累加值為
Sum=Pulse×Clocks
(2)
由此可以算出,累加器一共溢出了Sum/Clocks次,也就是Pulse次,也就產(chǎn)生了一個占空比為50%,脈沖數(shù)為Pulse的脈沖。并且是誤差值在一個FPGA時鐘周期之內的理論上最佳均勻化的脈沖輸出。
該算法只采用了加法運算,并且不需要前置處理,僅僅利用加法產(chǎn)生的Sum值與Clocks比較作為脈沖的輸出信號,就產(chǎn)生了均勻化的脈沖輸出。大大提高了FPGA的執(zhí)行效率和算法的簡便性。
除了良好地實現(xiàn)了均勻化脈沖輸出的目的,該算法還可以靈活地進行一些功能擴展。
有時要求輸出波形的起始脈沖為高電平輸出或低電平輸出,或者要求首脈沖要進行相位移動以滿足驅動設備的要求。
若要實現(xiàn)以上要求,只需要根據(jù)不同的要求設置脈沖累加器Sum的初始值,初始值越大,則波形的相位向左移動,初始值變小,則波形的相位向右移動。只要設置合適的初始值就可以得到不同相位的輸出脈沖,并且產(chǎn)生的仍然是準確的、均勻化的脈沖輸出。
當需要精插補產(chǎn)生N倍的輸出脈沖時,只需要將累加器每次的累加值乘以N就可以產(chǎn)生N倍Pulse的脈沖輸出。并且產(chǎn)生的仍然是準確的、均勻化的脈沖輸出。
在數(shù)控系統(tǒng)的模擬輸出方式或者一些需要DA輸出的場合,可以將PWM波輸出端加濾波電容,產(chǎn)生模擬量的輸出。模擬電壓的高低可以由PWM的占空比控制,PWM的占空比越高,則濾波產(chǎn)生的電壓越高;PWM的占空比越低,則濾波產(chǎn)生的電壓越低。
模擬輸出電壓值Vo、和脈沖輸出高電平的電壓VDD以及PWM占空比R之間的關系為:
Vo=VDD×R
(3)
若要產(chǎn)生可調占空比的PWM波形輸出,首先計算出需要進行上升沿輸出的累加器值PP:
PP=Clocks×(1-R)
(4)
與產(chǎn)生占空比50%脈沖的相比,累加器仍然在每個FPGA時鐘累加Pulse,只是不再判斷累加器的值是否大于等于Clocks/ 2,而是判斷累加器的值是否大于等于PP,若是則產(chǎn)生一個脈沖的上升沿,如果累加器的值超出Clocks,則產(chǎn)生一個下降沿輸出,同時將Sum值減去Clocks。這樣就會產(chǎn)生一個占空比為R,每個插補周期內輸出脈沖個數(shù)為Pulse的PWM波形。
這種PWM波不僅可以調頻,而且可以調整輸出的占空比,具有非常廣泛的應用范圍。
本文介紹了一種FPGA精插補的實現(xiàn)算法,在實現(xiàn)了理論上的均勻化脈沖輸出外,并且顯著降低了FPGA代碼的復雜度。并且該算法還可以方便地進行輸出脈沖的相位平移、輸出脈沖的倍頻輸出以及輸出可調占空比的PWM波,具有非常廣泛的應用范圍。
[1]閆莎莎.基于DPS+CPLD的多軸運動控制器平臺設計及單軸伺服運動控制算法研究[D].杭州:浙江大學,2010.
[2]徐霞棋 .基于 DSP 的多軸運動控制系統(tǒng)設計[D].上海:上海交通大學,2007.
[3]徐志軍 . CPLD/FPGA的開發(fā)與應用[M]. 北京:電子工業(yè)出版社,2002.