馬天才 楊柳明 葉川 楊月華
(1.同濟(jì)大學(xué),汽車學(xué)院,上海 201804;2.同濟(jì)大學(xué),新能源汽車工程中心,上海 201804)
主題詞:燃料電池 控制器 標(biāo)定
燃料電池汽車擁有續(xù)航里程長(zhǎng)、加氫速度快等獨(dú)特優(yōu)勢(shì),與純電動(dòng)汽車相比,其在性能上更接近傳統(tǒng)的內(nèi)燃機(jī)汽車[1-2]。燃料電池發(fā)動(dòng)機(jī)控制器(Fuelcell Control Unit,F(xiàn)CU)作為各輔助系統(tǒng)的控制中樞,需要對(duì)散熱風(fēng)扇、水泵、氫氣減壓閥、排水電磁閥、空壓機(jī)等各執(zhí)行器進(jìn)行控制,其標(biāo)定結(jié)果直接影響電堆的工作條件。通過使用標(biāo)定系統(tǒng),不僅能實(shí)時(shí)觀察各控制參數(shù)對(duì)控制效果的影響,也能隨時(shí)修改標(biāo)定參數(shù),從而提高標(biāo)定效率。因而,對(duì)FCU標(biāo)定系統(tǒng)的研究與設(shè)計(jì)十分必要。
近年來(lái),國(guó)內(nèi)很多高?;贑AN標(biāo)定協(xié)議(CAN Calibration Protocol,CCP)和通用的測(cè)量與標(biāo)定協(xié)議(Universal Measurement and Calibration Protocol,XCP)進(jìn)行了相關(guān)標(biāo)定系統(tǒng)的開發(fā)設(shè)計(jì):劉運(yùn)瀟[3]選取飛思卡爾MC9S12XEQ512作為主芯片,基于CCP手工開發(fā)了下位機(jī)CCP驅(qū)動(dòng)和CAN驅(qū)動(dòng),使用LabVIEW設(shè)計(jì)了上位機(jī)標(biāo)定界面;楊攀[4]選用英飛凌XC2365A作為主芯片,基于CCP,使用CANape作為上位機(jī),并使用Simulink完成了CCP底層驅(qū)動(dòng)的編寫;梁恒[5]采用英飛凌XC2785芯片,基于XCP在Visual Studio平臺(tái)上使用C#語(yǔ)言開發(fā)了上位機(jī)標(biāo)定程序,完成了標(biāo)定系統(tǒng)的設(shè)計(jì)。
本文針對(duì)燃料電池發(fā)動(dòng)機(jī)高安全性與高實(shí)時(shí)性的要求,選用32位汽車級(jí)芯片——恩智浦MPC5746R,通過MCAL配置生成符合汽車開放系統(tǒng)架構(gòu)(AUTomotive Open System ARchitecture,AUTOSAR)的底層驅(qū)動(dòng),結(jié)合XCP協(xié)議包與CANape上位機(jī),完成標(biāo)定系統(tǒng)開發(fā),實(shí)現(xiàn)了數(shù)據(jù)實(shí)時(shí)顯示與在線標(biāo)定的功能。
AUTOSAR的核心思想可概括為“統(tǒng)一標(biāo)準(zhǔn)、分散實(shí)現(xiàn)、集中配置[6]”,通過建立統(tǒng)一標(biāo)準(zhǔn)使各廠商在一個(gè)開放的平臺(tái)下工作。不同廠商可采用滿足標(biāo)準(zhǔn)的不同實(shí)現(xiàn)方式制作模塊化的軟件,由整車廠將這些模塊整合起來(lái),加入應(yīng)用層軟件,進(jìn)行相應(yīng)配置后,完成軟件開發(fā)。如圖1所示,AUTOSAR架構(gòu)可具體分為3個(gè)部分:
圖1 AUTOSAR架構(gòu)框架
a.應(yīng)用層。應(yīng)用層算法以軟件組件的形式進(jìn)行設(shè)計(jì),每個(gè)軟件組件都具有標(biāo)準(zhǔn)化的應(yīng)用程序接口并通過運(yùn)行時(shí)環(huán)境層進(jìn)行通信。
b.運(yùn)行時(shí)環(huán)境層(RTE)。RTE提供基礎(chǔ)的通信服務(wù),支持軟件組件間以及其與基礎(chǔ)軟件層間的通信。
c.基礎(chǔ)軟件層(BSW)。BSW被劃分為4個(gè)部分:服務(wù)層、ECU抽象層、微控制器抽象層(MCAL)和復(fù)雜驅(qū)動(dòng)層。服務(wù)層將各種基礎(chǔ)軟件功能模塊以服務(wù)的形式封裝起來(lái),供應(yīng)用層調(diào)用。ECU抽象層封裝了MCAL和MCU外圍設(shè)備的驅(qū)動(dòng),并將對(duì)MCU外圍設(shè)備的訪問進(jìn)行了統(tǒng)一,使上層應(yīng)用與ECU硬件布局無(wú)關(guān)。MCAL包含了訪問MCU和內(nèi)部外設(shè)的驅(qū)動(dòng),使上層軟件獨(dú)立于使用的微控制器,以便應(yīng)用程序的移植。該部分軟件由相應(yīng)芯片制造商提供。復(fù)雜驅(qū)動(dòng)層可以直接訪問MCU,從而實(shí)現(xiàn)一些復(fù)雜的傳感器和執(zhí)行器操作。
XCP在2003年被提出,它建立在CCP的研究基礎(chǔ)上,其中“X”指的是傳輸層可使用多種通訊方式,如CAN、FlexRay、Ethernet(UDP/IP和TCP/IP)、USB和串口(SPI和SCI)等[7]。XCP消息幀由3個(gè)部分組成:XCP幀頭、XCP報(bào)文包和XCP幀尾,如圖2所示。
圖2 XCP消息幀結(jié)構(gòu)
其中,XCP幀頭和幀尾根據(jù)XCP傳輸層協(xié)議不同發(fā)生變化,而XCP報(bào)文包的格式和內(nèi)容由XCP協(xié)議層定義,固定不變,故XCP協(xié)議支持多種傳輸方式。
為實(shí)現(xiàn)在線標(biāo)定功能,下位機(jī)需使用軟件地址重定位的方法:標(biāo)定開始前,將存儲(chǔ)在FLASH中的待標(biāo)定參數(shù)拷貝至RAM中;標(biāo)定過程中,直接在RAM中進(jìn)行讀寫;標(biāo)定結(jié)束后,將RAM中的參數(shù)寫入FLASH中保存[8-9]。在具體實(shí)現(xiàn)方式上,為保證下位機(jī)軟件的可移植性、可重用性和功能安全性,本文使用MCAL配置工具,生成符合AUTOSAR架構(gòu)要求的CAN驅(qū)動(dòng)和FLASH驅(qū)動(dòng)。以FLASH模塊配置為例,其驅(qū)動(dòng)開發(fā)過程如下。
3.1.1 FLASH模塊MCAL配置
FLASH模塊的配置內(nèi)容主要包括FLASH通用設(shè)置、FLASH具體配置、FLASH版本信息設(shè)置,如圖3所示。
圖3 FLASH模塊配置框架
FLASH的讀、寫函數(shù)均通過異步方式實(shí)現(xiàn),即調(diào)用讀或?qū)懞瘮?shù)后只是將需要讀寫的FLASH地址、數(shù)據(jù)緩存區(qū)地址、讀寫長(zhǎng)度等信息傳遞給底層的FLASH驅(qū)動(dòng),而并未立即執(zhí)行相應(yīng)的讀寫操作。因而需要在MCAL配置時(shí)啟用FLASH工作結(jié)束的通知函數(shù)(Fls_JobEnd-Notif函數(shù)),使FLASH在完成相應(yīng)工作后調(diào)用該函數(shù)。這是設(shè)計(jì)FLASH讀、寫任務(wù)函數(shù)以及狀態(tài)轉(zhuǎn)移的基礎(chǔ)。
本文結(jié)合實(shí)際的標(biāo)定需求,考慮到FLASH的大小對(duì)刷寫速度的影響,配置了大小為16 KB的FLS_DATA_ARRAY_0_PART_2_M00數(shù)據(jù)FLASH[10]。
3.1.2 FLASH模塊讀、寫任務(wù)函數(shù)
前文FLASH模塊MCAL配置過程中,設(shè)置了FLASH工作結(jié)束通知函數(shù)。在該函數(shù)中根據(jù)當(dāng)前FLASH的狀態(tài),進(jìn)行相應(yīng)的狀態(tài)轉(zhuǎn)移以完成FLASH模塊的讀取任務(wù)。在FLASH進(jìn)行讀任務(wù)時(shí),F(xiàn)LASH狀態(tài)機(jī)被設(shè)置為FLASH讀狀態(tài),根據(jù)當(dāng)前的狀態(tài)依次執(zhí)行讀任務(wù)函數(shù)和驗(yàn)證函數(shù),在工作結(jié)束后完成各狀態(tài)的切換,最后到達(dá)FLASH最終狀態(tài)。狀態(tài)設(shè)置如圖4所示。寫任務(wù)與讀任務(wù)類似,不再贅述。
圖4 FLASH讀任務(wù)狀態(tài)機(jī)
XCP驅(qū)動(dòng)需要完成對(duì)XCP模塊的初始化、協(xié)議的解析、XCP報(bào)文的打包與解包、DAQ的分配、DAQ的發(fā)送、標(biāo)定數(shù)據(jù)的下載等功能。
3.2.1 XCP命令處理機(jī)
命令處理機(jī)的工作流程如圖5所示。XCP命令處理機(jī)的主要任務(wù)是根據(jù)上位機(jī)發(fā)送CAN幀數(shù)據(jù)場(chǎng)的第1個(gè)字節(jié)判斷當(dāng)前上位機(jī)發(fā)送的命令類型,并按照協(xié)議的要求,解析數(shù)據(jù)場(chǎng)中其他的命令參數(shù),并作出相應(yīng)的回復(fù)。接收到連接命令時(shí),下位機(jī)將如下信息填入數(shù)據(jù)緩沖區(qū)中:當(dāng)前可用的功能、使用的通信模式、上位機(jī)XCP命令的最大字節(jié)數(shù)、上位機(jī)DAQ的最大字節(jié)數(shù)及當(dāng)前下位機(jī)使用的XCP協(xié)議版本和傳輸層版本。
圖5 命令處理機(jī)流程
如接收到標(biāo)定命令,若修改的數(shù)據(jù)地址屬于FLASH,則使用軟件地址映射的方法,修改其在RAM中存放的值,與上位機(jī)斷開連接后再進(jìn)行FLASH相應(yīng)扇區(qū)的擦寫。
3.2.2 DAQ處理機(jī)
DAQ處理機(jī)的工作流程如圖6所示。下位機(jī)根據(jù)上位機(jī)的命令先將所有DAQ分配到不同的事件中。根據(jù)不同事件的發(fā)送周期將滿足要求的DAQ打包發(fā)送。該過程中,如遇地址在FLASH區(qū)域的情況,則進(jìn)行軟件地址映射,通過增加偏移量讀取其在RAM中存放的值,避免對(duì)FLASH扇區(qū)進(jìn)行讀取操作。在同一事件中所有記錄發(fā)送完畢后,DAQ處理機(jī)狀態(tài)切換為發(fā)送成功。
圖6 DAQ處理機(jī)流程
對(duì)標(biāo)定系統(tǒng)而言,安全性是首先需要保證的。下位機(jī)需要識(shí)別正在總線上發(fā)送消息的上位機(jī)是否有權(quán)限對(duì)本機(jī)進(jìn)行標(biāo)定,是否有必要向上位機(jī)發(fā)送DAQ。具體實(shí)現(xiàn)過程為:上位機(jī)確定需要下位機(jī)解鎖的資源后,按XCP的要求發(fā)送GET_SEED命令,請(qǐng)求下位機(jī)給出所請(qǐng)求資源的SEED值,并通過一定的密鑰算法求出對(duì)應(yīng)的密鑰;上位機(jī)使用UNLOCK命令,將密鑰發(fā)送給下位機(jī);下位機(jī)將密鑰與自身計(jì)算出的密鑰進(jìn)行比較,決定解鎖需要使用的資源或斷開與上位機(jī)的連接。CANape中密鑰算法以dll文件的形式導(dǎo)入。下位機(jī)通過使用相同的密鑰算法,可以保證上位機(jī)正常解鎖標(biāo)定資源。
在進(jìn)行數(shù)據(jù)采集前,可通過使用Vector ASAP2 Editor工具提取下位機(jī)編譯生成的map文件中的變量名和地址信息,生成CANape能讀取的A2L文件。
數(shù)據(jù)采集測(cè)試的結(jié)果如圖7所示。被采集的變量滿足如下關(guān)系:test7在0~0.7間波動(dòng),test8=0.7,test7與test8相加得到test9。在DAQ模式下,這3個(gè)變量都分配在同一個(gè)事件通道,被同時(shí)采集,因而可以保證其對(duì)應(yīng)關(guān)系,即test9=test7+test8。在Polling模式下,3個(gè)變量數(shù)據(jù)的上傳周期雖然也被設(shè)置為相同的值,但變量并不是同時(shí)集中采集的,而是在接收到UPLOAD或SHORT_UPLOAD命令后依次發(fā)送給上位機(jī)。由于上傳存在先后順序,因而3個(gè)變量間的對(duì)應(yīng)關(guān)系無(wú)法滿足。
圖7 DAQ和Polling測(cè)試結(jié)果
為驗(yàn)證系統(tǒng)的標(biāo)定功能,設(shè)計(jì)了應(yīng)用層算法y=ax+b,其中a、x和b分別與存儲(chǔ)在FLASH中的3個(gè)標(biāo)定量cal3、cal2、cal1的RAM備份相對(duì)應(yīng)。在標(biāo)定窗口中修改標(biāo)定量的值,觀察相應(yīng)的a、x、b、y是否發(fā)生變化。測(cè)試結(jié)果如圖8所示,各變量隨著標(biāo)定量的變化而變化,說明軟件地址映射功能正常,上位機(jī)能通過FLASH地址訪問存儲(chǔ)在下位機(jī)RAM中的變量,應(yīng)用層算法也能通過軟件映射使用存放在RAM中的參數(shù),在線標(biāo)定功能基本實(shí)現(xiàn)。
圖8 在線標(biāo)定測(cè)試結(jié)果
本文基于MCAL配置了符合AUTOSAR架構(gòu)的CAN驅(qū)動(dòng)模塊與FLASH驅(qū)動(dòng)模塊,設(shè)計(jì)了相關(guān)狀態(tài)機(jī)與接口函數(shù),并開發(fā)了XCP驅(qū)動(dòng)的命令處理機(jī)和DAQ處理機(jī),完成了MPC5746R芯片的標(biāo)定系統(tǒng)設(shè)計(jì),實(shí)現(xiàn)了通信安全訪問、數(shù)據(jù)在線標(biāo)定和DAQ上傳數(shù)據(jù)的功能。