CCP 協議是一種CAN 總線標定匹配協議。本文簡單介紹該協議的基本原理,以及一種基于該協議的汽車ECU 標定系統的實現方法。最后,結合MC9S12DP256 芯片以及μC/OS-II操作系統,詳細討論了此標定系統的CCP 軟件實現方法。
1 前言
標定是指根據整車的各種性能要求(如動力性、經濟性、排放及輔助功能等),來調整、優化和確定整車上各ECU(包括發動機和各子系統 ECU)的運行及控制參數的控制算法。通過標定系統,能夠很方便的讀取 ECU 中的標定變量數據到標定平臺,并可以對這些數據進行編輯修改,編輯后的數據又可以寫入 ECU,從而達到修改 ECU 中標定參數的目的。功能完善且靈活方便的標定軟件對整個汽車ECU 控制系統的開發起到事半功倍的效果。目前,一般的標定系統都是采用基于串行口的點對點的通信方式,這種通信方式具有很大的局限性,而且通信協議都不一樣。在這個ECU 系統中,將采用 CAN 總線的通信方式和CCP(CAN Calibration Protocol)協議。
2 CCP 協議簡介
1996 年6 月,歐洲ASAP 項目組發布了現行的2.0 版,它采用CAN 2.0B(11 位或29位ID)進行MCS(measurement and calibration system)與ECU 之間的通信。該協議具有通用性強,適用范圍廣的特點,無論對8 位低速帶CAN 的控制器,還是32 位高速帶CAN 的控制器,均可滿足工作要求。基于CCP 協議的ECU 標定采用主-從通信方式,主設備通過CAN 總線與多個從設備相連,其中主設備是測量標定系統MCS(Measurement CalibrationSystem),從設備是需要標定的ECU。根據CCP 協議,主設備首先與其中一個從設備建立邏輯鏈接, 建立邏輯連接后,主、從機之間所有的數據傳遞均由主機控制,從機執行主機命令后返回包含命令響應值或錯誤代碼等信息的報文。
3 標定系統的實現
3.1 上位機部分
友好的人機頁面對于標定工作的順利進行是起決定性作用的,此標定系統的設計克服了以往大多數標定系統只能通過鍵盤對標定數據進行修改的局限性,在標定系統中除了表格編輯方式外,還將引入圖形編輯方式。將標定變量數據轉換成圖形,將使標定員對于標定變量數據比如說修正曲線和 MAP 圖有一個更直觀了解,并且可以通過鼠標拖動對圖形進行編輯修改,從而達到編輯修改標定變量數據的目的,這樣大大方便了對于修正曲線和 MAP圖類型標定變量的編輯。
在這里我們是采用 Visual C++完成標定頁面的設計以及與下位機的通信。該標定系統除了具有對 ECU 的標定功能外,還引入了實時監測功能,從而可以很快得到標定操作的返回信息。如圖所示,監測界面主要完成各種監測量數據的實時接收和顯示功能。測量得到的數據以數字和圖形兩種方式顯示出來,數據可以存儲。歷史數據可以從文件中讀出來,進行離線分析。標定界面則是完成標定變量數據的顯示、編輯修改以及上傳下載功能。根據變量的不同類型,變量數據分別以參量、二維、三維的形式表示。
圖 1 標定系統實現圖
3.2 底層ECU 部分
而底層 ECU 部分,標定系統在這里采用的是Freescale 公司的MC9S12DP256,這是一款16 位CPU 及0.25 微米、高速、高性能5.0V FLASH 存儲器技術的中檔芯片。它具有25MHz的主頻、256K 字節的FLASH 存儲器、16 通道的8 位A/D 轉換器以及多達5 個的高速CAN 控制器。其較高的性能價格比使其非常適合用于一些中高檔汽車電子系列相關產品。同時其較簡單的背景開發模式(BDM)使得開發成本進一步降低,也使得現場開發與系統升級變得更加方便。
需要標定的變量稱為標定參數,標定定義也就是修改駐扎在ECU 內存中的變量的內容。根據標定參數所在不同地址空間( RAM、FLASH 或EEPROM) , 這里也就有了不同的標定方法。RAM EEPROM 標定的速度較塊,但RAM 和EEPROM 空間有限,所需的標定參數的數目也就受到了限制,而FLASH 空間較大,但標定的速度相對較慢。這里考慮選擇芯片的實際情況,選擇了FLASH 標定的方法。當標定參數需要存放在FLASH 中時, 在ECU 上電初始化后, 程序首先將標定參數的初始值復制到RAM 中, 在標定軟件中該段用來存放標定參數的RAM 稱為Calibration RAM。標定過程中, 標定軟件修改Calibration RAM 中的參數值。標定全部結束后, 再將該段RAM 中的內容復制回FLASH 中。
4 軟件設計
標定系統的軟件設計主要分為二個部分:CAN Driver 和CCP Driver,而這二個部分都是基于μC/OS-II 這種實時操作系統上運行。由于ECU 這里采用飛思卡爾的MC9S12DP256,因此可以直接應用芯片CAN 模塊提供的接口,發送CAN 數據。CCP Driver 是標定系統的核心部分,它主要是通過調用CAN Driver 實現與上位機標定軟件的通信,從而進行對ECU的在線標定。
4.1 CAN Driver
在這里我們采用的是μC/OS-II 這種實時操作系統,但在標定過程中,我們處理的數據量很大,通信速度也很快,CAN 接收到一條消息就產生一次中斷,中斷服務子程序,每次中斷都要引起一次任務調度。CPU 大量的時間花在任務切換上,若CPU 還需處理其他事件,則可能出現接收緩沖寄存器接收溢出的錯誤,造成數據丟失。因此,在這里采用一種基于環形緩沖區的方式來實現CAN Driver。整個CAN Driver 由中斷處理程序和底層驅動模塊組成。中斷處理程序在每次CAN 控制器完成收發時,喚醒驅動程序,進行下一步工作,設備相關程序通過對CAN 控制器寄存器的讀寫,完成對CAN 端口的配置和狀態檢測等工作,同時為設備無關軟件和用戶程序提供接口。而底層驅動模塊則主要任務是結合收發消息緩沖區,為應用程序提供了接收和發送消息的接口函數。
(1)中斷處理程序
中斷級程序的程序流程圖如圖 2 所示。首先根據不同的中斷類別進入不同的中斷級程序。若為接收完成中斷,則清除中斷源,將接收到的消息放入接收緩沖區;將該消息存入接收緩沖區存入指針所指向的地址,將該指針向下移動,接收緩沖區計數器加1,并發出信號量通知應用程序有新的消息已經接收到,若有任務正在等待CAN 上的新消息,則該任務進入就緒狀態等待OS 的調度。
圖2 中斷級程序的程序流程圖
若為發送完成中斷,則將發送緩沖區的待發送消息讀出;將有待發送消息且優先級最高的一個中讀取最舊的消息,發送緩沖區計數器減1,發出信號量通知應用程序有一個消息被發出,并匯報當前發送緩沖區的狀態;還應判斷是否為最后一個待發送的消息,若不是,則清除中斷源并將消息發送到總線上,若是最后一個,則禁止發送完成中斷后發送該消息,將這個發送完成中斷保留到應用程序下一次發送消息的時候允許并產生。
(2)底層驅動模塊
底層驅動模塊主要是為應用程序提供了接收和發送消息的接口函數。當接收消息時,如圖3 實線所示,應用程序在信號量處等待;收到一個消息后,ISR從串行端口讀入消息,將其存入環狀緩沖區。然后ISR 發出信號量,通知在等待串口數據的任務已收到一個消息。等待任務收到信號量后,進入就緒狀態,準備被OS 調度器激活。當內核調度該任務運行時,該任務從環狀緩沖區中取出消息,完成接收消息的過程。
圖3 緩沖區接收發送消息
發送消息的方法如圖3 虛線所示。當發送環狀緩沖區已滿時,信號量作為指示,暫停發送任務。為發送消息,任務等待信號量。如果環狀緩沖區未滿,則任務繼續向環狀緩沖區存儲欲發送的消息。如果存儲的消息是緩沖區的第一個字節,則發送中斷允許,中斷程序準備啟動。CAN 發送ISR 從環行緩沖區中取出最舊的消息,同時發送信號量,通知發送任務,表明環狀緩沖區有空間接收另外的消息。接著ISR 將消息從CAN 端口發送到總線上。
4.2 CCP Driver
基于實時操作系統的CCP Driver,標定系統在這里是通過Command 處理機和DAQ 處理機兩部分來實現的。
Command 處理機由一個系統任務來完成。該任務在OS 初始化后就啟動運行,識別CAN 網絡上的CCP 主設備發送給該從設備的會話命令。根據命令做相應動作,并回送命令應答,完成會話。DAQ 處理機由1~n 個系統任務來完成。本項目支持對不同時間要求的監視參數設定不同的DAQ 周期,不同時間要求的監視參數填入不同的DAQ_List,每個DAQ_List 由一個任務完成周期發送。
Command 處理機在收到主設備要求啟動某DAQ_List 命令時, 調用OS 函數OSTaskCreate()啟動相應的任務,該任務每完成一次發送就調用OS 函數OSTimeDlyHMSM( )掛起一定的時間,這個時間就是主設備對這個DAQ_List 要求的發送周期。在收到主設備要求停止某DAQ_List 命令時,調用OS 函數OSTaskDel( )函數刪除該任務。
(1)Command 處理機
Command 處理機主要是獲取并解讀主設備的CCP 命令,并執行該命令;命令執行完成后,向主設備發送應答;若執行時出錯,應答中向主設備報錯;若主設備命令要求對DAQ進行操作,則將該操作傳達給DAQ 處理機,由DAQ 處理機完成DAQ 操作。
Command 處理機由一個RTOS 任務來完成,其示意性代碼如下,GetMsg 函數為CAN 驅動程序的接收消息函數,調用此函數則等待獲取CAN 端口接收到的消息幀。一旦接收到新的消息幀則函數返回,用戶可通過&msg_command 獲取該消息幀的內容。
void task (void * data) {
for( ; ; ) {
GetMsg(&msg_command); //等待并獲取一個CCP 命令
CCP_Command (&msg_command); //將命令送給CCP 命令處理函數
}
}
(2)DAQ 處理機
DAQ 處理機的任務是根據主設備的需要,定時向CAN 總線上發送DAQ 數據。它由啟動從設備的DAQ 發送、停止從設備的DAQ 發送、執行DAQ 循環發送的任務3 個部分構成。
啟動或停止從設備的 DAQ 發送,由Command 處理機調用函數Start_DAQ (DAQ List
number ,)和Stop_DAQ (DAQ List number)來完成,該函數啟動或停止相應的DAQ 發送任務,
其示意性代碼如下:
Start_DAQ(INT8U DAQ_List_num) { //啟動第n 個DAQ_List
DAQ_List[n].Started = 1;
DAQ_List[n].Prepared = 1;
OSTaskCreate (第n 個DAQ_List 的任務); //調用系統函數,創建DAQ 發送任務,
并使任務進入調度
}}
Stop_DAQ(INT8U DAQ_List_num) { //停止第n 個DAQ_List
DAQ_List[n].Started = 0;
DAQ_List[n].Prepared = 0;
OSTaskDel (第n 個DAQ_List 的任務); //調用系統函數,刪除DAQ 發送任務
}
執行DAQ 循環發送的任務,需要按照ODT 設置把DAQ 數據發送到CAN 總線上,同時需要按照DAQ 周期要求循環執行,該任務示意性代碼如下:
void DAQ_task ( ) {
for( ; ; ) {
CCP.Upload(0); //根據ODT 設置把DAQ 數據發送到CAN 總線上
OSTimeDlyHMSM(Period); //調用RTOS 函數,等待一個周期的時間
}
}
5 結束語
經過多次反復不斷的實際調試,此 CCP 軟件程序在系統上運行穩定可靠,實現了基于MC9S12DP256 上的FLASH 區的標定。
這種采用環形緩沖區以及結合實時操作系統的 CCP 軟件程序設計,有效的避免在ECU標定過程中數據的丟失,并可以對多個ECU 同時進行在線標定,具有很強的實用價值。
責任編輯:gt
-
芯片
+關注
關注
456文章
51170瀏覽量
427227 -
控制器
+關注
關注
112文章
16445瀏覽量
179441 -
操作系統
+關注
關注
37文章
6892瀏覽量
123742
發布評論請先 登錄
相關推薦
評論