譚文陽,李軍偉,朱青松,姜世騰
(山東理工大學交通與車輛工程學院,山東 淄博 255049)
重型拖拉機的控制器作為重型拖拉機控制的核心,依據(jù)CCP 協(xié)議對重型拖拉機控制器內(nèi)存中的變量進行在線標定與測量,可實現(xiàn)實時改變控制器性能的功能,因此CCP 底層驅(qū)動的開發(fā)成為當前重型拖拉機控制器發(fā)展的關鍵。CCP 底層驅(qū)動的開發(fā)避免了后續(xù)升級優(yōu)化控制器中相關參數(shù)而導致的軟件程序錯誤,且同時解決了燒寫程序頻繁的問題。
目前國內(nèi)存在較多對CCP 協(xié)議的研究,但絕大部分是簡單介紹CCP 協(xié)議,或者是簡單介紹CCP 的標定流程。楊攀[1]研究了以英飛凌XC2365A 為控制核心的ESP(electronic stability program)在線標定,聶林同[2]研究了以英飛凌TC275 為控制核心的ECU(electronic control unit)在線標定,徐群杰[3]研究了以MC9S12XEP100 為控制核心的ECU 在線標定。但針對Power PC 架構的32 位飛思卡爾系列單片機的CCP 底層驅(qū)動研究很少。本文中針對飛思卡爾系列MPC5744P 單片機的CCP 底層驅(qū)動進行了研究,并設計了配套的上位機界面。
為實現(xiàn)以MPC5744P 單片機為控制器的CCP 標定測量功能,設計了圖1 所示的在線標定系統(tǒng)[4,5],該系統(tǒng)由上位機標定軟件、下位機MPC5744P 單片機以及USBCAN 卡組成。
圖1 標定系統(tǒng)結(jié)構原理圖
上位機實現(xiàn)對下位機MPC5744P 單片機中變量的標定與測量功能,MPC5744P 單片機作為下位機實現(xiàn)接收上位機的消息并進行解析與反饋的功能,USBCAN 作為上位機標定軟件與下位機MPC5744P單片機之間的CAN 通信工具。
通過對FlexCAN 模塊進行初始化的設計與通信協(xié)議的制定,實現(xiàn)了MPC5744P 單片機與上位機之間的通信。本文中中型拖拉機控制器的FlexCAN 模塊采用8 MHz 的時鐘源,500 kbps 的波特率。使用FlexCAN 模塊0 通道的消息緩存區(qū)4(message buffer 4,MB[4])作為發(fā)送數(shù)據(jù)的緩存區(qū)來響應上位機標定軟件的命令,設置其MB 的身份標識符(identity document,ID)為0x101。使用FlexCAN 模塊0 通道的MB[0]作為接收緩存區(qū)來接收上位機標定軟件的命令,設置其MB 只接收ID 為0x100 的報文[6,7]。FlexCAN 模塊的初始化設計流程如圖2 所示。
圖2 FlexCAN驅(qū)動流程圖
CCP 驅(qū)動主要由CCP.C、CCPPAR.H、CCP.H 等3 個文件組成[8,9]。CCP.C 文件主要包含ccpInit()、ccpCommand()與ccpDaq()3 個函數(shù),利用這3 個函數(shù)來處理接收到的上位機報文并將處理結(jié)果反饋至上位機。ccpInit()函數(shù)用來初始化CCP 驅(qū)動的各種參數(shù),ccpCommand()函數(shù)用來處理輪詢(polling)模式的各種命令,ccpDaq()函數(shù)用來處理數(shù)據(jù)采集(data acquisition,DAQ)模式的各種命令。CCP.H 文件用作對CCP 驅(qū)動的28 條命令進行宏定義、對CCP.C 文件中定義的函數(shù)進行聲明以及對CCP 驅(qū)動的會話狀態(tài)與相關數(shù)據(jù)結(jié)構體的定義。CCPPAR.H 文件被用作功能啟動文件來使用,通過改變其中對標志位的宏定義可實現(xiàn)CCP 驅(qū)動的不同功能。
為了便于將標定變量存入Flash,因此將需要標定的變量統(tǒng)一存放在MPC5744P單片機中大小為16 KB的LOW FLASH0塊中[10,11]。通過在57xx_flash.ld鏈接文件中被用作內(nèi)存劃分函數(shù)的MEMORY中定義cal:org=0x00800000,len=16 K來劃分16 KB的Flash塊作為標定變量的存儲空間。通過宏定義#define CALIBRATION_SEG__attribute__ ((section(".cal_info")))以及unsigned char CALIBRATION_SEG den gstatus=0完成將標定變量放入標定變量存儲區(qū)域的操作。
本文采用的標定方式為通過上位機在RAM 中標定變量,由于掉電后RAM 中的變量會丟失,因此Flash 驅(qū)動的主要作用為將RAM 中標定完成的變量寫入Flash 閃存中。Erase_block()函數(shù)用于向LOW FLASH0 塊寫入數(shù)據(jù)前的擦除,write()函數(shù)用于將RAM 中標定完成的數(shù)據(jù)寫入LOW FLASH0 塊中。RAM 中變量標定完成后寫入Flash 的具體操作流程如圖3 所示。
將RAM 中標定變量向Flash 寫入的操作主要通過C55FMC 模塊下的LOCK 寄存器解鎖LOW FLASH0 塊,SEL 寄存器選擇LOW FLASH0 塊進行擦除,MCR 寄存器的ERS 標志位置1 啟動Flash 塊的擦除,設置MCR 寄存器的EHV 位為1,高壓上電對LOW FLASH0 塊進行擦除,等待MCR 寄存器的DONE 位清0,結(jié)束高壓上電擦除操作,最后通過設置MCR 寄存器的ERS 位清0 結(jié)束整個LOW FLASH0塊的擦除操作。
圖3 Flash驅(qū)動程序流程圖
將RAM 中的變量寫入LOW FLASH0 塊的過程,設置MCR 寄存器PGM 位置1 開始寫入數(shù)據(jù),隨后將RAM 中的變量對應寫入LOW FLASH0 塊中,置EHV 位為1 開始高壓上電寫入數(shù)據(jù),等待MCR 寄存器的DONE 位清0,結(jié)束高壓上電寫入數(shù)據(jù)操作,最后設置PGM 位清0,結(jié)束整個對LOW FLASH0 塊的RAM 數(shù)據(jù)寫入操作。
在DAQ 模式中,周期中斷定時器(periodic interrupt timer,PIT)用來周期性的向上位機返回數(shù)據(jù)[12,13]。本文采用PIT 模塊的0 通道定時。PIT0_init()函數(shù)被用作初始化PIT 模塊的0 通道的參數(shù),設置PIT0 通道的時鐘基準為8 MHz,設置定時周期為1 s。PIT0_isr()函數(shù)被用來存放ccpDaq()函數(shù),此函數(shù)通過接收上位機命令定時向上位機反饋數(shù)據(jù)。具體的設計流程如圖4 所示。
圖4 PIT驅(qū)動程序流程圖
標定軟件的上位機包含發(fā)送CCP 命令報文、解析重型拖拉機控制器反饋的報文、在線標定以及將測量量顯示在上位機界面的功能。因此對CCP 標定軟件的設計包含兩個方面:①上位機標定測量界面的設計;②上位機與重型拖拉機控制器之間通信協(xié)議的制定。
本文采用Python 的外部工具PyQt5 對標定軟件界面進行設計,隨后一鍵自動生成代碼,并將USBCAN 卡的二次開發(fā)庫函數(shù)嵌入到自動生成的代碼中,實現(xiàn)標定界面與CAN 通信之間的關聯(lián),從而實現(xiàn)標定軟件對重型拖拉機控制器的標定測量功能。本文用到的USBCAN 卡庫函數(shù)如表1 所示。
表1 USBCAN卡的庫函數(shù)
本文對上位機CAN 通信的設計除了表1 所示的二次開發(fā)庫函數(shù)外[14],同時用到二次開發(fā)庫函數(shù)的結(jié)構體CAN_OBJ 與INIT_CONFIG。CAN_OBJ 結(jié)構體被用來存儲發(fā)送與接收的CAN 幀信息,INIT_CONFIG 結(jié)構體對標定軟件中用到的CAN 模塊進行了初始化配置。
為實現(xiàn)標定軟件與重型拖拉機控制器之間的通信,本次設計自定義了通信協(xié)議[15,16]。通過標定軟件與重型拖拉機控制器的通信,實現(xiàn)了對重型拖拉機控制器中變量的在線標定與測量。標定軟件的報文ID 為0x100,重型拖拉機控制器的報文ID 為0x101。標定軟件與重型拖拉機控制器之間的通信所用CAN 幀類型均為數(shù)據(jù)幀,如表2 所示。
表2 CAN通信協(xié)議
ID 為0x100 的報文作用是向重型拖拉機控制器發(fā)送命令,實現(xiàn)對RAM 中變量的標定與測量,ID 為0x101 報文的作用是在接收到標定軟件發(fā)送的命令后,向標定軟件反饋重型拖拉機控制器的狀態(tài)信息。
標定軟件通過ID 為0x100 的報文發(fā)送CONNECT、EXCHANE_ID和GET_CCP_VERSION命令,重型拖拉機控制器接收到命令后,通過ID為0x101的報文向標定軟件反饋在CCPPAR.H文件中設置的單片機ID與當前使用的CCP協(xié)議版本號以完成標定軟件與重型拖拉機控制器的連接。完成以上連接操作后,標定軟件通過ID為0x100的報文向重型拖拉機控制器發(fā)送SET_MTA與DNLOAD命令對重型拖拉機控制器RAM中變量進行標定,標定軟件通過ID為0x100的報文向重型拖拉機控制器發(fā)送SHORT_UP命令對重型拖拉機控制器RAM中變量進行測量,重型拖拉機控制器通過ID為0x101的報文向標定軟件反饋接收到標定與測量命令后單片機的狀態(tài)。最后,標定軟件通過ID為0x100的報文發(fā)送DISCONNECT命令,重型拖拉機控制器通過ID為0x101的報文向標定軟件反饋重型拖拉機控制器與標定軟件是否斷開連接成功。
為了驗證標定軟件對重型拖拉機控制器中變量的在線標定測量功能,并為了更直觀地觀測到設計結(jié)果,本文對重型拖拉機控制器中控制前照燈、霧燈與示寬燈的3 個變量進行標定測量。
標定軟件界面如圖5 所示,主要由發(fā)送配置、運行狀態(tài)顯示、設置界面與標定界面4 部分組成。發(fā)送配置界面包括波特率下拉框選擇按鈕、打開CAN 卡按鈕和復位CAN 卡按鈕。運行狀態(tài)界面可實時顯示標定軟件與重型拖拉機控制器的交互過程中CAN 通信的具體狀態(tài)。設置界面包括打開A2L 文件按鈕、清除按鈕以及圖5 中右下側(cè)用于顯示A2L 文件中變量的顯示框。點擊“標定”按鈕即可顯示如圖6 所示標定界面,包括選擇標定量、選擇測量量、開始標定、開始測量4 個按鈕以及用于標定操作的標定量框與測量操作的觀測量框。
通過點擊圖5 中的波特率下拉框選擇500 kbps的通信速率。通過點擊“打開CAN 卡”按鈕實現(xiàn)對USBCAN 卡的調(diào)用與初始化。通過點擊圖5 中的“打開A2L 文件”按鈕將需要標定的變量導入作為標定軟件的上位機,上述操作完成后,本次標定所需要操作的變量便顯示在如圖7 所示的標定軟件界面中。
圖5 標定軟件的設置界面
圖6 標定軟件的標定操作界面
點擊圖7 中“變量名”一欄中的變量,然后點擊圖5 中的“標定”按鈕進入標定界面,如圖6 所示,然后分別點擊圖6 中的“選擇標定量”按鈕與“選擇測量量”按鈕,所選擇的標定量與測量量便顯示在圖8 中的“標定量”框與“觀測量”框中,同時在“標定量”框與“觀測量”框中的“值”一欄顯示所選變量的實時值0。此時3 個小燈的狀態(tài)如圖9所示,為點亮狀態(tài)。
圖8 標定操作前標定軟件界面
圖9 標定前控制器實測圖
將圖8 中“標定量”框的“值”一欄中相應變量的值修改為1,點擊“開始標定”按鈕,完成對變量的標定。點擊“觀測量”框中“變量名”一欄選中相應變量,點擊“開始測量”按鈕完成對變量的測量。完成上述操作后,變量的實時值便顯示在圖10 中“觀測量”框的“值”一欄,實時值為1。此時3 個小燈的狀態(tài)如圖11 所示,為熄滅狀態(tài)。
最后點擊圖10 中的“復位CAN 卡”按鈕,關閉CAN 卡,結(jié)束對變量的標定與測量。此時的界面如圖12 所示。
圖10 標定操作后標定軟件界面
圖11 標定后控制器實測圖
圖12 復位CAN卡成功界面
針對基于MPC5744P 單片機的重型拖拉機控制器進行了CCP 標定協(xié)議底層驅(qū)動以及對應上位機標定軟件的設計開發(fā)。對涉及到CCP 標定協(xié)議的底層驅(qū)動的CCP 驅(qū)動模塊、FlexCAN 模塊、Flash 模塊以及PIT 模塊的程序進行了設計。同時設計了可進行標定測量的上位機標定軟件。測試結(jié)果表明,所設計的CCP 標定系統(tǒng)能夠?qū)崿F(xiàn)對重型拖拉機控制器的在線標定測量功能。