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