軟、硬件的并行開發(fā)方法可以加快設計進程,但在系統(tǒng)整合時常常出現(xiàn)很多問題,而硬件回路仿真能有效解決這些問題,采用該技術可以在開發(fā)周期初完成嵌入式軟件仿真。本文以HIL技術在實驗性動態(tài)直升機系統(tǒng)用嵌入式控制軟件中的應用為例闡述該技術的應用特點和方法。設計工程師一直在努力縮短新產(chǎn)品開發(fā)周期,而軟硬件并行開發(fā)就是一種比較好的方法。通常這種方法需要多個獨立的軟硬件開發(fā)小組參與,這些小組的工作相互間獨立、并行地進行。當原型硬件和嵌入式代碼的主要部分實現(xiàn)后,就可以在系統(tǒng)整合階段將硬件與軟件合并起來并開始測試工作。?
在系統(tǒng)整合時經(jīng)常會發(fā)生嚴重的問題,有些問題甚至會導致軟件或硬件的重新設計。在問題成堆發(fā)生、成本持續(xù)升高或計劃拖延太久的情況下,有可能中斷設計項目,有時甚至不得不取消項目。因此,人們需要找到更好的方法來解決這些問題。?
回路硬件(hardware-in-the-loop,HIL)仿真被證明是一種有效的解決方法。該技術能確保在開發(fā)周期早期就完成嵌入式軟件的測試。到系統(tǒng)整合階段開始時,嵌入式軟件測試就要比傳統(tǒng)方法做得更徹底更全面。這樣可以及早地發(fā)現(xiàn)問題,因此降低了解決問題的成本。?
本文所要討論的就是采用了HIL仿真的一個嵌入式軟件開發(fā)項目。該項目的目標是開發(fā)和測試實驗性動態(tài)“直升機”系統(tǒng)用的嵌入式控制軟件。有了HIL仿真后,人們無需使用除嵌入式處理器及其I/O接口外的任何硬件就能完成該控制器軟件的設計和測試。?
隨后的實際系統(tǒng)硬件與運行新軟件的嵌入式控制器的連接首次便獲得成功。在硬件、軟件整合階段唯一要做的額外工作是對一些控制器參數(shù)的少量調(diào)整,這是由于實際系統(tǒng)硬件與其仿真模型之間畢竟存在差異。?
直升機系統(tǒng)?
本項目需要開發(fā)適合Quanser 3自由度(3DOF)直升機的控制器軟件。這是一個桌面電磁系統(tǒng),內(nèi)含由兩個獨立電子馬達控制的3個旋轉(zhuǎn)軸,每個軸驅(qū)動一個推進器。圖1是直升機系統(tǒng)及其運動軸的框圖。
假設傾斜軸的傾角接近零度,在對兩個馬達施加相同的高電壓后直升機會垂直向上攀升。對兩個馬達施加不同的電壓會使直升機繞傾斜軸旋轉(zhuǎn)。為了使直升機向前移動,首先需要將直升機傾斜到一個非零角度,然后對兩個馬達同時施加適當?shù)碾妷簛懋a(chǎn)生向前的推力。?
如圖2所示,系統(tǒng)采用的控制計算機具有3個位置編碼器輸入信號、兩個馬達電壓輸出信號,以及用于模式選擇與操縱桿控制的用戶輸入信號??刂朴嬎銠C通過專門設計的接口卡接收位置編碼器輸入信號,同時產(chǎn)生模擬輸出電壓,并通過數(shù)模轉(zhuǎn)換器(DAC)驅(qū)動那兩個馬達。為了提供足夠大的馬達工作電流,DAC的輸出需要連接到隨后的功率放大器進行放大。?
位置編碼器會隨時監(jiān)測每個軸的運動,這些編碼器通過光學原理感知旋轉(zhuǎn)運動并產(chǎn)生數(shù)字化的角度位置數(shù)值。位置編碼器將以每360°4096個步距,或0.08789°的量化步距分辨率對這些數(shù)值進行量化。每個編碼器的輸出信號由兩個TTL電平組成,即Phase A和Phase B,當對應軸反轉(zhuǎn)時輸出信號就在這兩個高低電平之間來回切換。根據(jù)這兩個信號之間的相位差可以判斷每個軸的運動方向,如圖3所示。脈沖頻率正比于每個軸的旋轉(zhuǎn)速率。?
直升機控制器的性能指標滿足要在一定時間內(nèi)將前進和上升軸移動到任意一個指定位置,時間一般應控制在10秒以內(nèi)。此外,直升機控制器的軟件必須支持其它一些操作模式。全套控制器操作模式包括:?
關閉模式:
控制器軟件以關閉模式啟動,此時兩個馬達上的電壓為零。一旦系統(tǒng)離開這個模式,就只能從空(Null)模式再次進入該模式。當從空模式進入關閉模式時,需要控制上升軸緩慢地下降到桌面正上方,然后將馬達電壓設置為零。?
空模式:?
當從關閉模式轉(zhuǎn)變到該模式時,首選要給馬達上電,并控制所有軸到零位置。如果從其它模式轉(zhuǎn)變到空模式,那么只需要將所有軸控制到零位置。零位置是指傾斜軸和前進軸在系統(tǒng)啟動位置,而推進組件被抬舉到上升方向的水平位置,如圖1所示。?
隨機模式:?
在10秒時間間隔內(nèi)為前進和上升軸位移命令產(chǎn)生預定義范圍內(nèi)的一個新隨機值,然后由控制器軟件將直升機移動到相應的位置。?
自動駕駛模式:?
在這種模式下,由操縱桿產(chǎn)生控制器所需的上升和水平行進命令。通過操縱桿的前后動作控制上升位置,通過左右動作來控制水平位置??刂破魍ㄟ^移動直升機來跟隨命令所指定位置。?
手動模式:?
在手動模式下,操縱桿直接產(chǎn)生馬達驅(qū)動用的電壓和與電壓差。操縱桿前后動作控制兩個馬達電壓的和,左右運動控制兩個馬達電壓的差。在這種模式下系統(tǒng)特別難以控制,如果任何軸的運動超過了某個位置限制,控制器就會自動切換到空模式。通常,在進入該模式后的幾秒鐘內(nèi)可能產(chǎn)生違反限制的問題。?
在確定系統(tǒng)功能和性能要求后,可以進行控制器軟件的開發(fā)和測試。而仿真技術的應用可以加快直升機控制器軟件的開發(fā)和測試速度。?
項目規(guī)范
為了對嵌入式軟件進行HIL仿真測試,需要使用嵌入式處理器及其附屬I/O器件。對于許多嵌入式系統(tǒng)來說,這只是整個系統(tǒng)的一小部分,可以在早期開發(fā)階段實現(xiàn)組合??梢詣?chuàng)建一個直升機硬件及其與外部環(huán)境交互的仿真,并通過控制器的I/O接口把這個仿真與嵌入式控制器連接起來。嵌入式控制器和直升機仿真就如同實際系統(tǒng)一樣工作。?
在復雜的嵌入式產(chǎn)品開發(fā)早期,經(jīng)常需要仿真一個完整系統(tǒng)在預期環(huán)境中的運行。這種利用動態(tài)系統(tǒng)仿真工具,如Simulink開發(fā)的仿真系統(tǒng)通常不是實時的,但可以作為HIL仿真的基礎。某些時候需要對這些仿真系統(tǒng)中包含的模型進行簡化和優(yōu)化,使之適合實時仿真使用。不過在本項目中不需要修改這些模型。?
復雜系統(tǒng)仿真需要用到許多高級的數(shù)學算法,但可以采用專門的軟件工具來簡化任務:Simulink是MATLAB的一個附件,它可以用來提供以框圖為主的圖形環(huán)境下的動態(tài)系統(tǒng)仿真。用Simulink進行仿真的方法是先把“調(diào)色板”上的模塊拖到繪畫區(qū)域,然后用代表信號流向的直線把這些模塊連接起來。圖4就是直升機項目中采用的位置編碼模型的Simulink框圖,該模型把以弧度表示的角度位置作為其輸入信號,并產(chǎn)生Phase A和Phase B信號作為其輸出。另外,它還輸出指示信號,用來指示相應軸到達零位置的時刻。直升機位置編碼器不會產(chǎn)生指示信號輸出,因此不使用該Simulink模型的輸出。?
Stateflow是Simulink的一個附件,用以實現(xiàn)有限狀態(tài)機模型。在這個直升機項目中,Stateflow模型用來實現(xiàn)直升機模式選擇邏輯。?
Real-Time Workshop根據(jù)Simulink框圖產(chǎn)生C代碼,其它工具需要使用這些代碼來達成編譯與執(zhí)行目標。在本項目中,其它工具包括Real-Time Windows Target和xPC Target。?
Real-Time Windows Target允許仿真的編譯與執(zhí)行作為PC機Windows系統(tǒng)中的一個實時進程,能與Windows操作系統(tǒng)同時運行。在本項目中,Real-Time Windows Target執(zhí)行的是HIL系統(tǒng)仿真,所用主機正是開發(fā)和控制直升機軟件的計算機。
xPC Target允許在PC機上執(zhí)行仿真,此時PC機的功能如同專門的實時控制器。xPC Target還提供實時的多任務內(nèi)核供只有有限硬件資源的嵌入式處理器使用。xPC Target在本項目中用來在一***立PC上產(chǎn)生和執(zhí)行直升機控制器用的實時代碼,此時該PC機就用作“嵌入式”控制器。?
仿真開發(fā)?
控制器軟件開發(fā)的第一步是實現(xiàn)對整個直升機控制器系統(tǒng)的仿真,圖5給出了仿真的頂層框圖。其中兩個較大的方框分別表示直升機系統(tǒng)本身和數(shù)字控制器,兩個較小的帶有“操縱桿”和“模式命令”標簽的方框向控制器提供用戶輸入信號。圖5中的“直升機”框圖包含有直升機動態(tài)行為的Simulink模型,如圖6所示。從圖6可以看到,該模型采用了轉(zhuǎn)移函數(shù)、求和函數(shù)和積分器等多個Simulink模塊。帶“有限運動”標簽的模塊包含有一個受限于向下靠近桌面方向的上升軸運動模型。當被仿真的直升機碰到桌面時,所有3個運動軸的速度都被置為零,因此非常接近實際直升機的行為。從靠近右邊的3個量化器可以看出位置編碼器的量化效果。?
“有限運動”模塊代表一個子系統(tǒng)。子系統(tǒng)模塊允許在仿真開發(fā)期間通過分層圖集(hierarchical sets of diagrams)來控制復雜性。子系統(tǒng)間可以進行任意多層的嵌套,類似于函數(shù)的嵌套調(diào)用。
圖5“控制器”子系統(tǒng)的詳細內(nèi)容見圖7。對3個軸角度測量值的量化結(jié)果成為控制器的3個基本輸入信號,控制器輸出的是兩個馬達的驅(qū)動電壓。圖7中的主要模塊有:驅(qū)動直升機到指定位置的“自動駕駛”模塊,在不同操作模式下產(chǎn)生前進和上升位移命令的“命令發(fā)生器”模塊,實現(xiàn)用于選擇不同直升機操作模式的有限狀態(tài)機的“模式控制”模塊。
“模式控制”模塊內(nèi)所含的狀態(tài)流程框圖如圖8所示。該框圖包含了系統(tǒng)啟動時對操縱桿進行校正的邏輯、用戶控制下的模式改變、當違反位置限值時自動切換到空模式,以及系統(tǒng)關閉的控制。
圖5所示的“控制器”模塊內(nèi)部提供了嵌入式軟件的完整實現(xiàn)方法。常見的方法是將嵌入式軟件開發(fā)當作一個獨立過程,該過程將仿真作為可執(zhí)行的軟件要求描述來使用。然而,更有效的方法是將仿真中的控制器實現(xiàn)作為“源代碼”,供嵌入式軟件使用。
在本項目中,可以把圖5的“控制器”模塊挎貝到新的Simulink項目中,并向框圖中添加相應的I/O器件模塊。然后,再調(diào)用Real-Time Workshop創(chuàng)建C代碼,經(jīng)過編譯后下載到"嵌入式”PC控制器。到此就完成了嵌入式軟件的開發(fā)工作。
回路硬件
有了直升機和控制器的非實時性Simulink仿真基礎后可以著手HIL仿真開發(fā)了。首先需要創(chuàng)建一個新的Simulink項目,再把圖5中帶“直升機”標簽的模塊挎貝進來。這種仿真建立了直升機動態(tài)模型,并包括了相應的I/O器件接口。Real-Time Windows Target支持多種I/O器件。HIL仿真所需的I/O要求包括兩個ADC輸入(用于接收控制器發(fā)出的馬達命令電壓)和6個TTL數(shù)字輸出(為3個仿真位置編碼器分別提供Phase A和Phase B信號)。
本項目中將運行Windows的臺式PC作為主機系統(tǒng),因此需要使用滿足上述條件并且具有PCMCIA接口形式的I/O器件。National Instruments公司的DAQCard-1200能夠滿足這些要求,并提供一根帶狀電纜用于連接計算機內(nèi)的接口卡和獨立的連接器模塊。
直升機仿真以固定的幀速率運行,其仿真Phase A和Phase B信號的TTL輸出則一個仿真幀更新一次。由于位置編碼器信號的脈沖速率正比于運動軸的角速度,因此仿真幀速率可以限制能準確再現(xiàn)的最大角速度。
如果采用這種方法對位置編碼器信號進行建模,那么當Phase A和Phase B信號隔幀交替時就能產(chǎn)生最高的仿真角速度。這時根據(jù)等式1就能得出仿真更新間隔h(秒)條件下最大的角速度值wmax(度/秒):
等式1
從直升機行為的數(shù)字仿真結(jié)果可以明顯看出,傾斜軸具有最大的峰值角速度,但很少出現(xiàn)超過100°/秒的情況。理想情況下h應不小于一定值,這樣HIL仿真就不會占用計算機太大的計算資源。綜合考慮這些要求,h的最佳值應是500us,此時更新速度是每秒2000幀,最大的仿真角速度是175.8°/秒,該速度已經(jīng)遠遠超過最大的角速度期望值。
每秒2000幀的直升機仿真更新速度已經(jīng)大大超出對直升機進行動態(tài)精確建模的速度要求,因此沒有必要再用高階積分算法來獲取更精確的結(jié)果。相對簡單的二階積分算法可以獲得較好的精度,此次仿真選用的就是Simulink“ode-2”梯形積分算法。與采用更加復雜的高階積分算法相比,這種算法能使仿真具有更高的效率。
為了在目標PC上下載并運行嵌入式軟件,需要用串行電纜連接主機與目標計算機,并從軟盤啟動目標系統(tǒng)內(nèi)核。根據(jù)控制器的Simulink框圖,接下來就可以下載運行嵌入式控制器用的軟件。在將目標系統(tǒng)的I/O器件與DAQCard-1200的相應端子連接起來后,可以在主機的Real-Time Windows Target中運行直升機的Simulink仿真。最后根據(jù)Simulink框圖將命令發(fā)送給嵌入式控制器,從而啟動控制器工作,完成仿真直升機的“飛行”。
在HIL仿真工作模式下可以詳細檢查嵌入式軟件的各個方面,從而可以發(fā)現(xiàn)并解決設計與實現(xiàn)中的很多問題。所有這些檢測工作期間無需變動任何實際的硬件。在這輪HIL仿真測試結(jié)束后,我們就可以得到經(jīng)過全面測試的嵌入式應用軟件,接下來與實際硬件的快速整合成功的可能性就非常大。
系統(tǒng)整合
在嵌入式軟件完成HIL測試前我們有意避免嵌入式軟件與實際直升機硬件一起運行,主要原因是為了體現(xiàn)HIL仿真的意義,以及減少硬件損壞的風險。在完成HIL測試后,可以把電纜從DAQCard-1200上拔下來并連接到直升機硬件上,接著給系統(tǒng)上電并把直升機控制到“空模式”位置,然后使之進入隨機模式,此時直升機會每隔10秒飛到隨機產(chǎn)生的前進和上升位置。雖然在響應命令時的擺動和過沖要比HIL仿真時大一些,不過就這第一次試驗來說還是相當成功的。
為了能在所有操作模式下都能取得令人滿意的系統(tǒng)性能,有必要對控制器增益進行一些調(diào)整。HIL仿真并不能完全匹配實際系統(tǒng)的行為,這是因為直升機仿真實際上在某些方面作了簡化處理,在仿真中使用的系統(tǒng)集合屬性并不完全符合實際系統(tǒng)屬性。
進行仿真開發(fā)時通常都會作出一定程度的簡化處理,事實上人們不可能對影響實際系統(tǒng)行為的所有因素實現(xiàn)完美的建模。最簡單的方法是盡量減少仿真與實際系統(tǒng)間的差異,并適當調(diào)整嵌入式軟件所需的參數(shù)。
HIL仿真為本項目的開發(fā)過程提供了極大的便利,整個嵌入式應用在首次與系統(tǒng)硬件結(jié)合運行前就得到了真實環(huán)境下的全面測試,因此有效地避免了硬件損壞的風險,而且更容易識別和解決與嵌入式軟件有關的問題。整合過程也顯得相當簡捷,只是對少許參數(shù)作了重新調(diào)整。如果將未經(jīng)測試的大型嵌入式軟件直接與硬件連接運行,那么相對來說這樣的任務就要艱巨得多,通常還會出現(xiàn)一些與整合本身有關的問題。
本項目充分體現(xiàn)了HIL仿真在開發(fā)復雜嵌入式系統(tǒng)軟件中的價值。HIL仿真技術能夠在開發(fā)早期階段對嵌入式軟件作出全面測試,因此降低了將未經(jīng)測試軟件運行于昂貴的原型硬件上所具有的風險。與傳統(tǒng)開發(fā)方法相比,正確利用HIL仿真技術能夠在更短的時間內(nèi)開發(fā)出更高質(zhì)量的產(chǎn)品。
評論
查看更多