欒婷



摘要 本文研究一種模塊化的嵌入式軟件閉環算法的設計方法,分析了傳統閉環算法設計的不足之處,給出了模塊化閉環算法的設計理念和設計方法,并詳細給出了幾種閉環運算中常用的運算類型的模塊化封裝方法。在完全采用模塊化設計方法后,縮短了伺服系統嵌入式控制軟件的編寫和調試時間,在提高效率節省資源的同時,也提高了伺服控制軟件的可靠性。
[關鍵詞]模塊化 嵌入式 伺服控制
1 概述
伺服控制器是伺服系統的數字電子控制補償裝置,伺服控制器接收控制系統發出的數字指令信號,在伺服系統地面測試、發射準備、飛行等階段,通過控制器內部的嵌入式軟件運算,實現伺服系統內部信號采集、數字閉環控制、數字零位補償及校正和與控制系統的通訊等功能。伺服系統總體要求伺服控制器嵌入式軟件的閉環算法調整編寫速度要快,出錯次數要少,整體可靠性要高。為此伺服系統控制器的嵌入式軟件進行了以提高可靠性為主要目的的軟件模塊化設計。
2 伺服系統嵌入式軟件組成
本課題中伺服系統數字控制器以DSP(TMS320F2812)為計算平臺,采用15 53B總線進行通信,采用TI公司為此配套的編譯軟件CCS來編寫、調試和燒錄程序。
伺服控制器軟件的任務就是實現伺服系統與總線系統之間的通信,接收并執行BC的控制指令,并向BC發送伺服系統狀態信息;定時采集伺服系統數據并按指定格式傳送給總線系統;定時對采集的信號進行多項式擬合;定時對擬合后的冗余信號進行冗余表決,表決的結果作為數字閉環控制算法的反饋信號;定時接收BC發送的控制指令數據,進行伺服系統的數字閉環控制及補償;同時軟件具備初步的故障診斷及余度管理功能。
伺服系統嵌入式控制軟件的主要組成如圖l所示。
各模塊分別執行自己的功能,進行模塊間數據交互,執行閉環控制算法,完成對伺服閥的控制。
閉環控制算法通常需要進行三冗余反饋數據表決、擬合、故障診斷和余度管理等運算,閉環控制的步驟很多,如果還把閉環控制算法當成一個基本模塊來編寫,必然會使軟件的執行步驟和復雜度大大增加。這不僅增加了嵌入式軟件編寫人員的工作量,在伺服系統調試過程中,也會不可避免的增加因軟件編寫錯誤而導致的無效啟機試驗,因此而造成大量有效時間浪費和不必要的經濟損失。
為此,針對伺服系統閉環控制框圖的特點,專門對伺服控制器嵌入式軟件的閉環控制部分進行了模塊化細化設計。
3 傳統設計方法及技術改進點
3.1 傳統閉環運算程序設計方法
傳統的閉環計算方法把閉環控制框圖當成一個基本軟件模塊來設計,主要采用的是面向過程的編寫方法。因為以前的伺服系統閉環控制框圖相對比較簡單,采用面向過程的設計方法可清晰的表達控制框圖中的對應關系。
下面示出了傳統閉環控制運算中,陷波環節(二階環節)的嵌入式C程序編寫內容。
//陷波環節參數定義部分
//#define CurDifData_ CalCoeff 2.2019/*當前誤差信號數據系數+/
//#define PrevDifData_ CalCoeff4.2328/*前一次誤差信號數據系數+/
//#define PrevPrevDifData CalCoeff2.1164/*前兩次誤差信號數據系數*/
//#define PrevHYPData CalCoeff l.8575/*前一次閉環算法結果數據系數e/
//#define PrevPrevHYPData C alCoe ff0.9430/*前兩次閉環算法結果數據系數*/
//陷波環節計算過程
g_stHistoryDifference [i].m_fCurData;
對于只有一個二階計算節點的伺服系統閉環控制框圖來說,該編寫方法是比較合適的,如果在閉環控制框圖中,二階節點不只一個,并且在計算過程中還間插有一階節點、多項式擬合等運算,這種面向過程的編寫就顯的有些亂,一旦總體要修改控制框圖結構,程序調整起來工作量就比較大,并且很容易出現潛在錯誤。
3.2 改進的閉環運算程序設計方法
在閉環控制框圖中,大致有“N階節點”、“多項式擬合”和“3冗余表決”這三大類運算,如果把這三類運算分別進行模塊化封裝,使其自成一體、功能獨立,則會大大簡化閉環控制框圖的嵌入式程序編寫,軟件的維護性也會有很大提高,便是總體臨時決定改動閉環控制框圖結構,程序的改動和傳統方法相比,也會少很多,并且程序結構更加清晰,很難出現低級別的程序錯誤。下面分別介紹上述三大類運算改進的編寫過程。
3.2.1 N階節點
N階節點的計算過程中,用到了前N次的輸入/輸出狀態,為此,需要定義一些類似傳統設計方法中的全局變量來保存這些狀態,并且在每次運算時需逐次更新。為了簡化閉環運算流程,采用了可面向結構的設計方法,把這些變量封裝在結構里面,并由結構體對應的操作函數來執行運算。因每個節點的階次和參數都不同,因此,便把它們作為了該操作函數的輸入參數。這樣,便可實現N節點的封裝和獨立運算。
下面示出了改進的閉環控制運算中,二階陷波器的嵌入式C程序編寫內容。
//N階節點結構體封裝(此處N<2),位于頭文件中。
//……控制框圖中基本運算節點結構體定義……
//控制框圖中基本運算節點結構體定義
//控制算法框圖中的每一個方框都看作一個控制節點,應該為每個方框都
//定義一個節點。節點中保存著該方框的輸入和輸出狀態,默認為2階系統。
//每個節點都帶有積分輸出保持開關標志和輸出限位開關標志。
//該節點需要和對應函數ControlNode_Process()配合使用。
struct ControlNode
{
//控制節點輸入狀態,降階排列:O:當前狀態X(K)1:前1狀態X(k-l)2:前2狀態X(k-2)…
float flnput[3];
//控制節點輸出狀態,降階排列:O:當前狀態Y(K)1:前1狀態Y(k-l)2:前2狀態Y(k-2)…
fioat fOutput[3];
//控制節點計算用分子參數降階排列,和matlab離散化后數值與排列方式都相同
float fNum[3];
//控制節點計算用分母參數降階排列,和matlab離散化后數值與排列方式都相同
fioat fDen[3];
//表示當前控制節點的階數
int NodeOrder;
//輸出保持開關1:使能輸出保持,當前輸出值保持為前一個狀態值O:禁用輸出保持
int Switch_OutputHold;
∥輸出限位開關1:使能輸出限位,當前輸出值為最大限位值 O:禁用輸出限位
int Switch_OutputLimit;
//節點輸出最大值
fioat flvlaxOutput;
//節點輸出最小值
fioat fMinOutput;
);
extem
struct ControlNodestNode_Trap[2];
//陷波節點系數初始化,參數和matlab離散化計算值順序相同,復制過來加逗號即可
float fXianbo_Coef_Num[3] ={0.5753,-1.0745, 0.5168);
float fXianbo_Coef_Den[3]={1.0000,-1.7819, 0.7994};
//陷波節點初始化,陷波節點為2階節點
InitiationNode(&stNode_Trap [i],fXianboCoef_Num,fXianbo_Coef_Den,2);
//閉環控制框圖中的計算部分
//陷波節點計算mA
ControlNode_Process(&stNodeTrap[i],fErrorResult_3);
從改進后的程序中看出,在封裝的結構體內還具有輸出保持開關和限幅開關,如果當一個N階環節為積分節點時,這兩個開關就會有特殊的作用,通過控制這兩個變量,便可自動實現積分開關和限幅的功能,而并不需要重新定義結構體。
N階節點的分子和分母的離散化系數和matlab計算值排列順序相同,只要復制過來,按C語言的語法添加逗號隔開即可。
3.2.2 多項式擬合
一個閉環控制框圖中,會出現不同階次的多項式擬合,改進的模塊化設計中,提取多項式擬合的共同特征,把多項式系數和階次作為多項式擬合函數的輸入參數,從而實現了多項式擬合運算的封裝。嵌入式程序的實現步驟如下所示。
//角位移反饋輸入采樣后擬合系數
//4階擬合,系數排列順序和matlab計算值相同
float fPolyCoefs_JiaoWeiYi[5]={0.00000146029, 0.0190893, 0.0000507086,\
0.0000029009, 0.00000009069347);
,/角位移傳感器4階擬合V.> Rad輸入為電壓,擬合后為弧度
fFeedbackjiaoWeiYiRad= Polyval(fPolyCoefsJiaoWeiYi,fFeedbackjiaoWeiYi_V,4);
3.2.3 三冗余表決
三冗余表決的執行步驟比起N階環節和多項式擬合要簡單的多,改進后的模塊化設計中,把三冗余表決運算封裝成了函數。嵌入式程序的實現步驟如下。
//三冗余多數表決
fFeedbackjiaoWeiYi_Binary=
TripleRedundancyVote(giAcquisitionjiaoWeiYiData[i] [O],
g_iAcquisitionjiaoWeiYiData[i] [1],
g_iAcquisitionjiaoWeiYiData[i][2]);
4 結論
在完全采用模塊化設計方法后,伺服系統嵌入式控制軟件的編寫和調試時間縮短不少,因軟件編寫失誤而導致的伺服系統開環事件大大減少,在提高效率節省資源的同時,也提高了伺服控制軟件的可靠性。
伺服系統當前正向數字化轉型,采用數字伺服控制器的型號越來越多,控制算法也越來越復雜,這種面向結構的模塊化設計方法將越來越多地應用于各型號中。
參考文獻
[1]蘇奎峰,呂強,耿慶鋒,陳圣儉編著.TMS320F2812原理與開發[M].電子工業出版社,2005.
[2]周航慈著,嵌入式系統軟件設計中的常用算法[M].北京航空航天大學出版社.2010.