梁磊磊,何高清
(合肥工業(yè)大學(xué) 機(jī)械工程學(xué)院,安徽 合肥 230009)
插補(bǔ)算法的質(zhì)量直接影響數(shù)控系統(tǒng)的精度和速度, 是數(shù)控機(jī)床的重要技術(shù)指標(biāo)。插補(bǔ)器是數(shù)控系統(tǒng)用來完成運動軌跡擬合的程序或硬件。數(shù)控系統(tǒng)的插補(bǔ)算法大致分為:脈沖當(dāng)量法與數(shù)字積分法[1]。(1)脈沖當(dāng)量法適用對速度與精度要求不高,以步進(jìn)電機(jī)為主要控制對象的開環(huán)數(shù)控系統(tǒng)[2];而現(xiàn)在的數(shù)控系統(tǒng)大都采用數(shù)字積分法插補(bǔ),相較于脈沖當(dāng)量插補(bǔ),數(shù)字積分法擁有更高的插補(bǔ)速度與精度。(2)數(shù)字積分法包括粗插補(bǔ)與精插補(bǔ),其中粗插補(bǔ)是將給定的軌跡分割為較大的段,完成插補(bǔ)的預(yù)處理;精插補(bǔ)是將粗插補(bǔ)算出的直線段再細(xì)分,進(jìn)行插補(bǔ)運算,并形成最后的脈沖輸出,從而精確地控制電機(jī)的運動。精插補(bǔ)的關(guān)鍵在于實現(xiàn)輸出脈沖的均勻化,若只采用CPU完成精插補(bǔ),則會消耗CPU大量的時間資源,影響其他通訊與控制程序的執(zhí)行,降低系統(tǒng)的實時性。為了提高系統(tǒng)的實時性,同時完成輸出脈沖均勻化的運動控制,當(dāng)前主流的解決方案是由主CPU完成粗插補(bǔ),再由CPLD、FPGA或運動控制卡等模塊,獨立完成精插補(bǔ)程序[3-8]。但是,這種結(jié)構(gòu)增加了控制系統(tǒng)的硬件與軟件的復(fù)雜度,開發(fā)難度大,不利于在空間要求高的緊湊型數(shù)控系統(tǒng)中使用。
本研究提出一種基于同步異構(gòu)DSP的CLA模塊的脈沖均分插補(bǔ)器(CLA是TMS320F28377芯片中可以獨立于CPU運行的內(nèi)嵌模塊,通過主控制器與CLA模塊并行處理任務(wù),即主控制器發(fā)送指令觸發(fā)CLA軟中斷,CLA模塊上運行脈沖均分算法執(zhí)行精插補(bǔ)器的任務(wù),輸出脈沖;這種結(jié)構(gòu)無需外接其他控制組件,可降低系統(tǒng)的復(fù)雜度,提高系統(tǒng)的可靠性與實時性[9])。
內(nèi)置于同步異構(gòu)DSP的模塊,通過引入并行處理的功能,擴(kuò)展了主CPU的能力,用于對時間要求嚴(yán)格的控制,實現(xiàn)了更快的系統(tǒng)響應(yīng)和更高頻率的控制回路;通過將CLA用于對時間敏感的關(guān)鍵任務(wù),可以釋放主CPU去執(zhí)行其他系統(tǒng)任務(wù)和通信,從而提高了系統(tǒng)的實時性。
目前,為了實現(xiàn)精插補(bǔ)過程中,保持輸出脈沖的均勻化,同時不降低系統(tǒng)的實時性,往往采用CPU外接運動控制模塊來實現(xiàn)。相較于傳統(tǒng)的解決方案,采用同步異構(gòu)數(shù)字信號處理器的CLA模塊來實現(xiàn)脈沖均分算法,具有以下優(yōu)勢:
(1)CLA模塊與CPU共用系統(tǒng)時鐘源,即擁有相同的時鐘速率,無需為外置模塊配置獨立的時鐘信號源;
(2)CLA模塊建立于獨立的構(gòu)架,其任務(wù)由CPU軟件觸發(fā)或由硬件中斷觸發(fā),無需配置復(fù)雜的數(shù)據(jù)與控制總線;
(3)CLA模塊擁有GPIO等外設(shè)的操作權(quán)限,這些權(quán)限由CPU分配給CLA,因此CLA可以繞過CPU直接控制CPIO,不必通過CPU來控制運動控制模塊輸出脈沖,減少了消息傳遞的跨度,提高了系統(tǒng)的可靠性與實時性;
(4)CLA模塊與CPU的程序都可以采用C語言編寫,且可以在相同的開發(fā)環(huán)境下進(jìn)行程序的編寫、調(diào)試與下載,降低了開發(fā)難度,提高了開發(fā)效率與系統(tǒng)的可維護(hù)性。而如DSP+FPGA、ARM+CPLD等方案,需要針對每個主芯片,采用不同的開發(fā)方式與環(huán)境[10],難度較大的VHDL等硬件描述語言,更是增加了控制系統(tǒng)的研發(fā)成本與時間。
精插補(bǔ)脈沖均勻化算法是服務(wù)于數(shù)字積分法的精插補(bǔ)部分。由于計算機(jī)系統(tǒng)是離散的,在精插補(bǔ)的過程中,直線段細(xì)分的結(jié)果可能得不到整型數(shù),導(dǎo)致計算機(jī)無法處理。在計算機(jī)中,最直接的方法是對結(jié)果進(jìn)行取整,但這樣會導(dǎo)致在每個插補(bǔ)周期脈沖周期偏小,即脈沖周期內(nèi)會有一段時間沒有脈沖產(chǎn)生,即為空行程,從而導(dǎo)致了脈沖不均勻,會對電機(jī)運行的穩(wěn)定性產(chǎn)生消極的影響。
以插補(bǔ)周期為4 ms, GPIO輸出脈沖最小翻轉(zhuǎn)時間為1 us為例,則有:
(1)
式中:Nmax—插補(bǔ)周期內(nèi)的最大脈沖數(shù);T1—插補(bǔ)周期時間;Tmin—輸出脈沖最小翻轉(zhuǎn)時間。
插補(bǔ)周期內(nèi)的脈沖周期為:
(2)
式中:N—插補(bǔ)周期內(nèi)輸出的脈沖數(shù)量。
脈沖輸出的時間占插補(bǔ)周期的比值可以量化輸出脈沖均勻化的水平,其值愈小,則輸出脈沖愈不均勻,其數(shù)學(xué)表述為:
(3)
式中:μ—脈沖不均勻水平;δ—脈沖均勻化水平。
通過式(3),可得脈沖不均勻水平μ與脈沖數(shù)N的關(guān)系,如圖1所示。
圖1 脈沖不均勻水平μ與脈沖數(shù)N的關(guān)系
由圖1可知:在脈沖數(shù)N=1 001時,脈沖不均勻水平μ可達(dá)到最高值0.499 5;且在N的多數(shù)取值中都出現(xiàn)了脈沖不均勻現(xiàn)象,故有必要采取算法消除脈沖不均勻的現(xiàn)象。
通常情況下,若輸出脈沖的周期變化小于驅(qū)動器允許脈沖輸入的最小周期時,就可以認(rèn)為輸出脈沖周期是均勻的。以此為依據(jù),在插補(bǔ)周期內(nèi),設(shè)置2個脈沖周期,兩者之間相差1個輸出脈沖最小周期,即驅(qū)動器允許脈沖輸入的最高頻率為 500 kHz,則有方程組:
(4)
解得:
(5)
式中:TP1—脈沖周期1;N1—周期為TP1的脈沖數(shù);TP2—插補(bǔ)周期2;N2—周期為TP2的脈沖數(shù)。
將TB=2 us與T1=4 ms代入式(5),可得:
(6)
本文通過設(shè)置這2個插補(bǔ)周期TP1與TP2,進(jìn)行精插補(bǔ)運算,可以在算法層面徹底消除脈沖輸出脈沖不均勻的現(xiàn)象。
基于同步異構(gòu)DSP的CLA模塊,本文構(gòu)建的雙脈沖周期精插補(bǔ)脈沖均勻化算法的硬件系統(tǒng)結(jié)構(gòu)圖如圖2所示。
圖2 硬件系統(tǒng)結(jié)構(gòu)
由圖2可知:控制系統(tǒng)同時為CPU與CLA提供時鐘源與存儲空間,通過主CPU配置定時器2的定時中斷,為CLA模塊提供插補(bǔ)的基準(zhǔn)頻率,觸發(fā)CLA模塊來執(zhí)行精插補(bǔ)運算。同時,控制系統(tǒng)分配給CLA模塊控制GPIO的權(quán)限,用來輸出插補(bǔ)的脈沖。
TMS320F28377的定時器1的定時中斷周期設(shè)置為4 ms,用于提供插補(bǔ)周期,由主CPU來執(zhí)行該中斷服務(wù)程序;定時器2的定時中斷周期為1 us,為最小脈沖的電平翻轉(zhuǎn)時間,即基準(zhǔn)頻率,由此得出精插補(bǔ)器輸出的最小脈沖周期為2 us。
CLA的插補(bǔ)任務(wù)由定時中斷來觸發(fā),在定時器2的每個定時中斷服務(wù)程序中,CLA可以選擇脈沖的發(fā)送使能或停止,從而控制輸出脈沖的周期;執(zhí)行精插補(bǔ)程序變量存儲在CPU與CLA的共享內(nèi)存區(qū)域,CPU與CLA都可以直接讀取與修改這些變量,以加快數(shù)據(jù)傳輸?shù)乃俣取?/p>
在每個插補(bǔ)周期中,精插補(bǔ)中2個插補(bǔ)周期的長度與脈沖數(shù),由主CPU計算得出,再傳遞給CLA,這部分的C語言源程序如下:
PulseA=2 000/N;
PulseB=PA+1;
CountA=(PulseA+1)*N-2000;
CountB=2 000-PulseA*N;
其中:N—插補(bǔ)周期內(nèi)需要輸出的脈沖數(shù);PulseA—脈沖的電平翻轉(zhuǎn)時間1;PulseB—脈沖的電平翻轉(zhuǎn)時間2;CountA—翻轉(zhuǎn)時間為PulseA的脈沖計數(shù);CountB—翻轉(zhuǎn)時間為PulseB的脈沖計數(shù)。
使用CLA模塊,實現(xiàn)脈沖均分算法的流程簡圖如圖3所示。
圖3 脈沖均分算法的流程簡圖
由圖3可知:CLA通過接受主CPU通過共享內(nèi)存?zhèn)鬟f過來的參數(shù),來執(zhí)行精插補(bǔ)。
當(dāng)一個插補(bǔ)周期開始時,設(shè)置運行位為真,CLA便以定時器2的定時中斷為基準(zhǔn),開始執(zhí)行2個插補(bǔ)周期與脈沖數(shù)的插補(bǔ)指令,插補(bǔ)完成以后,以狀態(tài)位置位來通知主CPU當(dāng)前的插補(bǔ)周期任務(wù)已經(jīng)完成,CLA接著開始等待下一個插補(bǔ)周期的任務(wù)。
本文使用CCS(code composer studio)軟件的在線調(diào)試功能,以TMS320F28377S為硬件實驗平臺,在插補(bǔ)周期為,GPIO輸出脈沖的最小周期為的條件下,選取插補(bǔ)周期內(nèi)輸出的脈沖數(shù)N=1 001與667這兩個會導(dǎo)致脈沖不均勻水平較大的取值,進(jìn)行單脈沖周期精插補(bǔ)算法,并與基于CLA的雙脈沖周期精插補(bǔ)算法進(jìn)行對比實驗。
當(dāng)N=1 001時,使用單脈沖周期精插補(bǔ)算法后,脈沖在插補(bǔ)周期內(nèi)的分布情況如圖4所示(這種情況下脈沖分布的不均勻程度最嚴(yán)重,空行程時間占據(jù)了脈沖周期的49.95%)。
圖4 當(dāng)N=1 001時使用單脈沖周期精插補(bǔ)算法后脈沖在插補(bǔ)周期內(nèi)的分布情況
由圖4可知:在整個插補(bǔ)周期內(nèi),脈沖只分布在0~2 ms這一時間段,在該時間段內(nèi)已經(jīng)輸出了1 001個脈沖;在2 ms~4 ms時間段內(nèi)沒有脈沖輸出,即空行程時間占脈沖周期的比例約為50%。由此可見,在誤差允許的范圍內(nèi),該結(jié)果與理論結(jié)果(空行程時間占據(jù)了脈沖周期的49.95%)相符合。
當(dāng)N=667時,使用單脈沖周期精插補(bǔ)算法后,脈沖在插補(bǔ)周期內(nèi)的分布情況如圖5所示。
圖5 當(dāng)N=667時使用單脈沖周期精插補(bǔ)算法后脈沖在插補(bǔ)周期內(nèi)的分布情況
由圖5可知:在整個插補(bǔ)周期內(nèi),閑置時間占據(jù)了脈沖周期的比例約為1.33/4=33.25%。由此可見,在誤差允許的范圍內(nèi),該結(jié)果與由式(3)得出的理論值33.33%相符合。
這些實驗結(jié)果證明,采用單脈沖周期精插補(bǔ)算法會出現(xiàn)輸出脈沖分布不均勻的情況。
理論上,采用改進(jìn)的雙脈沖周期精插補(bǔ)脈沖均勻化算法后,在的取值范圍內(nèi),脈沖輸出時間都會占據(jù)整個插補(bǔ)周期的100%,從而可以消除輸出脈沖不均勻的現(xiàn)象。
由式(6)可得,當(dāng)N=1 001、667時,脈沖均分算法的運行參數(shù)如表1所示。
表1 當(dāng)N=1 001、667時脈沖均分算法的運行參數(shù)
當(dāng)N=1 001時,使用雙脈沖周期精插補(bǔ)算法后,脈沖在插補(bǔ)周期內(nèi)的分布情況如圖6所示。
當(dāng)N=667時,使用雙脈沖周期精插補(bǔ)算法后,脈沖在插補(bǔ)周期內(nèi)的分布情況如圖7所示。
圖6 當(dāng)N=1 001時使用雙脈沖周期精插補(bǔ)算法后脈沖在插補(bǔ)周期內(nèi)的分布情況
圖7 當(dāng)N=667時使用雙脈沖周期精插補(bǔ)算法后脈沖在插補(bǔ)周期內(nèi)的分布情況
從圖(6,7)可以看出:在N=1 001與667的情況下,輸出脈沖占據(jù)了插補(bǔ)周期的全部時間,沒有空行程,達(dá)到了輸出脈沖均勻化的效果。
當(dāng)N=1 001,使用雙脈沖周期精插補(bǔ)算法時,脈沖在插補(bǔ)周期起始時間段的輸出波形如圖8所示。
圖8 N=1 001時使用雙脈沖周期精插補(bǔ)算法時脈沖在插補(bǔ)周期起始時間段的輸出波形
由圖8可知:當(dāng)N=1 001時,輸出脈沖由起始2個周期為2 us的脈沖與后續(xù)周期為4 us的脈沖組成。
當(dāng)N=667,使用雙脈沖周期精插補(bǔ)算法時,脈沖在插補(bǔ)周期起始時間段的輸出波形如圖9所示。
圖9 N=667時使用雙脈沖周期精插補(bǔ)算法時脈沖在插補(bǔ)周期起始時間段的輸出波形
由圖9可知:當(dāng)N=667,輸出脈沖由起始1個周期為4 us的脈沖與后續(xù)周期為6 us的脈沖組成。
將以上結(jié)果與表1中的數(shù)據(jù)相比較可知,脈沖均分算法的實際輸出結(jié)果與理論的一致,說明該算法在實際硬件中能夠正確運行,且達(dá)到了預(yù)期的效果。同時,實驗結(jié)果說明了能夠基于同步異構(gòu)DSP的CLA模塊的硬件結(jié)構(gòu),實現(xiàn)雙脈沖周期精插補(bǔ)脈沖均分算法,使插補(bǔ)周期中沒有閑置的空行程,達(dá)到了輸出脈沖均勻化的目的。
本研究通過脈沖均分算法,借助同步異構(gòu)DSP的CPU與CLA協(xié)同處理任務(wù)的能力,設(shè)計了數(shù)控系統(tǒng)中用于運動控制的精插補(bǔ)器,實現(xiàn)了插補(bǔ)過程中脈沖的均勻化輸出。
該系統(tǒng)硬件與軟件結(jié)構(gòu)簡單、穩(wěn)定可靠,可以在不借助外部邏輯電路的情況下(如CPLD、FPGA等),達(dá)到與之相同的效率與實時性。
筆者在研究過程中發(fā)現(xiàn)該系統(tǒng)還有不足之處,即只在CLA上實現(xiàn)了精插補(bǔ),粗插補(bǔ)還是由主CPU來完成。因此,在今后的研究中,可以將粗插補(bǔ)器也移植到CLA中,以進(jìn)一步提高硬件的使用效率與系統(tǒng)的實時性,達(dá)到更好的效果。