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