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