《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于CAN總線的重型卡車嵌入式車載儀表系統(tǒng)設(shè)計
基于CAN總線的重型卡車嵌入式車載儀表系統(tǒng)設(shè)計
來源:電子技術(shù)應(yīng)用2010年第12期
王雪梅,, 吳曉娜, 倪文波
西南交通大學(xué) 機械工程學(xué)院, 四川 成都610031
摘要: 設(shè)計了基于CAN總線的重型卡車車載網(wǎng)絡(luò)系統(tǒng),。該網(wǎng)絡(luò)系統(tǒng)由牽引車網(wǎng)段和拖車網(wǎng)段組成,中間通過橋接設(shè)備相互連接,。主橋接設(shè)備是整個網(wǎng)絡(luò)系統(tǒng)的核心,以嵌入式微處理器S3C2410A為核心,完成了該主橋接設(shè)備的硬件結(jié)構(gòu)設(shè)計和基于Linux的監(jiān)測,、顯示軟件設(shè)計。
中圖分類號:TP216
文獻標識碼:B
文章編號: 0258-7998(2010)12-0082-04
Design of heavy-duty truck embedded instrument system based on CAN bus
WANG Xue Mei, WU Xiao Na, NI Wen Bo
School of Mechanical Engineering,, Southwest Jiaotong University, Chengdu 610031,,China
Abstract: Vehicle network system based on CAN bus was designed. The system consists of tractor segment and trailer segment, between which is bridge devices. Bridge master not only is main control device of tractor, but also is key of connection with trailer. Bridge master adopted S3C2410A embedded microprocessor. On the basis of the design of hardware, measurement software based on Linux embedded operation system is also programmed.
Key words : CAN bus; embedded technique; heavy-duty truck

    重型卡車因其具有運輸量大,、運輸成本低等特點,在工程建設(shè),、貨物運輸,、城市垃圾清運等方面得到了越來越多的應(yīng)用。但近年來重型卡車行車時引起的交通事故頻繁發(fā)生,,給人民生命財產(chǎn)安全造成了巨大損失,。隨著汽車電子技術(shù)的快速發(fā)展,基于CAN總線的重型卡車車載網(wǎng)絡(luò)技術(shù)已成為保證重型卡車可靠,、安全運行的一種有效技術(shù)措施[1],。采用分布式網(wǎng)絡(luò)控制,不僅可以減少線束,,而且能夠提高各電子控制系統(tǒng)的運行可靠性,,實現(xiàn)各子系統(tǒng)之間的資源共享和在線故障診斷。
    目前,,國外基于CAN總線技術(shù)和J1939協(xié)議標準的重型卡車網(wǎng)絡(luò)系統(tǒng)的研究己經(jīng)進入商用化階段,,取得了顯著的社會經(jīng)濟效益[2]。在國內(nèi),,一汽,、上汽和中國重汽等集團公司相繼都在其不同型號的重卡上采用CAN總線技術(shù)。但目前國內(nèi)還沒有自主知識產(chǎn)權(quán)的成熟產(chǎn)品,,基本上還是采用直接引進國外著名汽車電子供應(yīng)商的產(chǎn)品的方式,,很難掌握其關(guān)鍵技術(shù),嚴重阻礙了我國重型卡車車載網(wǎng)絡(luò)技術(shù)的發(fā)展[1],。
    本文設(shè)計了一個基于CAN總線的重型卡車車載儀表系統(tǒng),。該車載儀表系統(tǒng)是整個車載網(wǎng)絡(luò)系統(tǒng)的核心模塊,綜合應(yīng)用了CAN總線技術(shù),、嵌入式技術(shù)和智能儀器等技術(shù),,主要實現(xiàn)車況信息的收集與處理、行駛數(shù)據(jù)記錄,、通信和顯示等功能,,不僅為駕駛員判斷是否發(fā)生故障以及發(fā)生故障的狀況提供了依據(jù),,而且為運輸公司的經(jīng)營和事故處理提供依據(jù)。該研究工作對于我國汽車電子技術(shù),,特別是重型卡車設(shè)備的電子化,、網(wǎng)絡(luò)化發(fā)展,參與國際競爭具有積極的促進作用,。
1 重型卡車車載網(wǎng)絡(luò)系統(tǒng)總體設(shè)計
    重型卡車通常由牽引車和拖車組成,。由于牽引車要掛接一個或多個拖車,并可能需要頻繁地卸載和加掛拖車,,因而應(yīng)在牽引車,、拖車內(nèi)各自采用單獨的網(wǎng)段,由多網(wǎng)段組成的網(wǎng)絡(luò)來支持系統(tǒng)工作,。如圖1所示是本文設(shè)計的基于CAN總線的重型卡車車載網(wǎng)絡(luò)系統(tǒng)的拓撲結(jié)構(gòu),,它由牽引車網(wǎng)段和拖車網(wǎng)段組成。當存在多個網(wǎng)段時,,必須有相應(yīng)的橋接設(shè)備提供從一個網(wǎng)段到另一個網(wǎng)段的消息傳遞功能,。各網(wǎng)段的信息通過橋接設(shè)備進行報文的轉(zhuǎn)發(fā)、過濾,、地址轉(zhuǎn)換和重新打包等,,從而減少每個子網(wǎng)的數(shù)據(jù)信息流量,使每個子網(wǎng)工作更有效,,也提高了整個網(wǎng)絡(luò)的效率,。
    圖1中的網(wǎng)絡(luò)互連ECU即為實現(xiàn)牽引車網(wǎng)段和拖車網(wǎng)段互聯(lián)的橋接設(shè)備,牽引車端的是主橋接設(shè)備(Bridge Master),,拖車端的是從橋接設(shè)備(Bridge Slave),。在牽引車網(wǎng)段和拖車網(wǎng)段內(nèi),各個電子控制單元ECU通過CAN總線與網(wǎng)絡(luò)互連ECU連接,,構(gòu)成主從式分布式系統(tǒng),,網(wǎng)橋設(shè)備作為主節(jié)點,各個電子控制單元ECU作為從節(jié)點,。主節(jié)點向從節(jié)點發(fā)出命令幀,,從節(jié)點接收到命令幀后向主節(jié)點發(fā)送響應(yīng)幀,從而實現(xiàn)數(shù)據(jù)交換,。網(wǎng)橋具有兩個CAN通信端口,,一方面可以連接同一網(wǎng)段中各個電子控制單元ECU,另一方面可以實現(xiàn)牽引車和拖車之間的報文轉(zhuǎ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)絡(luò)處于等待狀態(tài),,一旦拖車系統(tǒng)被掛接上,便開始對其進行輪詢檢測,。


2 嵌入式車載儀表硬件結(jié)構(gòu)設(shè)計
     位于牽引車端的網(wǎng)絡(luò)互聯(lián)ECU,,即主橋接設(shè)備是整個網(wǎng)絡(luò)系統(tǒng)的核心。它不僅是牽引車的主控設(shè)備,,也是連接后面的拖車系統(tǒng)的關(guān)鍵設(shè)備,,整個網(wǎng)絡(luò)系統(tǒng)的信息在此匯集、處理,、存儲和顯示,,據(jù)此可以判斷發(fā)動機的燃油液位是否過低,、發(fā)動機冷卻液溫度是否過高,、發(fā)動機機油壓力是否過低以及車燈是否發(fā)生故障,將這些故障信息以圖形的方式顯示出來,,使駕駛員能夠隨時全面地監(jiān)測卡車運行狀態(tài),。
    網(wǎng)絡(luò)互連ECU采用Samsung公司的S3C2410作為微處理器。S3C2410是一款低價格,、低功耗,、高性能的16/32 bit且具有ARM920T內(nèi)核的微處理器。主頻203 MHz,,處理能力完全滿足該系統(tǒng)的需要,,并且能夠方便地移植Linux操作系統(tǒng),為設(shè)計具有良好人機交互界面的車載儀表系統(tǒng)創(chuàng)造了條件,。
    整個硬件電路主要包括電源電路,、復(fù)位電路、時鐘電路,、存儲器擴展電路,、液晶顯示電路和兩路CAN通信接口電路,其基本結(jié)構(gòu)如圖2所示,。

    系統(tǒng)采用SJA1000 CAN控制器和PCA82C250總線收發(fā)器設(shè)計CAN通信接口,。SJA1000是PHILIPS公司推出的一款CAN通信控制器,支持CAN2.0A,、2.0B協(xié)議,。由于其設(shè)計是基于早期的80C51單片機應(yīng)用,內(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 嵌入式車載儀表軟件設(shè)計
3.1 嵌入式Linux下CAN設(shè)備驅(qū)動程序開發(fā)

    網(wǎng)絡(luò)互連ECU在Linux系統(tǒng)下使用CAN通信技術(shù),,因此需設(shè)計基于Linux的CAN設(shè)備驅(qū)動程序,。
  設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核和機器硬件之間的接口。Linux內(nèi)核有三種類型的設(shè)備驅(qū)動程序:字符設(shè)備驅(qū)動程序,、塊設(shè)備驅(qū)動程序和網(wǎng)絡(luò)設(shè)備驅(qū)動程序[4],。SJA1000控制器屬于字符型設(shè)備,CAN設(shè)備驅(qū)動程序?qū)嶋H上是Linux內(nèi)核直接對SJA1000器件的初始化與讀寫操作,。而這些操作方式其實就是一些標準的系統(tǒng)調(diào)用,,如open()、read(),、write(),、close()等。定義把系統(tǒng)調(diào)用和驅(qū)動程序關(guān)聯(lián)起來的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)file_operations,,結(jié)構(gòu)體中的每一個成員都是一個函數(shù)指針,,實現(xiàn)了對于不同操作的函數(shù)跳轉(zhuǎn)功能。具體的聲明如下:
    struct file_operations sja1000_can_fops =
    {
        owner: THIS_MODULE,
         ioctl: can_ioctl,                  //設(shè)置通信參數(shù)
         open: can_open, //完成SJA1000初始化,中斷申請,,
                                      增加次數(shù)計數(shù)器的使用次數(shù)
         write: can_write,                       //發(fā)送數(shù)據(jù)
        read:  can_read,                       //接收數(shù)據(jù)
         release : can_release,   //關(guān)閉CAN設(shè)備,,關(guān)閉中斷,
                                            減少次數(shù)計數(shù)器的使用次數(shù)
    };
    驅(qū)動程序加載到內(nèi)核中時,首先運行驅(qū)動程序的初始化函數(shù),,然后等待系統(tǒng)調(diào)用在file_operations結(jié)構(gòu)中定義的相關(guān)函數(shù),,實現(xiàn)對設(shè)備的操作,。CAN設(shè)備的初始化函數(shù)負責(zé)創(chuàng)建CAN設(shè)備文件,注冊CAN設(shè)備驅(qū)動程序,。
    對于字符設(shè)備,,Linux通過調(diào)用register_chrdev()向系統(tǒng)注冊;卸載驅(qū)動時,,注銷設(shè)備函數(shù)為unregister_chrdev(),。設(shè)備驅(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的車載儀表顯示程序設(shè)計
    MiniGUI是嵌入式圖形用戶界面系統(tǒng),,它通過窗口系統(tǒng)來管理應(yīng)用程序在屏幕上的顯示[5]。本系統(tǒng)的人機界面包含的窗口類型有:對話框,、按鈕,、靜態(tài)框、位圖和填充條,,使用對話框作為主窗口,,基于MiniGUI人機界面的程序流程圖如圖5所示。

    本系統(tǒng)的圖形用戶界面主要顯示車速,、轉(zhuǎn)速,、水溫、油壓,、燃油量,、車內(nèi)溫度,冷卻水溫度過低、油壓過低,、燃油過低報警信號和大燈,、尾燈、左右轉(zhuǎn)向燈,、制動燈等燈光信號,。使用MiniGUI的按鈕通知消息MSG_COMMOND,該消息是在狀態(tài)監(jiān)測按鈕按下后發(fā)送到窗口過程函數(shù),,執(zhí)行CAN通信子程序,,接收各電子控制單元ECU上傳的卡車運行狀態(tài)信息,實時地顯示在液晶屏上,,并以不同的顏色表示報警信號和車燈信號,,使駕駛員能夠隨時全面地監(jiān)測卡車的運行狀態(tài),提高卡車運行的安全性,。
    本文針對我國重型卡車的發(fā)展現(xiàn)狀,,在完成重型卡車車載網(wǎng)絡(luò)系統(tǒng)總體結(jié)構(gòu)設(shè)計的基礎(chǔ)上,對基于CAN總線的嵌入式車載儀表系統(tǒng)的軟硬件設(shè)計方法進行了詳細闡述,。該系統(tǒng)能對重型卡車的車速,、發(fā)動機轉(zhuǎn)速、水溫,、油溫,、油壓、燃油量以及車燈開關(guān)量等狀態(tài)信息進行實時監(jiān)測,,及時有效地發(fā)現(xiàn)和識別卡車運行過程中發(fā)生的各種故障,,對于保證卡車安全運行起到了重要作用。測試表明,,本文所設(shè)計的重型卡車車載儀表系統(tǒng)工作性能穩(wěn)定,、可靠,具有較好的人機界面,。
參考文獻
[1] 位堂杰,,劉金朝.HOWO重型載貨汽車的車載網(wǎng)絡(luò)系統(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)場總線技術(shù)及其應(yīng)用(第2版)[M].北京:清華大學(xué)出版社,,2008.
[4] 李俊.嵌入式Linux設(shè)備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,,2008.
[5] 周立功.ARM嵌入式MiniGUI初步與應(yīng)用開發(fā)范例[M]. 北京:北京航空航天大學(xué)出版社,2005.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。