馮明軍 鄭繼敏
【摘 ?要】針對(duì)當(dāng)前電動(dòng)伺服機(jī)構(gòu)控制軟件結(jié)構(gòu)和算法復(fù)雜、時(shí)間和空間利用不協(xié)調(diào)的問(wèn)題,本文在傳統(tǒng)電動(dòng)伺服機(jī)構(gòu)控制軟件的基礎(chǔ)上對(duì)軟件結(jié)構(gòu)、算法、時(shí)間和空間使用效率方面進(jìn)行優(yōu)化。
【關(guān)鍵詞】電動(dòng)伺服機(jī)構(gòu)控制軟件;軟件優(yōu)化
引言
電動(dòng)伺服機(jī)構(gòu)是運(yùn)控部件執(zhí)行機(jī)構(gòu),控制軟件作為電動(dòng)伺服機(jī)構(gòu)控制核心,其執(zhí)行效率與準(zhǔn)確性關(guān)乎產(chǎn)品功能是否正確實(shí)現(xiàn),性能指標(biāo)能否滿足使用要求。電動(dòng)伺服機(jī)構(gòu)控制軟件通常同時(shí)采用多種控制算法和語(yǔ)言架構(gòu),軟件所占空間較大,對(duì)執(zhí)行效率、硬件資源等要求較高,載體空間時(shí)常難以滿足運(yùn)行要求。因此,優(yōu)化軟件運(yùn)算邏輯、語(yǔ)法、結(jié)構(gòu)等顯得尤為重要。
1.電動(dòng)伺服機(jī)構(gòu)控制軟件概述
1.1電動(dòng)伺服機(jī)構(gòu)概述
一套電動(dòng)伺服機(jī)構(gòu)通常由控制器、伺服機(jī)構(gòu)及電纜組成。其中控制器由數(shù)字控制電路、模擬控制電路以及電機(jī)驅(qū)動(dòng)電路三個(gè)部分組成,伺服機(jī)構(gòu)由執(zhí)行機(jī)構(gòu)、反饋采集裝置等組成。
1.2電動(dòng)伺服機(jī)構(gòu)控制軟件概述
電動(dòng)伺服機(jī)構(gòu)控制軟件主要完成控制指令接收處理、反饋數(shù)據(jù)采集處理、閉環(huán)解算并輸出PWM信號(hào),并實(shí)時(shí)通過(guò)RS-485等總線向上級(jí)控制裝置返回指令、反饋以及狀態(tài)等數(shù)據(jù)。電動(dòng)伺服機(jī)構(gòu)控制軟件通常由多個(gè)軟件模塊構(gòu)成,如圖1所示。
2.優(yōu)化控制軟件執(zhí)行效率的原則
提高軟件運(yùn)行效率的方法有許多,根據(jù)電動(dòng)伺服機(jī)構(gòu)控制軟件,采取對(duì)應(yīng)的效率優(yōu)化策略,使軟件執(zhí)行效率得到最大程度的優(yōu)化。
a.選擇合適的算法和數(shù)據(jù)結(jié)構(gòu):合理使用結(jié)構(gòu)體、共用體變量及指針等,執(zhí)行效率更高。
b.代碼盡量簡(jiǎn)潔,避免重復(fù):對(duì)于電動(dòng)伺服機(jī)構(gòu)控制軟件來(lái)說(shuō),盡量減少代碼重復(fù)率尤為重要。
c.使用條件編譯:根據(jù)實(shí)際情況,選擇不同的編譯范圍,從而產(chǎn)生不同的代碼。
d.嵌入?yún)R編語(yǔ)言:某些軟件語(yǔ)句用匯編語(yǔ)言來(lái)寫更加有效。
e.使用位操作:位是可以操作的最小數(shù)據(jù)單位,靈活的位操作可以有效地提高程序運(yùn)行的效率。
3.電動(dòng)伺服機(jī)構(gòu)控制軟件效率優(yōu)化
根據(jù)上述軟件效率優(yōu)化的一些原則,以嵌入式C語(yǔ)言控制軟件為例,結(jié)合傳統(tǒng)電動(dòng)伺服機(jī)構(gòu)控制軟件各個(gè)模塊,對(duì)控制軟件結(jié)構(gòu)、算法等進(jìn)行優(yōu)化,以達(dá)到軟件性能整體優(yōu)化的目的,提升軟件運(yùn)行效率、準(zhǔn)確性及性能。
3.1控制軟件結(jié)構(gòu)方面
在電動(dòng)伺服機(jī)構(gòu)C語(yǔ)言DSP控制軟件中,通常一個(gè)文件可能包含多個(gè)頭文件,而各個(gè)頭文件之間很多時(shí)候是相互作用的,這就導(dǎo)致某些頭文件會(huì)被重復(fù)引用多次。如:
#include”Flash281x_API_Config.h
#endif
采用條件編譯,第一次執(zhí)行時(shí)正常引用頭文件,當(dāng)再次引用頭文件時(shí),將不滿足條件直接跳到#endif。
又如下列代碼:
#if IsReleaseVer
EnableDog();//使能看門狗
#endif
控制系統(tǒng)要求電動(dòng)伺服機(jī)構(gòu)控制軟件在某些特定條件下具有系統(tǒng)復(fù)位能力,可以使用條件編譯通過(guò)看門狗實(shí)現(xiàn)系統(tǒng)復(fù)位。
3.2初始化模塊
電動(dòng)伺服機(jī)構(gòu)控制軟件初始化除了要對(duì)寄存器、GPIO、串行通訊接口等各個(gè)模塊進(jìn)行初始化外,還要定義大量數(shù)組和變量用于數(shù)據(jù)接收、傳遞、計(jì)數(shù)、狀態(tài)標(biāo)識(shí)等,可按照最小資源分配的原則去定義數(shù)據(jù)類型,或者使用結(jié)構(gòu)體進(jìn)行定義。如:
Uint16 1553b_flag;//1553B通信標(biāo)識(shí)
Double VoltageFilter[4][16];//電壓濾波數(shù)據(jù)
優(yōu)化點(diǎn)1:上述定義中,通信標(biāo)識(shí)只有0和1兩個(gè)狀態(tài),占用2個(gè)字節(jié)空間,可定義為unsignedchar型僅占用1個(gè)字節(jié)空間;而濾波數(shù)據(jù)在系統(tǒng)中保留3位小數(shù)就能滿足實(shí)際精度要求,可用float型數(shù)據(jù)代替double型數(shù)據(jù),節(jié)省了4個(gè)字節(jié)空間。
優(yōu)化點(diǎn)2:另外,把結(jié)構(gòu)體的成員按照它們的類型長(zhǎng)度排序,聲明成員時(shí)首先存放多字節(jié)數(shù)據(jù),然后再存放少字節(jié)數(shù)據(jù),把長(zhǎng)的類型放在短的前面。
3.3指令接收處理模塊
電動(dòng)伺服機(jī)構(gòu)控制軟件通過(guò)DSP片上外設(shè)、通信控制器等接收控制裝置發(fā)送的指令數(shù)據(jù)并解析。如:
DataSum=DataSum+RData[i];
RData_Ave=(DataSum-max-min)/8;//指令數(shù)據(jù)均值
優(yōu)化點(diǎn)1:電動(dòng)伺服機(jī)構(gòu)控制軟件工作期間根據(jù)指令周期源源不斷接收來(lái)自控制裝置的控制指令,若將上述指令數(shù)據(jù)求和改為DataSum+=RData[i],可提高效率。
優(yōu)化點(diǎn)2:另外,乘除法很消耗資源,上述求指令均值可改為(DataSum-max-min)>>3。
3.4反饋采集模塊
反饋采集模塊完成反饋數(shù)據(jù)采集、量綱轉(zhuǎn)換、擬合處理,并對(duì)反饋數(shù)據(jù)進(jìn)行零位補(bǔ)償?shù)?。如?/p>
Delay(100);
angle_data[1]=SpiaRegs.SPIRXBUF;//反饋采集
優(yōu)化點(diǎn)1:DSP控制軟件中,模擬量反饋數(shù)據(jù)經(jīng)A/D模數(shù)轉(zhuǎn)換后,一般需經(jīng)片上外設(shè)SPI進(jìn)入DSP參與閉環(huán)控制或遙測(cè)輸出,而A/D轉(zhuǎn)換器發(fā)送數(shù)據(jù)通常需要一定時(shí)間,這就需要用到延時(shí)函數(shù),對(duì)于只需較少的時(shí)鐘周期延時(shí)的地方,可以嵌入?yún)R編語(yǔ)言提高效率,如asm(“RPT#7||NOP”)。
優(yōu)化點(diǎn)2:延時(shí)函數(shù)自加的形式for(i=0;i<100;i++),可以寫為:for(i=100;i>0;i--),這樣使得在大量使用延時(shí)函數(shù)的電動(dòng)伺服機(jī)構(gòu)控制軟件中將節(jié)省很大一部分空間。
3.5閉環(huán)控制模塊
軟件將當(dāng)前指令與反饋數(shù)據(jù)進(jìn)行比較并解算,根據(jù)解算所得控制量大小計(jì)算相應(yīng)PWM波輸出占空比,從而輸出相應(yīng)的控制信號(hào)。在一個(gè)閉環(huán)控制系統(tǒng)中融合多種控制算法,必然占用更多的空間資源,且多數(shù)系統(tǒng)對(duì)閉環(huán)周期要求較為苛刻。如:
DataCache[Ch][i]=DataCache[Ch][i+1];
SumData+=DataCache[Ch][i];
Ex=SumData/21;
優(yōu)化點(diǎn):可以使用指針運(yùn)算代替數(shù)組索引,用乘法代替除法,這樣做常常能產(chǎn)生又快又短的代碼。因此上述代碼可改為:
*(DataCache+i)= *(DataCache+i+1);
SumData+=*(Cache+i);
*Exout=SumData*0.04762;//用乘法代替除法
3.6調(diào)試模式模塊
調(diào)試模塊主要完成電動(dòng)伺服機(jī)構(gòu)軟件的一些輔助功能,如參數(shù)上傳、參數(shù)查詢、設(shè)置反饋元件ID及程序上傳等。如:
switch(Rcvd){
case0xA1:SetID();break;//設(shè)置反饋ID
case0xA2:SCParam();break;//參數(shù)上傳
case0xA3:CXParam();break;//參數(shù)查詢
case0xA4:Write_flash();break;//寫FLASH
default:NOP;}
優(yōu)化點(diǎn):可以對(duì)case的值依照發(fā)生的可能性進(jìn)行排序,把最有可能的放在第一位,這樣可以提高性能。以上調(diào)試功能中,按頻率從大到小順序應(yīng)為:參數(shù)查詢→參數(shù)上傳→寫FLASH→設(shè)置反饋ID。
4.結(jié)語(yǔ)
本文通過(guò)對(duì)電動(dòng)伺服機(jī)構(gòu)控制軟件整體結(jié)構(gòu)及各個(gè)模塊進(jìn)行優(yōu)化設(shè)計(jì),使得電動(dòng)伺服機(jī)構(gòu)控制軟件結(jié)構(gòu)、算法、時(shí)間及空間的利用效率得到進(jìn)一步優(yōu)化,有助于電動(dòng)伺服機(jī)構(gòu)控制軟件功能實(shí)現(xiàn)和性能提升。
參考文獻(xiàn)
[1]StephenPara.《CPrimerPlus(第五版)中文版》,人民郵電出版社,2005.2.
[2]鐘睿,李尚柏.《基于TI系列的DSP設(shè)計(jì)與開(kāi)發(fā)》,化學(xué)工業(yè)出版社,2015.1