李哲帥,周文華,聶 飛
(浙江大學(xué) 能源工程學(xué)院,浙江 杭州 310027)
目前,世界上主流柴油機(jī)電控噴油系統(tǒng)就是高壓共軌系統(tǒng),而控制軟件的開發(fā)成為至關(guān)重要的環(huán)節(jié)[1]。隨著控制功能越來(lái)越多,基于扭矩的控制算法越來(lái)越復(fù)雜化[2],傳統(tǒng)手寫代碼的開發(fā)模式已難以勝任,采用基于模型的開發(fā)模式[3-5],便于控制策略后續(xù)修改完善。共軌壓力控制是一個(gè)實(shí)時(shí)控制系統(tǒng)[6],為追求良好的響應(yīng)和控制精度,需要不斷摸索最優(yōu)控制算法,采用模型設(shè)計(jì)方法將會(huì)極大減輕設(shè)計(jì)工作量,縮短開發(fā)周期。
通過(guò)Embedded Coder可將Simulink控制模型轉(zhuǎn)換為C代碼,但從C代碼到可下載至單片機(jī)運(yùn)行的包含程序和數(shù)據(jù)的十六進(jìn)制文件(HEX文件),仍有許多工作要做,如C代碼編譯鏈接、數(shù)據(jù)單元描述文件(ASAM MCD-2MC language, A2L)地址更新等,若人工執(zhí)行,耗時(shí)耗力且容易出錯(cuò)。此外,模型數(shù)據(jù)管理也是個(gè)問(wèn)題。
針對(duì)基于模型開發(fā)中這兩個(gè)無(wú)法回避的問(wèn)題,本文將利用腳本開發(fā)模型一鍵生成HEX工具,將Simulink模型直接轉(zhuǎn)換為HEX文件。
模型自動(dòng)生成HEX工具autorun.m主要包含兩部分:數(shù)據(jù)管理和HEX文件生成。具體實(shí)現(xiàn)流程如圖1所示。
數(shù)據(jù)管理主要實(shí)現(xiàn)用Excel管理轉(zhuǎn)換公式和模型數(shù)據(jù)。HEX文件生成包含模型編譯、任務(wù)調(diào)度、代碼后處理、編譯鏈接和A2L文件更新。autorun.m腳本編寫是建立在通用文件夾基礎(chǔ)架構(gòu)上的,通用文件夾基礎(chǔ)架構(gòu)如圖2所示。
圖2 通用文件夾基礎(chǔ)架構(gòu)
本研究采用常用的Excel實(shí)現(xiàn)數(shù)據(jù)統(tǒng)一管理,用于模型仿真測(cè)試、代碼生成及A2L自動(dòng)生成,其相較于m文件、mat文件、sldd格式的數(shù)據(jù)字典等[7],更加清晰直觀,并可利用Excel諸多便捷功能。
轉(zhuǎn)換公式包含枚舉型enumeration和數(shù)值型numeric兩類,用于物理值和十六進(jìn)制數(shù)之間的轉(zhuǎn)換,合理的轉(zhuǎn)換公式有助于提升運(yùn)算速度和精度。調(diào)用自定義函數(shù)Import_ComputeMethod.m讀取Excel轉(zhuǎn)換信息,分別創(chuàng)建enumeration.m文件至Matlab搜索路徑,導(dǎo)入numeric至Matlab工作空間,實(shí)現(xiàn)流程如圖3所示。
模型數(shù)據(jù)包含Simulink控制模型中的測(cè)量量和標(biāo)定量。調(diào)用自定義Import_Data_Object.m函數(shù),通過(guò)xlsfinfo.m和xlsread.m函數(shù)讀取Excel數(shù)據(jù),寫入modeldata.m文件后運(yùn)行,則把數(shù)據(jù)導(dǎo)入到Matlab工作空間,實(shí)現(xiàn)流程如圖4所示。
目標(biāo)是自動(dòng)生成可直接下載至ECU中使用的HEX文件,以及包含正確ECU描述信息的A2L文件。代碼的編譯鏈接、A2L文件的地址更新等所有過(guò)程都是在后臺(tái)完成,最終在Matlab命令窗口顯示工作完成。HEX文件自動(dòng)生成流程如圖5所示。
圖3 轉(zhuǎn)換公式流程圖
圖4 模型數(shù)據(jù)流程圖
圖5 HEX文件自動(dòng)生成流程圖
本研究在編譯前完成如下配置:主模型選擇定步長(zhǎng)離散求解器,硬件選擇Infineon-TriCore,系統(tǒng)目標(biāo)文件選擇ert.tlc;單個(gè)功能模塊設(shè)置為原子單元,以便自定義其生成代碼的文件名及函數(shù)名;設(shè)置標(biāo)定量輸出類型為從常數(shù)繼承,測(cè)量量輸出resolve,保證模型編譯成功;最后通過(guò)rtwbuild.m函數(shù)編譯模型為C代碼。
項(xiàng)目采用RTA-OSEK操作系統(tǒng)[8],可實(shí)現(xiàn)噴油量、噴油正時(shí)、軌壓精確控制。為避免直接面對(duì)C代碼進(jìn)行操作,本研究采用Excel管理任務(wù)調(diào)度信息[9],主要配置2個(gè)初始化任務(wù),9個(gè)時(shí)間任務(wù),3個(gè)事件任務(wù),任務(wù)調(diào)度函數(shù)信息表如圖6所示(以10 ms任務(wù)為例)。
筆者將各功能模塊函數(shù)名分別列入相應(yīng)Sheet,調(diào)用自定義OSTaskFilesRewrite.m函數(shù),通過(guò)xlsfinfo.m和xlsread.m函數(shù)讀取不同Sheet中的任務(wù)函數(shù)名,并利用fopen.m和fprintf.m函數(shù)寫入任務(wù)調(diào)度C文件如圖7所示。
圖6 10 ms任務(wù)調(diào)度信息表
本研究通過(guò)copyfile.m函數(shù)將Matlab自動(dòng)生成C代碼和腳本控制生成C代碼統(tǒng)一拷貝至包含底層驅(qū)動(dòng)和基礎(chǔ)軟件的工程路徑下。
本研究將工程路徑下所有應(yīng)用層及底層源代碼,通過(guò)后臺(tái)調(diào)用編譯器方式轉(zhuǎn)換為機(jī)器碼。調(diào)用bat批處理文件,設(shè)定后臺(tái)編譯軟件為cctc.exe,初始化工作空間和路徑,定義CPU類型為TC 1782,參照TASKING編譯器Compiler和Linker中配置生成的All options執(zhí)行語(yǔ)句,把源代碼編譯成目標(biāo)文件,再把目標(biāo)文件和庫(kù)文件鏈接成可執(zhí)行文件,完成地址和空間分配,后臺(tái)實(shí)現(xiàn)C代碼編譯鏈接等工作。
直接由Maltab自動(dòng)生成的A2L并不完整,可通過(guò)修改相關(guān)tlc信息來(lái)自定義生成理想A2L文件。標(biāo)定量定義成Parameter,測(cè)量量定義成Signal,設(shè)置Interface為ASAP2。在asap2setup.tlc中自定義靜態(tài)配置,包括文件名、工程名、注釋、模塊名等。在asap2userlib.tlc中自定義HEADER項(xiàng)目信息,包括項(xiàng)目編號(hào)、項(xiàng)目版本等,設(shè)置硬件交互部分內(nèi)容,如添加A2ML和IF_DATA、在MOD_PAR中設(shè)置內(nèi)存范圍等。將自定義設(shè)置好的tlc文件添加到Matlab搜索路徑,生成自定義A2L文件。
Matlab自動(dòng)生成的A2L文件不包含實(shí)際地址,需用編譯器分配物理地址進(jìn)行更新。添加手寫代碼中測(cè)量量和標(biāo)定量至自動(dòng)生成的A2L文件后,利用bat腳本后臺(tái)調(diào)用asap2editor,結(jié)合包含編譯器分配地址信息的ELF文件,生成中間地址文件MAPCONV.TMP。用TMP中真實(shí)地址替換自動(dòng)生成A2L中的假地址,完成變量地址更新。
該試驗(yàn)用高壓共軌控制模型如圖8所示。
試驗(yàn)用發(fā)動(dòng)機(jī)是直列、廢氣渦輪增壓中冷、水冷、四沖程柴油機(jī),四缸,排量1.995 L,額定功率75 kW,額定轉(zhuǎn)速3 600 r/min,最大扭矩223 Nm,怠速轉(zhuǎn)速800 r/min,型號(hào)為常柴4F20TCI。在發(fā)動(dòng)機(jī)試驗(yàn)臺(tái)架上,主要通過(guò)測(cè)試啟動(dòng)工況、軌壓控制、怠速工況及部分負(fù)荷工況等4大核心功能,實(shí)現(xiàn)對(duì)高壓共軌控制程序的充分驗(yàn)證,整個(gè)試驗(yàn)過(guò)程中發(fā)動(dòng)機(jī)均能正常運(yùn)行,驗(yàn)證了工具自動(dòng)生成HEX文件的可靠性。
實(shí)測(cè)發(fā)動(dòng)機(jī)啟動(dòng)過(guò)程如圖9所示。
圖9 啟動(dòng)控制過(guò)程圖
啟動(dòng)過(guò)程十分平順,用時(shí)2 s左右,啟動(dòng)成功后轉(zhuǎn)速超調(diào)80 r/min左右,并快速穩(wěn)定至目標(biāo)怠速800 r/min,未出現(xiàn)“跌坑”,啟動(dòng)過(guò)程軌壓超調(diào)量不超過(guò)80 bar,并平穩(wěn)過(guò)渡至目標(biāo)軌壓,整個(gè)啟動(dòng)過(guò)程正常,滿足高壓共軌柴油機(jī)啟動(dòng)要求。
實(shí)測(cè)發(fā)動(dòng)機(jī)軌壓控制效果如圖10所示。
圖10 軌壓控制效果圖
本研究手動(dòng)設(shè)定目標(biāo)軌壓,通過(guò)調(diào)節(jié)PID控制參數(shù),將軌壓穩(wěn)態(tài)偏差限制在±5 bar內(nèi)。保持轉(zhuǎn)速為1 400 r/min,當(dāng)目標(biāo)軌壓階躍50 bar時(shí),軌壓超調(diào)20 bar左右;當(dāng)目標(biāo)軌壓階躍100 bar時(shí),軌壓超調(diào)30 bar左右;當(dāng)目標(biāo)軌壓階躍200 bar時(shí),軌壓超調(diào)60 bar左右。軌壓控制采用軌壓-燃油計(jì)量閥驅(qū)動(dòng)電流雙閉環(huán)控制策略,調(diào)節(jié)響應(yīng)迅速,基本沒(méi)有振蕩,直接平穩(wěn)過(guò)渡至目標(biāo)軌壓,軌壓穩(wěn)態(tài)偏差控制和動(dòng)態(tài)響應(yīng)控制效果滿足要求。
實(shí)測(cè)發(fā)動(dòng)機(jī)怠速控制過(guò)程如圖11所示。
圖11 怠速控制過(guò)程圖
穩(wěn)態(tài)空載怠速波動(dòng)在±5 r/min范圍內(nèi),手動(dòng)設(shè)定目標(biāo)怠速階躍50 r/min,怠速超調(diào)量小于10 r/min,并迅速穩(wěn)定至目標(biāo)怠速,響應(yīng)時(shí)間不超過(guò)1 s,滿足怠速穩(wěn)態(tài)和動(dòng)態(tài)控制要求。
發(fā)動(dòng)機(jī)部分負(fù)荷工況如圖12所示。
圖12 部分負(fù)荷工況控制效果圖
試驗(yàn)分別選取10個(gè)工況點(diǎn)進(jìn)行驗(yàn)證:(1)1 000 r/min下測(cè)功機(jī)設(shè)定扭矩分別為0 Nm、10 Nm、20 Nm、30 Nm;(2)1 500 r/min下測(cè)功機(jī)設(shè)定扭矩分別為0 Nm、30 Nm、50 Nm;(3)1 800 r/min下測(cè)功機(jī)設(shè)定扭矩分別為0 Nm、30 Nm、50 Nm。實(shí)測(cè)各工況下轉(zhuǎn)速波動(dòng)在±5 r/min范圍內(nèi),軌壓波動(dòng)在±5 bar范圍內(nèi),發(fā)動(dòng)機(jī)運(yùn)行穩(wěn)定,滿足試驗(yàn)要求。
(1)本研究利用m語(yǔ)言、tlc語(yǔ)言和bat腳本,完成了Simulink控制模型到單片機(jī)HEX文件一鍵式實(shí)現(xiàn),成功應(yīng)用于高壓共軌ECU開發(fā)項(xiàng)目,實(shí)踐證明:HEX自動(dòng)生成工具開發(fā)的高壓共軌ECU滿足柴油機(jī)控制要求,并提升了整個(gè)開發(fā)過(guò)程自動(dòng)化程度,提高了基于模型開發(fā)效率;
(2)HEX自動(dòng)生成工具采用調(diào)用函數(shù)方式實(shí)現(xiàn)了各功能,便于后續(xù)完善,比如可通過(guò)Excel管理層次化模型信息,實(shí)現(xiàn)自動(dòng)集成,進(jìn)一步提升自動(dòng)化程度,減輕了工作量,縮短了開發(fā)周期;
(3)HEX自動(dòng)生成工具具有較強(qiáng)通用性,雖然是基于高壓共軌ECU開發(fā)項(xiàng)目,完成工具開發(fā)與發(fā)動(dòng)機(jī)臺(tái)架試驗(yàn)驗(yàn)證,但也適用于其他任何ECU開發(fā)項(xiàng)目。