侯運(yùn)昌,楊東軍,甄遠(yuǎn)偉,趙許強(qiáng),申磊,沈壯壯
(中車(chē)青島四方車(chē)輛研究所有限公司,山東 青島 266000)
自動(dòng)代碼生成作為一種圖形化的軟件編寫(xiě)方法,因易編寫(xiě)、易仿真驗(yàn)證等優(yōu)點(diǎn),近年來(lái)廣泛應(yīng)用在汽車(chē)、軌道交通、電力等行業(yè)的電控系統(tǒng)[1-8],為電控軟件的編寫(xiě)帶來(lái)極大便利。Matlab Embedded Coder是一款實(shí)現(xiàn)自動(dòng)代碼生成的主流軟件工具,可生成產(chǎn)品級(jí)的具有可讀性、執(zhí)行速度快的嵌入式代碼,支持多種行業(yè)軟件標(biāo)準(zhǔn),包括 ASAP2,AUTOSAR,DO—178,IEC 61508,ISO 26262,以及MISRA—C等[9]。
文獻(xiàn)[1]在Simulink自動(dòng)代碼生成環(huán)境下,采用圖形化編程的方式建立主機(jī)控制單元與氣缸控制單元的控制策略模型,并執(zhí)行代碼的自動(dòng)生成過(guò)程,進(jìn)而實(shí)現(xiàn)汽車(chē)電控單元(electronic control unit,ECU)的集成;文獻(xiàn)[2]研究了 Matlab/Simulink的代碼生成原理,分層設(shè)計(jì)了驅(qū)動(dòng)和模塊,通過(guò)電機(jī)控制器開(kāi)發(fā)的示例,驗(yàn)證了自動(dòng)代碼生成工具和標(biāo)定系統(tǒng)這2項(xiàng)關(guān)鍵工具的工作效果;文獻(xiàn)[3]提出了一種基于由驅(qū)動(dòng)電機(jī)和測(cè)功機(jī)構(gòu)成的平臺(tái)上模擬道路工況進(jìn)行電動(dòng)汽車(chē)測(cè)試的方案,并搭建了硬件在環(huán)(hardware-in-the-loop,HIL)仿真平臺(tái)進(jìn)行了相關(guān)試驗(yàn),驗(yàn)證新系統(tǒng)的實(shí)際效果;文獻(xiàn)[4]將多旋翼飛行器控制器模型和硬件接口模型集成,使用定制的自動(dòng)生成代碼環(huán)境,生成了軟件源代碼并編譯鏈接成可執(zhí)行文件,在目標(biāo)飛控計(jì)算機(jī)上成功運(yùn)行;文獻(xiàn)[5]用Matlab搭建永磁同步電機(jī)矢量控制算法模型,用HIL仿真平臺(tái)搭建主電路模型,對(duì)算法設(shè)計(jì)進(jìn)行驗(yàn)證;文獻(xiàn)[6]通過(guò)快速控制原型仿真實(shí)現(xiàn)了控制算法參數(shù)的在線(xiàn)優(yōu)化配置,利用自動(dòng)代碼生成技術(shù)將控制算法下載至真實(shí)的控制器中;文獻(xiàn)[7]利用基于Matlab的FPGA代碼生成工具SG,搭建了三相電網(wǎng)電壓鎖相環(huán)模型,并在實(shí)驗(yàn)室中對(duì)鎖相的性能做了驗(yàn)證;文獻(xiàn)[8]用Matlab搭建空間矢量脈寬調(diào)制(space vector pulse width modulation,SVPWM)模型,與TI C2000 DSP驅(qū)動(dòng)模塊結(jié)合,一鍵生成軟件工程。以往的文獻(xiàn)一般針對(duì)代碼自動(dòng)生成的單個(gè)細(xì)節(jié)做探討,較少涉及在實(shí)際產(chǎn)品和整體電控軟件中的應(yīng)用流程,本文借助160 km/h標(biāo)準(zhǔn)動(dòng)車(chē)組空調(diào)電源項(xiàng)目的軟件開(kāi)發(fā),對(duì)自動(dòng)代碼生成在電控軟件中的運(yùn)用方法和過(guò)程做詳細(xì)介紹。
本文首先簡(jiǎn)要介紹自動(dòng)代碼生成的原理和工作流程;然后搭建160 km/h標(biāo)準(zhǔn)動(dòng)車(chē)組空調(diào)逆變電源控制軟件的Simulink模型,著重介紹了使用Stateflow工具箱、Simulink工具箱建立啟停工作時(shí)序模型和SVPWM調(diào)制模型;經(jīng)過(guò)軟件在環(huán)仿真驗(yàn)證后,將Simulink模型自動(dòng)生成代碼,與控制器TMS320F28335驅(qū)動(dòng)代碼結(jié)合,并下載至控制器運(yùn)行;通過(guò)上機(jī)試驗(yàn),驗(yàn)證了自動(dòng)代碼生成在該電源產(chǎn)品上的有效性。
Embedded Coder是一款借助Matlab軟件實(shí)現(xiàn)自動(dòng)代碼生成的主流軟件工具,在自動(dòng)代碼生成的過(guò)程中,Embedded Coder首先對(duì)搭建的控制軟件模型進(jìn)行編譯,生成.rtw格式的模型描述文件(model description file),然后目標(biāo)語(yǔ)言編譯器(target language compiler)讀取.rtw文件,并依據(jù)目標(biāo)文件(target files)生成C代碼。其原理如圖1所示。
圖1 自動(dòng)代碼生成原理Fig.1 Principles of automatic code generation
在運(yùn)用自動(dòng)代碼生成時(shí),首先根據(jù)控制軟件設(shè)計(jì)需求,搭建軟件Simulink模型,并將模型自動(dòng)生成代碼。自動(dòng)生成的代碼往往只是軟件的應(yīng)用部分,需要將自動(dòng)生成的代碼與控制器底層驅(qū)動(dòng)程序結(jié)合,才能下載至目標(biāo)控制器使用。如圖2所示,底層驅(qū)動(dòng)程序?qū)ξ⒖刂破鳎╩icro controller unit,MCU)進(jìn)行配置,通過(guò)數(shù)據(jù)接口將控制器采集數(shù)據(jù)傳遞給應(yīng)用程序,并執(zhí)行應(yīng)用程序發(fā)出的指令。底層驅(qū)動(dòng)程序可以在IDE集成開(kāi)發(fā)環(huán)境中手動(dòng)編寫(xiě),也可以通過(guò)搭建Simulink硬件驅(qū)動(dòng)模塊來(lái)實(shí)現(xiàn)。將Simulink硬件驅(qū)動(dòng)模塊添加至Simulink應(yīng)用軟件模型,可以實(shí)現(xiàn)一鍵自動(dòng)生成完整軟件工程。開(kāi)發(fā)一款MCU的硬件驅(qū)動(dòng)模塊既需要熟悉MCU的內(nèi)部架構(gòu),又需要對(duì)TLC和目標(biāo)文件語(yǔ)法有具體研究[10],開(kāi)發(fā)時(shí)間成本高,但使用效果并不明顯高于手寫(xiě)驅(qū)動(dòng),因而本文采用手寫(xiě)驅(qū)動(dòng)的方法。
圖2 軟件工程組成Fig.2 The composition of the software engineering
在電控控制軟件的設(shè)計(jì)中,自動(dòng)代碼生成的高效主要體現(xiàn)在其軟件編寫(xiě)圖形化和軟件可仿真兩方面。軟件編寫(xiě)圖形化使得開(kāi)發(fā)者能夠把控較復(fù)雜的控制邏輯設(shè)計(jì);而通過(guò)仿真,設(shè)計(jì)漏洞在軟件部署前即可被發(fā)現(xiàn)和解決,大幅縮短了后期軟件上機(jī)調(diào)試時(shí)間,也大幅降低了調(diào)試成本。
160 km/h標(biāo)準(zhǔn)動(dòng)車(chē)組空調(diào)逆變電源為該型號(hào)列車(chē)的三相設(shè)備供電,包括空調(diào)、廚房電器等??照{(diào)逆變電源的電氣參數(shù)如下:輸入電壓為DC 500~660 V,輸出電壓為AC 380(1±5%)V,輸出頻率為(50±1)Hz,容量為35 kV·A,THD<10%。其主電路包括三相逆變橋、預(yù)充電電路、中間支撐電路和輸出濾波電路等,如圖3所示。
圖3 空調(diào)逆變電源主電路Fig.3 Main circuit of air conditioning inverter
依據(jù)設(shè)備的控制需求,使用Simulink工具箱和Stateflow工具箱搭建設(shè)備的控制軟件模型,包括工作時(shí)序、故障保護(hù)、故障冗余邏輯和閉環(huán)逆變控制等。
根據(jù)客車(chē)電源技術(shù)條件[11],使用Matlab Stateflow工具箱,搭建了逆變電源啟停時(shí)序的狀態(tài)機(jī)如圖4所示。初始化時(shí),電源進(jìn)入待機(jī)狀態(tài)“wait”,在該狀態(tài)內(nèi)輸入輸出接觸器均斷開(kāi),逆變模塊不工作;當(dāng)檢測(cè)到輸入電壓在正常范圍內(nèi)(Uin_ok==1),系統(tǒng)跳轉(zhuǎn)進(jìn)入預(yù)充電狀態(tài)“precharge”,閉合預(yù)充電接觸器K1(cmd_K1=1),開(kāi)始預(yù)充電;當(dāng)檢測(cè)到中間電壓達(dá)到設(shè)定值后(flag_prechrg==1),進(jìn)入狀態(tài)“prechrg_finish”,閉合主輸入接觸器K2(cmd_K2=1),結(jié)束預(yù)充電;等待0.5 s,進(jìn)入軟啟動(dòng)狀態(tài)“softstart”,開(kāi)始軟啟動(dòng),開(kāi)啟PWM信號(hào)(pwm_en=1),同時(shí)閉合輸出接觸器K3(cmd_K3=1);當(dāng)檢測(cè)到電源發(fā)生故障時(shí),跳轉(zhuǎn)進(jìn)入“Fault”狀態(tài),斷開(kāi)接觸器K1,K2和K3,關(guān)閉PWM信號(hào)。
圖4 工作時(shí)序狀態(tài)機(jī)Fig.4 State machine of working sequence
常見(jiàn)的逆變方法有正弦PWM(SPWM)調(diào)制、SVPWM調(diào)制等,因SVPWM方法具有較高的母線(xiàn)電壓利用率,故采用七段式SVPWM調(diào)制方法。SVPWM原理是利用逆變器各橋臂開(kāi)關(guān)控制信號(hào)的不同組合,使逆變器的輸出電壓空間矢量的運(yùn)行軌跡盡可能接近圓形,如圖5所示。下文使用Simulink工具箱搭建SVPWM軟件模型。
圖5 SVPWM原理示意圖Fig 5 Schematic diagram of SVPWM
SVPWM模型如圖6所示,模型輸入為交流電壓在靜止兩相坐標(biāo)系下的給定值Uα和Uβ,輸出為三相橋臂的PWM占空比,模型分3個(gè)子模塊。
圖6 SVPWM模型Fig.6 Model of SVPWM
1)扇區(qū)判斷(Sector_judge)。該模塊由Uα和Uβ計(jì)算空間矢量所在的扇區(qū),參見(jiàn)圖7。
圖7 扇區(qū)判斷Fig.7 Sector judgment
2)相鄰矢量作用時(shí)間(Vector_time)。該模塊根據(jù)交流電壓給定值Uα,Uβ和扇區(qū)編號(hào),計(jì)算相鄰矢量的作用時(shí)間,如圖8所示。
圖8 相鄰矢量作用時(shí)間Fig 8 Action time of adjacent vectors
3)三相橋臂占空比計(jì)算(UVW_Time)。該模塊根據(jù)扇區(qū)編號(hào)和相鄰矢量作用時(shí)間,進(jìn)一步計(jì)算三相橋臂的調(diào)制波,如圖9所示。
圖9 占空比計(jì)算Fig.9 Duty cycle calculation
160 km/h標(biāo)準(zhǔn)動(dòng)車(chē)組每個(gè)車(chē)廂內(nèi)安裝2臺(tái)空調(diào)逆變電源(逆變電源A,B),冗余電路如圖10所示,每臺(tái)逆變電源為各自負(fù)載供電。在輸出端通過(guò)冗余接觸器相連,當(dāng)其中1臺(tái)電源故障停機(jī)時(shí),閉合冗余接觸器K4,實(shí)現(xiàn)冗余供電。
圖10 冗余電路Fig.10 Redundant circuit
利用Stateflow工具箱,搭建互備邏輯狀態(tài)機(jī)。冗余邏輯如圖11所示。逆變電源在故障停機(jī)后,發(fā)出供電請(qǐng)求信號(hào)(cmd_request=1),另一臺(tái)電源接收到該請(qǐng)求信號(hào)(flag_supply_request==1)后,狀態(tài)機(jī)通過(guò)觸發(fā)事件“restart”觸發(fā)系統(tǒng)重新啟動(dòng),并閉合冗余接觸器K4(cmd_K4=1)。
圖11 冗余邏輯Fig.11 Redundant logic
將以上搭建的控制軟件模型與主電路模型結(jié)合,對(duì)軟件功能進(jìn)行仿真,以驗(yàn)證工作時(shí)序、閉環(huán)控制、冗余等邏輯是否與設(shè)計(jì)需求一致。仿真模型如圖12所示,仿真模型為了確保由模型自動(dòng)生成代碼時(shí)不出現(xiàn)錯(cuò)誤,依照Embedded Coder工具箱提供的軟件在環(huán)(SIL)仿真流程,將軟件Simulink模型自動(dòng)生成代碼,對(duì)代碼反向編譯,重新得到Simulink模型,進(jìn)行仿真,即SIL仿真。
圖12 整體仿真模型Fig.12 Overall simulation model
仿真逆變電源啟停時(shí)序波形如圖13所示,Uuv為故障模塊輸出U,V兩相的線(xiàn)電壓。在施加輸入電壓后,逆變電源經(jīng)過(guò)預(yù)充電和軟啟動(dòng)過(guò)程,輸出電壓波形達(dá)到穩(wěn)定;在輸入電壓降為0時(shí),逆變電源封鎖;輸入電壓恢復(fù)后,逆變電源可正常重啟。該仿真驗(yàn)證了軟件中啟停相關(guān)邏輯與設(shè)計(jì)預(yù)期一致。
圖13 工作時(shí)序仿真波形Fig.13 Simulation waveforms of working sequence
仿真逆變電源冗余供電邏輯如圖14所示,當(dāng)一臺(tái)逆變電源故障停機(jī)后,發(fā)出供電請(qǐng)求指令,冗余接觸器閉合,另一臺(tái)逆變電源重新啟動(dòng),為故障電源對(duì)應(yīng)的負(fù)載供電。
圖14 冗余邏輯仿真波形Fig.14 Simulation waveforms of redundant logic
經(jīng)仿真驗(yàn)證后,將自動(dòng)生成的代碼與手動(dòng)編寫(xiě)的TMS320F28335驅(qū)動(dòng)代碼集成,得到完整的CCS軟件工程,軟件編譯下載至控制器。工作流程如圖15所示。
圖15 軟件部署流程Fig.15 Software deployment process
軟件工程中,包括自動(dòng)生成的應(yīng)用代碼和驅(qū)動(dòng)代碼兩部分。驅(qū)動(dòng)代碼實(shí)現(xiàn)與控制器硬件的交互,包括配置CPU時(shí)鐘、配置各外設(shè)參數(shù)等,將外設(shè)模塊(AD,GPIO等)采集的數(shù)據(jù)傳遞給應(yīng)用代碼,同時(shí)執(zhí)行應(yīng)用代碼產(chǎn)生的指令(數(shù)字量輸出、PWM占空比等)。
為驗(yàn)證軟件的功能,在空調(diào)逆變電源樣機(jī)上進(jìn)行測(cè)試。試驗(yàn)工裝如圖16所示。
圖16 樣機(jī)試驗(yàn)工裝Fig.16 Test prototype
與第3節(jié)仿真驗(yàn)證相對(duì)應(yīng),圖17、圖18分別為逆變電源輸入斷電重新啟動(dòng)和冗余供電邏輯的測(cè)試結(jié)果,可以看出實(shí)際工作的時(shí)序與仿真一致。
圖17 啟停時(shí)序Fig 17 Start stop sequence
圖18 冗余邏輯Fig.18 Redundant logic
運(yùn)用自動(dòng)代碼生成方法,可以在軟件仿真環(huán)節(jié)對(duì)軟件功能進(jìn)行調(diào)試,修正大多數(shù)軟件問(wèn)題,大大縮短樣機(jī)調(diào)試的時(shí)間。另外,圖形化編程提高了軟件功能實(shí)現(xiàn)的操作性和可控性,在更好地減少功能設(shè)計(jì)漏洞的同時(shí),大幅度縮減了軟件編寫(xiě)時(shí)間。對(duì)一般的含工作時(shí)序、故障診斷、閉環(huán)調(diào)制、通信、數(shù)據(jù)存儲(chǔ)等功能的電控軟件,從依據(jù)設(shè)計(jì)需求搭建軟件至軟件部署后開(kāi)始樣機(jī)測(cè)試,一般需要1~2周的時(shí)間,較手寫(xiě)軟件效率明顯提高。
本文闡述了使用Matlab實(shí)現(xiàn)自動(dòng)代碼生成的基本原理,以160 km/h標(biāo)準(zhǔn)動(dòng)車(chē)組空調(diào)電源產(chǎn)品為例,介紹了電源控制軟件模型的搭建、模型的仿真和軟件的部署,展示了自動(dòng)代碼生成在電源控制軟件開(kāi)發(fā)中的運(yùn)用過(guò)程。經(jīng)過(guò)樣機(jī)測(cè)試,運(yùn)用自動(dòng)代碼生成實(shí)現(xiàn)的控制軟件功能與仿真結(jié)果相同,可以大大縮短軟件開(kāi)發(fā)的時(shí)間,提高開(kāi)發(fā)質(zhì)量。使用Matlab實(shí)現(xiàn)自動(dòng)代碼生成在電源控制軟件和其他電控系統(tǒng)開(kāi)發(fā)中有很大的應(yīng)用價(jià)值。