馮明軍 鄭繼敏

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