李繼武
(南京城市職業(yè)學(xué)院智能工程學(xué)院,江蘇 南京 211200)
CAN總線技術(shù)課程是新能源汽車專業(yè)核心課程,承擔(dān)著培養(yǎng)學(xué)生適應(yīng)崗位需求,提高應(yīng)用能力的重任,而以培養(yǎng)應(yīng)用能力為核心改革實訓(xùn)教學(xué),是高職院校人才培養(yǎng)工作內(nèi)涵式發(fā)展的主要努力方向。高職院校新能源汽車專業(yè)目前在講授新能源汽車CAN總線技術(shù)課程時主要依賴于CAN網(wǎng)絡(luò)硬件實訓(xùn)臺架,這種臺架通常只是將汽車上的相關(guān)CAN網(wǎng)絡(luò)設(shè)備拆解下來,再組裝到一個工作臺上,通上電后可以測量CAN網(wǎng)絡(luò)電壓和波形。停留在這個層次上的實訓(xùn)臺架,只能滿足低層次認知實訓(xùn),無法勝任高職教育創(chuàng)新創(chuàng)業(yè)的高層次需求[1]。汽車CAN總線技術(shù)課程是汽車技術(shù)、通信技術(shù)和計算機軟硬件技術(shù)結(jié)合的課程,從崗位人才需求角度考慮,學(xué)生不僅需要掌握汽車技術(shù)和CAN總線技術(shù),還需要從軟件開發(fā)的角度入手,掌握CAN數(shù)據(jù)報文幀的截獲破解方法、報文幀的收發(fā)過程以及控制設(shè)備的原理。
本文設(shè)計了一款CAN總線教學(xué)平臺軟件,它利用USBCAN接口卡接入某純電動汽車的CAN網(wǎng)絡(luò),通過配置濾波器和波特率等參數(shù),可以截獲破解舒適網(wǎng)、動力網(wǎng)等CAN數(shù)據(jù)。根據(jù)破解的CAN數(shù)據(jù),平臺實現(xiàn)了自動空調(diào)、組合開關(guān)、雨刮開關(guān)、背光調(diào)節(jié)等設(shè)備的CAN命令控制模塊。實踐表明,利用本平臺軟件開展CAN總線技術(shù)課程實訓(xùn)教學(xué),有效提高了學(xué)生的應(yīng)用能力。作為創(chuàng)新教育和專業(yè)教育相結(jié)合的產(chǎn)品,以平臺軟件為核心搭建的工作坊為本專業(yè)學(xué)生開展創(chuàng)新創(chuàng)業(yè)實踐提供了重要的機會和可能[2]。
平臺測試用車為2019年上市的某款純電動汽車,該車工信部純電續(xù)航里程為400km,電池能量52kWh,前置永磁同步單電機,單速變速器,4.3英寸液晶儀表,自動空調(diào)。
平臺測試用新能源汽車CAN總線網(wǎng)絡(luò)包含3個通信子網(wǎng),分別為舒適網(wǎng)125kb/s,動力網(wǎng)250kb/s,ESC網(wǎng)500kb/s。
新能源汽車CAN網(wǎng)絡(luò)各子網(wǎng)之間由于通信速率不同,互相之間信息交換需要由網(wǎng)關(guān)控制器進行轉(zhuǎn)發(fā)[3]。網(wǎng)關(guān)是汽車內(nèi)部通信的核心,通過它可以實現(xiàn)各條總線上信息的共享、網(wǎng)絡(luò)管理和故障診斷功能[4]。各子網(wǎng)同網(wǎng)關(guān)控制器的連接關(guān)系如圖1所示。
圖1 某款純電動汽車網(wǎng)關(guān)控制器電氣連接圖
本平臺軟件因為要對測試用汽車CAN網(wǎng)絡(luò)數(shù)據(jù)進行采樣,所以選取圖1中的①~⑥作為檢測點,并引出采樣接口。
USB接口是一種方便、靈活、簡單且即插即用的通用串行總線,CAN總線可以通過USBCAN接口卡與USB接口連接從而與主機進行高速通信。USBCAN接口卡用于在USB總線和CAN總線之間完成數(shù)據(jù)的雙向收發(fā)功能。
平臺選用的USBCAN接口卡是廣成科技公司生產(chǎn)的USBCAN-IIV502型,該接口卡使用鳳凰端子接線方式,具有兩路CAN總線接口,支持CAN2.0A/CAN2.0B幀格式,通信波特率在5kb/s至1Mb/s之間可自由設(shè)置,電源供電采用USB總線方式,CAN總線接口每秒最多接收14000幀數(shù)據(jù),支持Windows操作系統(tǒng)。
上位機PC、USBCAN接口卡和網(wǎng)關(guān)控制器三者連接關(guān)系如圖2所示。從USBCAN接口卡引出的L、H兩根CAN引線可以接到網(wǎng)關(guān)控制器的7和8引腳(舒適網(wǎng))或14和13引腳(ESC網(wǎng))或9和10引腳(動力網(wǎng)),從而接入汽車CAN網(wǎng)絡(luò)。
圖2 硬件連線圖
程序啟動后,首先要調(diào)用ECAN鏈接庫中的OpenDevice函數(shù)打開USBCAN接口卡。該函數(shù)需要指定2個輸入?yún)?shù):設(shè)備類型和設(shè)備索引。設(shè)備類型設(shè)置為4表示USBCANⅡ類型;設(shè)備索引設(shè)置為0表示只有1個設(shè)備。如果有2個設(shè)備,可以指定為0或1。
打開USB-CAN接口卡后需要通過INIT_CONFIG結(jié)構(gòu)體初始化濾波器和波特率等參數(shù)。平臺采用恩智浦半導(dǎo)體生產(chǎn)的CAN總線控制器,型號為SJA1000,它有兩種工作模式:BasicCAN和PeliCAN。在BasicCAN模式下,SJA1000只支持接收發(fā)送標(biāo)準(zhǔn)幀格式報文;在PeliCAN模式下,SJA1000可以接收發(fā)送標(biāo)準(zhǔn)幀格式和擴展幀格式兩種報文。通過軟件編程使用SJA1000的驗收濾波器可以濾掉無關(guān)報文。SJA1000驗收濾波器包含4個驗收碼寄存器:ACR0、ACR1、ACR2和ACR3;同時它還擁有4個屏蔽碼寄存器:AMR0、AMR1、AMR2和AMR3。驗收碼與屏蔽碼按位對應(yīng),如果屏蔽碼某位為1,則報文幀ID對應(yīng)位不參與屏蔽接收數(shù)據(jù);如果屏蔽碼某位為0,則該報文幀ID對應(yīng)位和驗收碼對應(yīng)位相同時,表示該位允許接收數(shù)據(jù);只有報文幀ID所有位都允許接收數(shù)據(jù),SJA1000控制器才會接收該報文,并將其放入接收數(shù)據(jù)緩沖區(qū)[5]。
INIT_CONFIG結(jié)構(gòu)體同濾波器相關(guān)的成員有3個:Acc-Code、AccMask和Filter。其中AccCode表示驗收碼,AccMask表示屏蔽碼,F(xiàn)ilter表示濾波使能,0表示不使能,1表示使能,只有在使能情況下,才能啟用SJA1000濾波功能。濾波器設(shè)計界面如圖3所示。
圖3 濾波器設(shè)置
設(shè)置通信波特率需要使用SJA1000控制器的2個寄存器:BTR0(總線定時寄存器0)和BTR1(總線定時寄存器1)。BTR0定義了波特率預(yù)設(shè)值(BRP)和同步跳轉(zhuǎn)寬度(SJW)的值,如表1所示。
表1 總線定時寄存器0
CAN總線時鐘周期tSCL計算公式如下:
式中:tCLK——SJA1000的晶振周期。考慮到平臺采用的晶振頻率f為16MHz,因此tCLK=1/f=1/16μs。計算樣例數(shù)據(jù)如下:
BTR1定義了每個位周期的長度、采樣點的位置和在每個采樣點的采樣數(shù)目,如表2所示。
表2 總線定時寄存器1
SAM表示采樣數(shù)目,0表示單倍采樣;TSEG1和TSEG2決定了每一位的時鐘數(shù)目和采樣點位置,關(guān)于SYNCSEG、TSEG1和TSEG2,計算公式如下:
根據(jù)上述公式計算表2樣例,結(jié)果如下:
通過上面計算得到tSYNCSEG、tTSEG1和tTSEG2結(jié)果值后,可以計算出SJA1000控制器的位周期和通信波特率,公式如下:
計算SJA1000控制器的位周期和通信波特率,結(jié)果如下:
綜上,如果BTR0(總線定時寄存器0)設(shè)置為0x03,BTR1(總線定時寄存器1)設(shè)置為0x1C,計算出的SJA1000控制器通信波特率為125kb/s,其它常用波特率設(shè)置情況如表3所示。
表3 SJA1000控制器常用CAN通信波特率設(shè)置
初始化USB-CAN接口卡參數(shù)后,需要調(diào)用StartCAN函數(shù)打開該接口卡的某個CAN通道。如果有多個CAN通道,每次調(diào)用都要指定要使用的CAN通道號。
USB-CAN接口卡某個CAN通道打開后,即可開始接收CAN數(shù)據(jù)。由于接收CAN數(shù)據(jù)過程是一個耗時操作,可能導(dǎo)致用戶界面停止響應(yīng),為了提高程序響應(yīng)性,使用戶界面及時刷新CAN數(shù)據(jù),本平臺設(shè)計了一個“后臺耗時+通信更新”方案,即開啟一個后臺獨立線程完成接收CAN數(shù)據(jù)的耗時操作,然后通過線程間事件通信,完成用戶界面更新操作。
2.4.1 程序核心設(shè)計方案
使用BackgroundWorker對象開啟單獨線程完成耗時操作并及時響應(yīng)更新用戶界面,需要按照下面步驟進行設(shè)計。
1)創(chuàng)建一個BackgroundWorker對象。BackgroundWorker對象屬于System.ComponentModel命名空間,它是完成本方案的核心對象。
2)訂閱BackgroundWorker對象的3個事件:DoWork事件、ProgressChanged事件和RunWorkerCompleted事件。
DoWork事件用于執(zhí)行耗時操作,耗時期間需要不斷輪詢CancellationPending屬性,其值一旦為true,則中止耗時操作。
ProgressChanged事件用于接收耗時操作的計算結(jié)果并實時更新用戶界面,事件處理程序的第2個參數(shù),其類型為ProgressChangedEventArgs,它有一個UserState屬性,是后臺線程向本事件傳遞進度數(shù)據(jù)的媒介。
RunWorkerCompleted事件在后臺耗時操作已完成、被取消或引發(fā)異常時觸發(fā)。判斷哪個原因觸發(fā)了該事件需要根據(jù)第2個參數(shù),其類型是RunWorkerCompletedEventArgs,它有Cancelled、Error和Result三個屬性,如果耗時操作中途取消,則Cancelled屬性為true;如果發(fā)生異常,則Error屬性指明發(fā)生了哪種錯誤;如果既沒中途取消,又沒發(fā)生異常,則可通過Result屬性獲得耗時操作結(jié)果。
3)啟動后臺線程。調(diào)用BackgroundWorker對象的RunWorkerAsync方法將觸發(fā)DoWork事件,啟動后臺線程開始執(zhí)行耗時工作。
2.4.2 程序核心代碼
整個程序最核心部分是后臺線程接收CAN數(shù)據(jù)的耗時操作,其代碼如下(部分):
上述代碼中,CAN_OBJ作為結(jié)構(gòu)體類型代表幀的數(shù)據(jù)結(jié)構(gòu)。Transmit發(fā)送函數(shù)和Receive接收函數(shù)使用CAN_OBJ結(jié)構(gòu)體來傳送CAN信息幀。Receive函數(shù)從指定的設(shè)備CAN通道的緩沖區(qū)里讀取數(shù)據(jù),函數(shù)原型如下:
上述參數(shù)中,pReceive參數(shù)是一個指針變量,表示用來接收的數(shù)據(jù)幀數(shù)組。根據(jù)本方案設(shè)計的程序,接收CAN數(shù)據(jù)界面如圖4所示。
圖4 接收CAN數(shù)據(jù)界面
發(fā)送CAN數(shù)據(jù)需要調(diào)用ECAN鏈接庫中的Transmit函數(shù),其原型如下:
上述參數(shù)中,pSend參數(shù)是一個指針類型,表示要發(fā)送的數(shù)據(jù)幀數(shù)組,Len參數(shù)是一個整數(shù)類型,表示要發(fā)送的數(shù)據(jù)幀數(shù)組的長度。函數(shù)成功調(diào)用后,返回實際發(fā)送的幀數(shù)。發(fā)送CAN數(shù)據(jù)的界面如圖5所示。
圖5 發(fā)送CAN數(shù)據(jù)界面
以2019款某純電動汽車的“雨刮洗滌”部件為研究對象,運行本實訓(xùn)平臺軟件,檢測出CAN命令如表4所示。
表4 某純電動汽車“雨刮洗滌”部件CAN命令測試結(jié)果
根據(jù)檢測結(jié)果,進一步開發(fā)“雨刮洗滌”功能模塊,程序運行界面如圖6所示。
圖6 某純電動汽車“雨刮洗滌”部件CAN命令控制模塊
任選一種“雨刮”工作模式,雙擊即可發(fā)送CAN命令控制雨刮工作。實際測試表明,CAN命令發(fā)出后,汽車雨刮即可按照指定模式工作。
1)本文搭建了“上位機PC+USBCAN設(shè)備+汽車網(wǎng)關(guān)控制器”硬件環(huán)境,設(shè)計開發(fā)了一款新能源汽車CAN總線實訓(xùn)教學(xué)軟件平臺,通過該平臺可以接收、分析新能源汽車CAN總線數(shù)據(jù),并向新能源汽車發(fā)送CAN命令,同時以某款純電動汽車為例,開發(fā)了自動空調(diào)、組合開關(guān)和雨刮開關(guān)等部件的CAN命令控制模塊。
2)本文設(shè)計的實訓(xùn)平臺彌補了各高校在用的CAN網(wǎng)絡(luò)實訓(xùn)平臺的不足,演示直觀,控制邏輯清晰,提高學(xué)生崗位應(yīng)用能力效果明顯。
3)通過本文設(shè)計的實訓(xùn)平臺可建立專業(yè)工作坊,為大學(xué)生創(chuàng)新創(chuàng)業(yè)教育提供一個切實可行的途徑。
4)本文設(shè)計的實訓(xùn)平臺后續(xù)可持續(xù)拓展不同車型,以豐富平臺功能,增加實訓(xùn)教學(xué)應(yīng)用場景,模擬企業(yè)真實環(huán)境,提高人才培養(yǎng)質(zhì)量和就業(yè)競爭力。