李繼武
(南京城市職業學院智能工程學院,江蘇 南京 211200)
CAN總線技術課程是新能源汽車專業核心課程,承擔著培養學生適應崗位需求,提高應用能力的重任,而以培養應用能力為核心改革實訓教學,是高職院校人才培養工作內涵式發展的主要努力方向。高職院校新能源汽車專業目前在講授新能源汽車CAN總線技術課程時主要依賴于CAN網絡硬件實訓臺架,這種臺架通常只是將汽車上的相關CAN網絡設備拆解下來,再組裝到一個工作臺上,通上電后可以測量CAN網絡電壓和波形。停留在這個層次上的實訓臺架,只能滿足低層次認知實訓,無法勝任高職教育創新創業的高層次需求[1]。汽車CAN總線技術課程是汽車技術、通信技術和計算機軟硬件技術結合的課程,從崗位人才需求角度考慮,學生不僅需要掌握汽車技術和CAN總線技術,還需要從軟件開發的角度入手,掌握CAN數據報文幀的截獲破解方法、報文幀的收發過程以及控制設備的原理。
本文設計了一款CAN總線教學平臺軟件,它利用USBCAN接口卡接入某純電動汽車的CAN網絡,通過配置濾波器和波特率等參數,可以截獲破解舒適網、動力網等CAN數據。根據破解的CAN數據,平臺實現了自動空調、組合開關、雨刮開關、背光調節等設備的CAN命令控制模塊。實踐表明,利用本平臺軟件開展CAN總線技術課程實訓教學,有效提高了學生的應用能力。作為創新教育和專業教育相結合的產品,以平臺軟件為核心搭建的工作坊為本專業學生開展創新創業實踐提供了重要的機會和可能[2]。
平臺測試用車為2019年上市的某款純電動汽車,該車工信部純電續航里程為400km,電池能量52kWh,前置永磁同步單電機,單速變速器,4.3英寸液晶儀表,自動空調。
平臺測試用新能源汽車CAN總線網絡包含3個通信子網,分別為舒適網125kb/s,動力網250kb/s,ESC網500kb/s。
新能源汽車CAN網絡各子網之間由于通信速率不同,互相之間信息交換需要由網關控制器進行轉發[3]。網關是汽車內部通信的核心,通過它可以實現各條總線上信息的共享、網絡管理和故障診斷功能[4]。各子網同網關控制器的連接關系如圖1所示。

圖1 某款純電動汽車網關控制器電氣連接圖
本平臺軟件因為要對測試用汽車CAN網絡數據進行采樣,所以選取圖1中的①~⑥作為檢測點,并引出采樣接口。
USB接口是一種方便、靈活、簡單且即插即用的通用串行總線,CAN總線可以通過USBCAN接口卡與USB接口連接從而與主機進行高速通信。USBCAN接口卡用于在USB總線和CAN總線之間完成數據的雙向收發功能。
平臺選用的USBCAN接口卡是廣成科技公司生產的USBCAN-IIV502型,該接口卡使用鳳凰端子接線方式,具有兩路CAN總線接口,支持CAN2.0A/CAN2.0B幀格式,通信波特率在5kb/s至1Mb/s之間可自由設置,電源供電采用USB總線方式,CAN總線接口每秒最多接收14000幀數據,支持Windows操作系統。
上位機PC、USBCAN接口卡和網關控制器三者連接關系如圖2所示。從USBCAN接口卡引出的L、H兩根CAN引線可以接到網關控制器的7和8引腳(舒適網)或14和13引腳(ESC網)或9和10引腳(動力網),從而接入汽車CAN網絡。

圖2 硬件連線圖
程序啟動后,首先要調用ECAN鏈接庫中的OpenDevice函數打開USBCAN接口卡。該函數需要指定2個輸入參數:設備類型和設備索引。設備類型設置為4表示USBCANⅡ類型;設備索引設置為0表示只有1個設備。如果有2個設備,可以指定為0或1。
打開USB-CAN接口卡后需要通過INIT_CONFIG結構體初始化濾波器和波特率等參數。平臺采用恩智浦半導體生產的CAN總線控制器,型號為SJA1000,它有兩種工作模式:BasicCAN和PeliCAN。在BasicCAN模式下,SJA1000只支持接收發送標準幀格式報文;在PeliCAN模式下,SJA1000可以接收發送標準幀格式和擴展幀格式兩種報文。通過軟件編程使用SJA1000的驗收濾波器可以濾掉無關報文。SJA1000驗收濾波器包含4個驗收碼寄存器:ACR0、ACR1、ACR2和ACR3;同時它還擁有4個屏蔽碼寄存器:AMR0、AMR1、AMR2和AMR3。驗收碼與屏蔽碼按位對應,如果屏蔽碼某位為1,則報文幀ID對應位不參與屏蔽接收數據;如果屏蔽碼某位為0,則該報文幀ID對應位和驗收碼對應位相同時,表示該位允許接收數據;只有報文幀ID所有位都允許接收數據,SJA1000控制器才會接收該報文,并將其放入接收數據緩沖區[5]。
INIT_CONFIG結構體同濾波器相關的成員有3個:Acc-Code、AccMask和Filter。其中AccCode表示驗收碼,AccMask表示屏蔽碼,Filter表示濾波使能,0表示不使能,1表示使能,只有在使能情況下,才能啟用SJA1000濾波功能。濾波器設計界面如圖3所示。

圖3 濾波器設置
設置通信波特率需要使用SJA1000控制器的2個寄存器:BTR0(總線定時寄存器0)和BTR1(總線定時寄存器1)。BTR0定義了波特率預設值(BRP)和同步跳轉寬度(SJW)的值,如表1所示。

表1 總線定時寄存器0
CAN總線時鐘周期tSCL計算公式如下:

式中:tCLK——SJA1000的晶振周期。考慮到平臺采用的晶振頻率f為16MHz,因此tCLK=1/f=1/16μs。計算樣例數據如下:

BTR1定義了每個位周期的長度、采樣點的位置和在每個采樣點的采樣數目,如表2所示。

表2 總線定時寄存器1
SAM表示采樣數目,0表示單倍采樣;TSEG1和TSEG2決定了每一位的時鐘數目和采樣點位置,關于SYNCSEG、TSEG1和TSEG2,計算公式如下:

根據上述公式計算表2樣例,結果如下:

通過上面計算得到tSYNCSEG、tTSEG1和tTSEG2結果值后,可以計算出SJA1000控制器的位周期和通信波特率,公式如下:

計算SJA1000控制器的位周期和通信波特率,結果如下:

綜上,如果BTR0(總線定時寄存器0)設置為0x03,BTR1(總線定時寄存器1)設置為0x1C,計算出的SJA1000控制器通信波特率為125kb/s,其它常用波特率設置情況如表3所示。

表3 SJA1000控制器常用CAN通信波特率設置
初始化USB-CAN接口卡參數后,需要調用StartCAN函數打開該接口卡的某個CAN通道。如果有多個CAN通道,每次調用都要指定要使用的CAN通道號。
USB-CAN接口卡某個CAN通道打開后,即可開始接收CAN數據。由于接收CAN數據過程是一個耗時操作,可能導致用戶界面停止響應,為了提高程序響應性,使用戶界面及時刷新CAN數據,本平臺設計了一個“后臺耗時+通信更新”方案,即開啟一個后臺獨立線程完成接收CAN數據的耗時操作,然后通過線程間事件通信,完成用戶界面更新操作。
2.4.1 程序核心設計方案
使用BackgroundWorker對象開啟單獨線程完成耗時操作并及時響應更新用戶界面,需要按照下面步驟進行設計。
1)創建一個BackgroundWorker對象。BackgroundWorker對象屬于System.ComponentModel命名空間,它是完成本方案的核心對象。
2)訂閱BackgroundWorker對象的3個事件:DoWork事件、ProgressChanged事件和RunWorkerCompleted事件。
DoWork事件用于執行耗時操作,耗時期間需要不斷輪詢CancellationPending屬性,其值一旦為true,則中止耗時操作。
ProgressChanged事件用于接收耗時操作的計算結果并實時更新用戶界面,事件處理程序的第2個參數,其類型為ProgressChangedEventArgs,它有一個UserState屬性,是后臺線程向本事件傳遞進度數據的媒介。
RunWorkerCompleted事件在后臺耗時操作已完成、被取消或引發異常時觸發。判斷哪個原因觸發了該事件需要根據第2個參數,其類型是RunWorkerCompletedEventArgs,它有Cancelled、Error和Result三個屬性,如果耗時操作中途取消,則Cancelled屬性為true;如果發生異常,則Error屬性指明發生了哪種錯誤;如果既沒中途取消,又沒發生異常,則可通過Result屬性獲得耗時操作結果。
3)啟動后臺線程。調用BackgroundWorker對象的RunWorkerAsync方法將觸發DoWork事件,啟動后臺線程開始執行耗時工作。
2.4.2 程序核心代碼
整個程序最核心部分是后臺線程接收CAN數據的耗時操作,其代碼如下(部分):

上述代碼中,CAN_OBJ作為結構體類型代表幀的數據結構。Transmit發送函數和Receive接收函數使用CAN_OBJ結構體來傳送CAN信息幀。Receive函數從指定的設備CAN通道的緩沖區里讀取數據,函數原型如下:
上述參數中,pReceive參數是一個指針變量,表示用來接收的數據幀數組。根據本方案設計的程序,接收CAN數據界面如圖4所示。

圖4 接收CAN數據界面
發送CAN數據需要調用ECAN鏈接庫中的Transmit函數,其原型如下:
上述參數中,pSend參數是一個指針類型,表示要發送的數據幀數組,Len參數是一個整數類型,表示要發送的數據幀數組的長度。函數成功調用后,返回實際發送的幀數。發送CAN數據的界面如圖5所示。

圖5 發送CAN數據界面
以2019款某純電動汽車的“雨刮洗滌”部件為研究對象,運行本實訓平臺軟件,檢測出CAN命令如表4所示。

表4 某純電動汽車“雨刮洗滌”部件CAN命令測試結果
根據檢測結果,進一步開發“雨刮洗滌”功能模塊,程序運行界面如圖6所示。

圖6 某純電動汽車“雨刮洗滌”部件CAN命令控制模塊
任選一種“雨刮”工作模式,雙擊即可發送CAN命令控制雨刮工作。實際測試表明,CAN命令發出后,汽車雨刮即可按照指定模式工作。
1)本文搭建了“上位機PC+USBCAN設備+汽車網關控制器”硬件環境,設計開發了一款新能源汽車CAN總線實訓教學軟件平臺,通過該平臺可以接收、分析新能源汽車CAN總線數據,并向新能源汽車發送CAN命令,同時以某款純電動汽車為例,開發了自動空調、組合開關和雨刮開關等部件的CAN命令控制模塊。
2)本文設計的實訓平臺彌補了各高校在用的CAN網絡實訓平臺的不足,演示直觀,控制邏輯清晰,提高學生崗位應用能力效果明顯。
3)通過本文設計的實訓平臺可建立專業工作坊,為大學生創新創業教育提供一個切實可行的途徑。
4)本文設計的實訓平臺后續可持續拓展不同車型,以豐富平臺功能,增加實訓教學應用場景,模擬企業真實環境,提高人才培養質量和就業競爭力。