李高堅(jiān),袁觀(guān)練,周 洋,侯獻(xiàn)軍,鄒 斌
(1.上汽通用五菱汽車(chē)股份有限公司技術(shù)中心,廣西 柳州 545000;2.武漢理工大學(xué)汽車(chē)工程學(xué)院,湖北 武漢 430070;3.現(xiàn)代汽車(chē)零部件技術(shù)湖北省重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430070)
隨著汽車(chē)電子系統(tǒng)網(wǎng)絡(luò)化的發(fā)展,標(biāo)定系統(tǒng)與電控單元之間存在著越來(lái)越頻繁、越來(lái)越復(fù)雜的數(shù)據(jù)通信,因此,通信模塊在標(biāo)定系統(tǒng)中逐漸成為系統(tǒng)的關(guān)鍵部分。為此,歐洲標(biāo)定系統(tǒng)標(biāo)準(zhǔn)化組織(arbeitskreis zur standardisierung von applikationssystemen,ASAP)推出了基于 CAN總線(xiàn)的ECU標(biāo)定協(xié)議規(guī)范(CAN calibration protocol,CCP協(xié)議)。CCP協(xié)議用于電控系統(tǒng)參數(shù)標(biāo)定、數(shù)據(jù)采集及實(shí)時(shí)監(jiān)測(cè),具有較好的穩(wěn)定性和通用性,為控制器標(biāo)定系統(tǒng)的開(kāi)發(fā)提供了一個(gè)標(biāo)準(zhǔn)平臺(tái)[1]。
目前,國(guó)外的很多公司都以CCP協(xié)議為標(biāo)準(zhǔn)開(kāi)發(fā)了專(zhuān)門(mén)用于電控發(fā)動(dòng)機(jī)標(biāo)定的優(yōu)化系統(tǒng)。如ETAS公司研制的INCA軟件,基本已成為國(guó)際上的通用標(biāo)定軟件。而國(guó)內(nèi)還沒(méi)有研發(fā)出比較成熟的發(fā)動(dòng)機(jī)ECU標(biāo)定系統(tǒng)。因此,筆者設(shè)計(jì)并開(kāi)發(fā)了一種基于CCP電控單元標(biāo)定系統(tǒng)的通信軟件,實(shí)現(xiàn)了ECU與標(biāo)定工具之間快速的數(shù)據(jù)通信。
CCP協(xié)議采用主從通信的方式,即一個(gè)主設(shè)備可通過(guò)CAN總線(xiàn)與多個(gè)從設(shè)備相連,但在某一時(shí)刻只能有一個(gè)從設(shè)備能與主設(shè)備連接展開(kāi)通信[2]。每個(gè)從設(shè)備都有一個(gè)特定的地址,主設(shè)備通過(guò)每個(gè)從設(shè)備的地址,建立一對(duì)一的對(duì)應(yīng)關(guān)系。建立連接后,主從設(shè)備之間所有命令均由主設(shè)備控制,主設(shè)備向從設(shè)備發(fā)送標(biāo)定和監(jiān)測(cè)命令,從設(shè)備則返回命令響應(yīng)值和監(jiān)測(cè)數(shù)據(jù)。
CCP協(xié)議又可分為查詢(xún)模式和數(shù)據(jù)采集(data acquisition,DAQ)模式。查詢(xún)模式可理解為一問(wèn)一答的通信模式,在這種模式下,主設(shè)備先問(wèn),從設(shè)備回答,兩者之間不斷交互來(lái)實(shí)現(xiàn)主從設(shè)備間的通信。DAQ模式是一種高效的數(shù)據(jù)上傳模式,在DAQ模式下從設(shè)備可以脫開(kāi)主設(shè)備的控制,按照一定的周期定時(shí)向主設(shè)備上傳數(shù)據(jù),這種方式上傳效率高,傳輸量大,但實(shí)現(xiàn)起來(lái)較為復(fù)雜。
所有CCP協(xié)議的通信均采用CAN報(bào)文形式來(lái)實(shí)現(xiàn),CCP消息一律采用8字節(jié)數(shù)據(jù)場(chǎng),需傳遞的信息和數(shù)據(jù)必須封裝入這8字節(jié)的數(shù)據(jù)場(chǎng)內(nèi)。
CCP協(xié)議采用的兩種報(bào)文對(duì)象分別是主設(shè)備向從設(shè)備傳遞消息對(duì)象的命令接收對(duì)象(command receive object,CRO)和從設(shè)備向主設(shè)備傳遞消息對(duì)象的數(shù)據(jù)傳輸對(duì)象(data transmission object,DTO)[3]。CRO傳遞的是命令代碼以及命令參數(shù),第0字節(jié)為命令代碼,第2~7字節(jié)中包含了與命令相關(guān)的命令參數(shù)結(jié)構(gòu),如圖1所示。DTO傳遞的則是從設(shè)備反饋回的消息,主要可分為3類(lèi):命令返回消息 (command return message-DTO,CRMDTO)、事件消息(event message-DTO)和數(shù)據(jù)采集消息(data acquisition-DTO,DAQ-DTO)。命令返回消息和事件消息的格式相同如圖2所示,數(shù)據(jù)采集消息格式如圖3所示[4]。
圖1 命令接收對(duì)象格式
圖2 命令返回消息或事件消息格式
圖3 數(shù)據(jù)采集消息格式
硬件部分主要由USBCAN-Ⅱ雙路智能CAN接口卡、PCA82C250CAN收發(fā)器、6N137光耦及微控制器MC9S12XDP512等組成。根據(jù)各硬件的工作原理及接口定義,設(shè)計(jì)得到系統(tǒng)硬件電路原理圖如圖4所示。首先,微控制器MC9S12XDP512通過(guò)數(shù)據(jù)輸出端TX0和數(shù)據(jù)輸入端RX0連接到6N137光耦;然后,經(jīng)光耦隔離電氣信號(hào)干擾后,連接到收發(fā)器PCA82C250CAN;最后,經(jīng)收發(fā)器通過(guò)差分電壓信號(hào)線(xiàn)CAN_H和CAN_L連接到總線(xiàn)電纜。
微控制器采用的是HCS12系列16位芯片MC9S12XDP512[5]。所使用的CAN模塊的型號(hào)為S12MSCANV3,在典型的MSCAN系統(tǒng)中,CAN節(jié)點(diǎn)通過(guò)收發(fā)器與CAN總線(xiàn)連接,收發(fā)器不僅可以提供CAN總線(xiàn)需要的大電流,還可以啟動(dòng)電流保護(hù)功能來(lái)保護(hù)出錯(cuò)的CAN節(jié)點(diǎn)。USBCAN-Ⅱ雙路智能CAN接口卡的每一個(gè)CAN通道都在內(nèi)部集成有120 Ω的終端電阻,無(wú)需外加終端電阻,連接時(shí)只需在收發(fā)器端安裝120 Ω 的終端電阻[6-7]。采用PCA82C250CAN收發(fā)器,用1 Mb/s的位速率在兩條有差動(dòng)電壓的總線(xiàn)電纜上傳輸數(shù)據(jù)[8]。輸入Rs用于模式控制。在圖4中,Rext的大小為1 000 Ω,滿(mǎn)足 0 Ω < Rext<1 800 Ω。收發(fā)器處于高速模式,位速率較高,要在微控制器與收發(fā)器之間使用6N137光耦,隔離電氣信號(hào)干擾。
圖4 系統(tǒng)硬件電路原理圖
通信模塊主要負(fù)責(zé)為PC機(jī)與ECU電控單元之間的通信提供接口,其整體結(jié)構(gòu)如圖5所示。在通信過(guò)程中上層標(biāo)定軟件發(fā)送標(biāo)定或監(jiān)測(cè)命令CRO到下層ECU端,ECU通過(guò) CCP驅(qū)動(dòng)解析CRO命令,判斷是標(biāo)定命令還是檢測(cè)命令,據(jù)此執(zhí)行相關(guān)操作,并及時(shí)發(fā)送應(yīng)答信號(hào)或檢測(cè)數(shù)據(jù)到上層標(biāo)定軟件。
圖5 通信模塊整體結(jié)構(gòu)
上層通信為上層標(biāo)定軟件的通信,主要通過(guò)調(diào)用USBCAN-Ⅱ雙路智能CAN接口卡的動(dòng)態(tài)鏈接庫(kù)usbcan.dll的函數(shù)來(lái)進(jìn)行,主要用到的動(dòng)態(tài)鏈接庫(kù)的函數(shù)如下[9]:
VCI_OpenDevice():打開(kāi)通信設(shè)備。
VCI_CloseDevice():關(guān)閉通信設(shè)備。
VCI_InitCan():初始化CAN。
VCI_StartCAN():啟動(dòng)CAN。
VCI_ResetCAN():復(fù)位CAN。
VCI_Transmit():發(fā)送數(shù)據(jù)幀。
VCI_Receive():接收數(shù)據(jù)幀。
在初始化USB轉(zhuǎn)CAN接口時(shí),需要調(diào)用動(dòng)態(tài)鏈接庫(kù)中的VCI_InitCan()函數(shù),對(duì)輸入波特率、標(biāo)識(shí)符位數(shù)、接收掩碼、發(fā)送隊(duì)列、接收隊(duì)列和接收緩沖區(qū)進(jìn)行設(shè)置。在通信過(guò)程中,標(biāo)定軟件向ECU發(fā)送標(biāo)定和檢測(cè)命令時(shí),ECU向標(biāo)定軟件發(fā)送應(yīng)答信號(hào)和檢測(cè)數(shù)據(jù)都要調(diào)用usbcan.dll中的函數(shù)來(lái)完成,usbcan.dll庫(kù)函數(shù)的調(diào)用流程如圖6所示。
圖6 庫(kù)函數(shù)調(diào)用流程圖
3.2.1 CAN驅(qū)動(dòng)
ECU端的通信模塊主要由CCP驅(qū)動(dòng)程序、CAN驅(qū)動(dòng)程序和CCP與CAN的接口程序組成。CCP驅(qū)動(dòng)負(fù)責(zé)解釋并執(zhí)行基于CCP規(guī)范的CRO命令并組織返回DTO信息,實(shí)現(xiàn)對(duì)ECU控制參數(shù)的標(biāo)定及監(jiān)控參數(shù)的上傳,它需要CAN驅(qū)動(dòng)的支持,來(lái)接收和發(fā)送基于CAN報(bào)文格式的CRO和DTO信息。
CAN封裝了CCP協(xié)議的所有幀類(lèi)型,作為CAN的應(yīng)用程序,CAN驅(qū)動(dòng)在系統(tǒng)中就顯得尤其重要。CAN驅(qū)動(dòng)主要由3個(gè)部分組成,分別為CAN初始化、CAN發(fā)送和CAN接收。
在通信之前,必須先對(duì)CAN進(jìn)行初始化。首先通過(guò)對(duì)CANCTL0_INITRQ的賦值使CAN模塊進(jìn)入初始化模式,在初始化模式下,設(shè)置使能寄存器(CANCTLl)、波特率寄存器(CANBTR0,CANBTR1)、驗(yàn)收控制寄存器(CANIDAC)以及驗(yàn)收寄存器組(CANIDAR0~7)。然后,退出初始化模式,等待進(jìn)入正常模式。
要將CAN報(bào)文發(fā)送至CAN總線(xiàn)上,首先需要選擇可用的發(fā)送緩沖區(qū),然后將數(shù)據(jù)寫(xiě)入發(fā)送緩沖區(qū),最后設(shè)置對(duì)應(yīng)于該緩沖區(qū)的發(fā)送標(biāo)志。其程序流程如圖7所示。
圖7 CAN發(fā)送流程圖
CAN幀的接收有兩種方式:查詢(xún)標(biāo)志CANRFLG_RXF和中斷,這里采用查詢(xún)方式,對(duì)CANRFLG_RXF清除標(biāo)志,即寫(xiě)1時(shí)將釋放該前臺(tái)緩沖區(qū),前臺(tái)緩沖區(qū)一旦釋放,后臺(tái)緩沖區(qū)就可能立即移到前臺(tái),因此必須在清除標(biāo)志前讀取所有的數(shù)據(jù),否則將導(dǎo)致接收錯(cuò)誤,其接收流程如圖8所示。
圖8 CAN接收流程圖
3.2.2 CCP驅(qū)動(dòng)
CCP驅(qū)動(dòng)是一種使ECU能夠接收并發(fā)送符合CCP規(guī)范的CRO和DTO,能及時(shí)地對(duì)收到的CRO命令做出解釋并執(zhí)行的程序,它主要由命令處理模塊和DAQ處理模塊組成。
命令處理模塊是CCP驅(qū)動(dòng)程序的核心部分,它調(diào)用CCP驅(qū)動(dòng)函數(shù)中的ccpCommand函數(shù)(功能如表1所示)及時(shí)解釋并執(zhí)行CRO命令,命令完成后,組織返回的 CRO-DTO信息,調(diào)用ccpSend函數(shù),對(duì)CRO命令進(jìn)行應(yīng)答。如果主設(shè)備要求對(duì)DAQ進(jìn)行操作,則將該操作及時(shí)轉(zhuǎn)移到DAQ處理機(jī)進(jìn)行處理。
DAQ處理模塊用于DAQ數(shù)據(jù)采集模式,它的通信是單向的,只能由從設(shè)備定時(shí)向主設(shè)備傳送數(shù)據(jù)。當(dāng)命令處理模塊接收到請(qǐng)求DAQ通信的命令后,就將CRO命令傳遞給DAQ處理模塊,DAQ處理模塊定時(shí)調(diào)用ccpDaq函數(shù)(如表1所示),觸發(fā)相應(yīng)的DAQ列表的數(shù)據(jù)發(fā)送,值得注意的是ccpDaq函數(shù)只能定時(shí)調(diào)用,其采樣頻率要通過(guò)調(diào)用ccpInit()函數(shù)(如表1所示)進(jìn)行設(shè)置。
表1 CCP驅(qū)動(dòng)主要函數(shù)功能
3.2.3 CCP與CAN接口程序
ECU在接到CAN總線(xiàn)上的報(bào)文后,立即對(duì)接收的ID標(biāo)識(shí)符進(jìn)行判斷,若等于CCP命令接收對(duì)象的ID,則將CCP的標(biāo)志位ccp_ind置1,主函數(shù)通過(guò)判斷CCP的標(biāo)志位ccp_ind的值來(lái)調(diào)用CCP驅(qū)動(dòng)子函數(shù)ccpCommand函數(shù)解釋并執(zhí)行CRO命令。執(zhí)行完后,CCP驅(qū)動(dòng)函數(shù)通過(guò)調(diào)用ccpSend子函數(shù)來(lái)完成DTO的發(fā)送,要注意的是,ccpSend子函數(shù)必須通過(guò)調(diào)用CAN發(fā)送函數(shù)來(lái)完成發(fā)送。其基本程序流程如圖9所示。
將以上通信模塊用于LPG燃料電控發(fā)動(dòng)機(jī)噴氣閥性能測(cè)試實(shí)驗(yàn)中,主要測(cè)試噴氣閥在不同的噴氣脈寬和電壓下的噴氣流量值。將硬件相關(guān)電路與噴氣閥驅(qū)動(dòng)、噴氣閥和質(zhì)量流量計(jì)等相連,利用所述的方法設(shè)計(jì)通信模塊,并通過(guò)相應(yīng)的通信模塊與上層標(biāo)定軟件相連。上層標(biāo)定軟件界面如圖10所示,上層標(biāo)定軟件根據(jù)需要設(shè)有12項(xiàng)控制參數(shù)和兩項(xiàng)監(jiān)測(cè)參數(shù),其中控制參數(shù)根據(jù)需要手動(dòng)設(shè)置,監(jiān)測(cè)參數(shù)則是按照10 ms和20 ms的周期上傳,傳輸速率最高可達(dá)1 Mb/s,可達(dá)到國(guó)際先進(jìn)標(biāo)定軟件的傳輸速度。
圖9 CCP與CAN接口程序流程圖
圖10 標(biāo)定軟件界面圖
噴氣特性試驗(yàn)結(jié)果如圖11所示。隨著噴氣脈寬和噴氣電壓的增加,噴氣量增加,增大到某一點(diǎn)達(dá)到噴射的最大值,趨于飽和。經(jīng)過(guò)反復(fù)試驗(yàn),結(jié)果表明,該通信模塊速度快、數(shù)據(jù)傳送可靠性高,可方便地實(shí)現(xiàn)對(duì)ECU的標(biāo)定和監(jiān)控,整個(gè)通信模塊具有較強(qiáng)的實(shí)時(shí)性。
在分析CCP協(xié)議的定義、通信方式和消息格式的基礎(chǔ)上,設(shè)計(jì)并開(kāi)發(fā)了基于CCP協(xié)議的汽車(chē)ECU標(biāo)定系統(tǒng)的通信模塊,該模塊使用模塊化的編程方法,提高了程序的可移植性,將CCP協(xié)議和CAN驅(qū)動(dòng)相分離,實(shí)現(xiàn)了通信模塊的通用性。通過(guò)實(shí)例證明了該通信模塊速度快、可靠性好,能夠在ECU標(biāo)定系統(tǒng)開(kāi)發(fā)過(guò)程中得到較好的應(yīng)用。
圖11 噴氣特性試驗(yàn)結(jié)果
[1] CENA G,VALENZANO A,VITTURI S.Automotive digital communications[J].Computer Standards & Interfaces,2005,27(6):665 -678.
[2] ETAS Co.CAN calibration protocol Rcv.2.1[S].1999.
[3] 馮靜,王俊席,卓斌.基于CCP協(xié)議的電控發(fā)動(dòng)機(jī)標(biāo)定系統(tǒng) CAN通信模塊的研發(fā)[J].內(nèi)燃機(jī)工程,2003,24(5):33 -38.
[4] 羅峰,孫澤昌.汽車(chē)CAN總線(xiàn)系統(tǒng)原理設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2010:285-318.
[5] Freescale Semiconductor Inc.MC9S12XDP512RMV2 Rev.2.21[S].2009.
[6] ZHIYUAN Electronics Co.Ltd.USBCAN - 2A/Ⅱ/Ⅰ智能 CAN接口卡Rev.2.01[S].2008.
[7] 鄔寬明.CAN總線(xiàn)原理和應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2001:34-87.
[8] Philips Electronics Co.PCA82C250 Rev.06[S].2011.
[9] ZHIYUAN Electronics Co.Ltd.CAN-bus Tester Software& Device Library Functions Rev.1.01[S].2009.