文獻標識碼:B
文章編號: 0258-7998(2010)12-0082-04
重型卡車因其具有運輸量大、運輸成本低等特點,,在工程建設,、貨物運輸、城市垃圾清運等方面得到了越來越多的應用,。但近年來重型卡車行車時引起的交通事故頻繁發(fā)生,,給人民生命財產(chǎn)安全造成了巨大損失。隨著汽車電子技術的快速發(fā)展,,基于CAN總線的重型卡車車載網(wǎng)絡技術已成為保證重型卡車可靠,、安全運行的一種有效技術措施[1]。采用分布式網(wǎng)絡控制,不僅可以減少線束,,而且能夠提高各電子控制系統(tǒng)的運行可靠性,,實現(xiàn)各子系統(tǒng)之間的資源共享和在線故障診斷。
目前,,國外基于CAN總線技術和J1939協(xié)議標準的重型卡車網(wǎng)絡系統(tǒng)的研究己經(jīng)進入商用化階段,,取得了顯著的社會經(jīng)濟效益[2]。在國內(nèi),,一汽,、上汽和中國重汽等集團公司相繼都在其不同型號的重卡上采用CAN總線技術。但目前國內(nèi)還沒有自主知識產(chǎn)權的成熟產(chǎn)品,,基本上還是采用直接引進國外著名汽車電子供應商的產(chǎn)品的方式,,很難掌握其關鍵技術,嚴重阻礙了我國重型卡車車載網(wǎng)絡技術的發(fā)展[1],。
本文設計了一個基于CAN總線的重型卡車車載儀表系統(tǒng),。該車載儀表系統(tǒng)是整個車載網(wǎng)絡系統(tǒng)的核心模塊,綜合應用了CAN總線技術,、嵌入式技術和智能儀器等技術,,主要實現(xiàn)車況信息的收集與處理、行駛數(shù)據(jù)記錄,、通信和顯示等功能,,不僅為駕駛員判斷是否發(fā)生故障以及發(fā)生故障的狀況提供了依據(jù),而且為運輸公司的經(jīng)營和事故處理提供依據(jù),。該研究工作對于我國汽車電子技術,,特別是重型卡車設備的電子化、網(wǎng)絡化發(fā)展,,參與國際競爭具有積極的促進作用,。
1 重型卡車車載網(wǎng)絡系統(tǒng)總體設計
重型卡車通常由牽引車和拖車組成。由于牽引車要掛接一個或多個拖車,,并可能需要頻繁地卸載和加掛拖車,,因而應在牽引車、拖車內(nèi)各自采用單獨的網(wǎng)段,,由多網(wǎng)段組成的網(wǎng)絡來支持系統(tǒng)工作,。如圖1所示是本文設計的基于CAN總線的重型卡車車載網(wǎng)絡系統(tǒng)的拓撲結構,它由牽引車網(wǎng)段和拖車網(wǎng)段組成,。當存在多個網(wǎng)段時,,必須有相應的橋接設備提供從一個網(wǎng)段到另一個網(wǎng)段的消息傳遞功能。各網(wǎng)段的信息通過橋接設備進行報文的轉發(fā),、過濾,、地址轉換和重新打包等,從而減少每個子網(wǎng)的數(shù)據(jù)信息流量,使每個子網(wǎng)工作更有效,,也提高了整個網(wǎng)絡的效率,。
圖1中的網(wǎng)絡互連ECU即為實現(xiàn)牽引車網(wǎng)段和拖車網(wǎng)段互聯(lián)的橋接設備,牽引車端的是主橋接設備(Bridge Master),,拖車端的是從橋接設備(Bridge Slave)。在牽引車網(wǎng)段和拖車網(wǎng)段內(nèi),,各個電子控制單元ECU通過CAN總線與網(wǎng)絡互連ECU連接,,構成主從式分布式系統(tǒng),網(wǎng)橋設備作為主節(jié)點,,各個電子控制單元ECU作為從節(jié)點,。主節(jié)點向從節(jié)點發(fā)出命令幀,從節(jié)點接收到命令幀后向主節(jié)點發(fā)送響應幀,,從而實現(xiàn)數(shù)據(jù)交換,。網(wǎng)橋具有兩個CAN通信端口,一方面可以連接同一網(wǎng)段中各個電子控制單元ECU,,另一方面可以實現(xiàn)牽引車和拖車之間的報文轉發(fā),。牽引車的網(wǎng)橋周期地輪詢拖車系統(tǒng)中的網(wǎng)橋,當拖車網(wǎng)橋接收到輪詢消息時,,開始對其網(wǎng)段中的各個電子控制單元ECU進行監(jiān)測,,接收電子控制單元ECU發(fā)送的報文信息,并將拖車網(wǎng)段中生成的報文傳到牽引車網(wǎng)橋,。如果拖車系統(tǒng)已經(jīng)卸載,,牽引車的網(wǎng)段仍然能正常工作,連接拖車網(wǎng)橋的CAN網(wǎng)絡處于等待狀態(tài),,一旦拖車系統(tǒng)被掛接上,,便開始對其進行輪詢檢測。
2 嵌入式車載儀表硬件結構設計
位于牽引車端的網(wǎng)絡互聯(lián)ECU,,即主橋接設備是整個網(wǎng)絡系統(tǒng)的核心,。它不僅是牽引車的主控設備,也是連接后面的拖車系統(tǒng)的關鍵設備,,整個網(wǎng)絡系統(tǒng)的信息在此匯集,、處理、存儲和顯示,,據(jù)此可以判斷發(fā)動機的燃油液位是否過低,、發(fā)動機冷卻液溫度是否過高、發(fā)動機機油壓力是否過低以及車燈是否發(fā)生故障,,將這些故障信息以圖形的方式顯示出來,,使駕駛員能夠隨時全面地監(jiān)測卡車運行狀態(tài)。
網(wǎng)絡互連ECU采用Samsung公司的S3C2410作為微處理器。S3C2410是一款低價格,、低功耗,、高性能的16/32 bit且具有ARM920T內(nèi)核的微處理器。主頻203 MHz,,處理能力完全滿足該系統(tǒng)的需要,,并且能夠方便地移植Linux操作系統(tǒng),為設計具有良好人機交互界面的車載儀表系統(tǒng)創(chuàng)造了條件,。
整個硬件電路主要包括電源電路,、復位電路、時鐘電路,、存儲器擴展電路,、液晶顯示電路和兩路CAN通信接口電路,其基本結構如圖2所示,。
系統(tǒng)采用SJA1000 CAN控制器和PCA82C250總線收發(fā)器設計CAN通信接口,。SJA1000是PHILIPS公司推出的一款CAN通信控制器,支持CAN2.0A,、2.0B協(xié)議,。由于其設計是基于早期的80C51單片機應用,內(nèi)嵌鎖存器可以使80C51單片機無需任何外接器件就可以直接連接,。但是,,S3C2410A的地址總線和數(shù)據(jù)總線是分開的,不能直接連接SJA1000,,所以需要模擬出類似80C51單片機的外部存儲器時序才能使用,。圖3電路中,使用了一個“或”門74LS32和一個“或非”門74LS02的組合,,配合地址總線,,首先模擬出一個ALE(地址鎖存信號),把SJA1000的內(nèi)部寄存器地址寫入鎖存器,,然后再向SJA1000內(nèi)部寄存器寫入數(shù)據(jù),。這樣,使用ARM的兩條外部存儲器訪問指令,,就可以模擬出SJA1000所需要的時序了,。利用S3C2410A的片選信號nGCS4和地址總線LADDR2,經(jīng)過“或非”門模擬出的SJA1000的物理端口地址為0x20000008,,片選信號nGCS4和地址總線LADDR3,,經(jīng)過 “或”門,模擬出的SJA1000的數(shù)據(jù)端口地址為0x20000004,。
3 嵌入式車載儀表軟件設計
3.1 嵌入式Linux下CAN設備驅(qū)動程序開發(fā)
網(wǎng)絡互連ECU在Linux系統(tǒng)下使用CAN通信技術,,因此需設計基于Linux的CAN設備驅(qū)動程序,。
設備驅(qū)動程序是操作系統(tǒng)內(nèi)核和機器硬件之間的接口。Linux內(nèi)核有三種類型的設備驅(qū)動程序:字符設備驅(qū)動程序,、塊設備驅(qū)動程序和網(wǎng)絡設備驅(qū)動程序[4],。SJA1000控制器屬于字符型設備,CAN設備驅(qū)動程序?qū)嶋H上是Linux內(nèi)核直接對SJA1000器件的初始化與讀寫操作,。而這些操作方式其實就是一些標準的系統(tǒng)調(diào)用,,如open()、read(),、write(),、close()等。定義把系統(tǒng)調(diào)用和驅(qū)動程序關聯(lián)起來的關鍵數(shù)據(jù)結構file_operations,,結構體中的每一個成員都是一個函數(shù)指針,實現(xiàn)了對于不同操作的函數(shù)跳轉功能,。具體的聲明如下:
struct file_operations sja1000_can_fops =
{
owner: THIS_MODULE,
ioctl: can_ioctl, //設置通信參數(shù)
open: can_open, //完成SJA1000初始化,中斷申請,,
增加次數(shù)計數(shù)器的使用次數(shù)
write: can_write, //發(fā)送數(shù)據(jù)
read: can_read, //接收數(shù)據(jù)
release : can_release, //關閉CAN設備,關閉中斷,
減少次數(shù)計數(shù)器的使用次數(shù)
};
驅(qū)動程序加載到內(nèi)核中時,,首先運行驅(qū)動程序的初始化函數(shù),,然后等待系統(tǒng)調(diào)用在file_operations結構中定義的相關函數(shù),實現(xiàn)對設備的操作,。CAN設備的初始化函數(shù)負責創(chuàng)建CAN設備文件,,注冊CAN設備驅(qū)動程序。
對于字符設備,,Linux通過調(diào)用register_chrdev()向系統(tǒng)注冊,;卸載驅(qū)動時,注銷設備函數(shù)為unregister_chrdev(),。設備驅(qū)動程序一般以模塊形式加入內(nèi)核,,使用module_init和module_exit宏對模塊初始化函數(shù)can_init()和模塊清除函數(shù)can_cleanup()進行標記(通常在文件末尾)。程序如下:
module_init(can_init),;
module_exit(can_cleanup),;
驅(qū)動程序編寫完成并編譯通過后,可使用命令:#insmod can_sja1000_dev.ko進行動態(tài)加載,。加載后,,用戶程序就可以通過文件直接操作CAN控制器,實現(xiàn)CAN總線通信,。使用驅(qū)動程序完成CAN總線數(shù)據(jù)收發(fā)的原理如圖4所示,。在系統(tǒng)初始化完畢后,發(fā)送命令幀給監(jiān)測系統(tǒng)的電子控制單元ECU,,通過系統(tǒng)調(diào)用將命令幀從用戶空間拷貝到內(nèi)核空間,,發(fā)送數(shù)據(jù)處理函數(shù)將內(nèi)核層的命令幀寫入SJA1000控制器,;當電子控制單元ECU采集的卡車運行狀態(tài)數(shù)據(jù)到來時,中斷被觸發(fā),,喚醒處于睡眠狀態(tài)的進程,,接收數(shù)據(jù)處理函數(shù)將從SJA1000控制器讀取數(shù)據(jù)到接收緩沖區(qū),用戶通過系統(tǒng)調(diào)用讀取到完整的數(shù)據(jù),。
3.2 基于MiniGUI的車載儀表顯示程序設計
MiniGUI是嵌入式圖形用戶界面系統(tǒng),,它通過窗口系統(tǒng)來管理應用程序在屏幕上的顯示[5]。本系統(tǒng)的人機界面包含的窗口類型有:對話框,、按鈕,、靜態(tài)框、位圖和填充條,,使用對話框作為主窗口,,基于MiniGUI人機界面的程序流程圖如圖5所示。
本系統(tǒng)的圖形用戶界面主要顯示車速,、轉速,、水溫、油壓,、燃油量,、車內(nèi)溫度,冷卻水溫度過低,、油壓過低,、燃油過低報警信號和大燈、尾燈,、左右轉向燈,、制動燈等燈光信號。使用MiniGUI的按鈕通知消息MSG_COMMOND,,該消息是在狀態(tài)監(jiān)測按鈕按下后發(fā)送到窗口過程函數(shù),,執(zhí)行CAN通信子程序,接收各電子控制單元ECU上傳的卡車運行狀態(tài)信息,,實時地顯示在液晶屏上,,并以不同的顏色表示報警信號和車燈信號,使駕駛員能夠隨時全面地監(jiān)測卡車的運行狀態(tài),,提高卡車運行的安全性,。
本文針對我國重型卡車的發(fā)展現(xiàn)狀,在完成重型卡車車載網(wǎng)絡系統(tǒng)總體結構設計的基礎上,,對基于CAN總線的嵌入式車載儀表系統(tǒng)的軟硬件設計方法進行了詳細闡述,。該系統(tǒng)能對重型卡車的車速、發(fā)動機轉速,、水溫,、油溫,、油壓、燃油量以及車燈開關量等狀態(tài)信息進行實時監(jiān)測,,及時有效地發(fā)現(xiàn)和識別卡車運行過程中發(fā)生的各種故障,,對于保證卡車安全運行起到了重要作用。測試表明,,本文所設計的重型卡車車載儀表系統(tǒng)工作性能穩(wěn)定,、可靠,具有較好的人機界面,。
參考文獻
[1] 位堂杰,,劉金朝.HOWO重型載貨汽車的車載網(wǎng)絡系統(tǒng)[J]. 汽車電器,2009(1):1-3.
[2] FELLMETH P, L?魻FFLER T.Networking heavy-duty vehicles based on SAE J1939[J]. Vector Corporation,2008.
[3] 陽憲惠. 現(xiàn)場總線技術及其應用(第2版)[M].北京:清華大學出版社,,2008.
[4] 李俊.嵌入式Linux設備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,,2008.
[5] 周立功.ARM嵌入式MiniGUI初步與應用開發(fā)范例[M]. 北京:北京航空航天大學出版社,2005.