《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于CAN總線(xiàn)的重型卡車(chē)嵌入式車(chē)載儀表系統(tǒng)設(shè)計(jì)
基于CAN總線(xiàn)的重型卡車(chē)嵌入式車(chē)載儀表系統(tǒng)設(shè)計(jì)
來(lái)源:電子技術(shù)應(yīng)用2010年第12期
王雪梅, 吳曉娜, 倪文波
西南交通大學(xué) 機(jī)械工程學(xué)院, 四川 成都610031
摘要: 設(shè)計(jì)了基于CAN總線(xiàn)的重型卡車(chē)車(chē)載網(wǎng)絡(luò)系統(tǒng)。該網(wǎng)絡(luò)系統(tǒng)由牽引車(chē)網(wǎng)段和拖車(chē)網(wǎng)段組成,中間通過(guò)橋接設(shè)備相互連接。主橋接設(shè)備是整個(gè)網(wǎng)絡(luò)系統(tǒng)的核心,以嵌入式微處理器S3C2410A為核心,完成了該主橋接設(shè)備的硬件結(jié)構(gòu)設(shè)計(jì)和基于Linux的監(jiān)測(cè)、顯示軟件設(shè)計(jì)。
中圖分類(lèi)號(hào):TP216
文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào): 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

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


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

    系統(tǒng)采用SJA1000 CAN控制器和PCA82C250總線(xiàn)收發(fā)器設(shè)計(jì)CAN通信接口。SJA1000是PHILIPS公司推出的一款CAN通信控制器,支持CAN2.0A、2.0B協(xié)議。由于其設(shè)計(jì)是基于早期的80C51單片機(jī)應(yīng)用,內(nèi)嵌鎖存器可以使80C51單片機(jī)無(wú)需任何外接器件就可以直接連接。但是,S3C2410A的地址總線(xiàn)和數(shù)據(jù)總線(xiàn)是分開(kāi)的,不能直接連接SJA1000,所以需要模擬出類(lèi)似80C51單片機(jī)的外部存儲(chǔ)器時(shí)序才能使用。圖3電路中,使用了一個(gè)“或”門(mén)74LS32和一個(gè)“或非”門(mén)74LS02的組合,配合地址總線(xiàn),首先模擬出一個(gè)ALE(地址鎖存信號(hào)),把SJA1000的內(nèi)部寄存器地址寫(xiě)入鎖存器,然后再向SJA1000內(nèi)部寄存器寫(xiě)入數(shù)據(jù)。這樣,使用ARM的兩條外部存儲(chǔ)器訪(fǎng)問(wèn)指令,就可以模擬出SJA1000所需要的時(shí)序了。利用S3C2410A的片選信號(hào)nGCS4和地址總線(xiàn)LADDR2,經(jīng)過(guò)“或非”門(mén)模擬出的SJA1000的物理端口地址為0x20000008,片選信號(hào)nGCS4和地址總線(xiàn)LADDR3,經(jīng)過(guò) “或”門(mén),模擬出的SJA1000的數(shù)據(jù)端口地址為0x20000004。

3 嵌入式車(chē)載儀表軟件設(shè)計(jì)
3.1 嵌入式Linux下CAN設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

    網(wǎng)絡(luò)互連ECU在Linux系統(tǒng)下使用CAN通信技術(shù),因此需設(shè)計(jì)基于Linux的CAN設(shè)備驅(qū)動(dòng)程序。
  設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口。Linux內(nèi)核有三種類(lèi)型的設(shè)備驅(qū)動(dòng)程序:字符設(shè)備驅(qū)動(dòng)程序、塊設(shè)備驅(qū)動(dòng)程序和網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序[4]。SJA1000控制器屬于字符型設(shè)備,CAN設(shè)備驅(qū)動(dòng)程序?qū)嶋H上是Linux內(nèi)核直接對(duì)SJA1000器件的初始化與讀寫(xiě)操作。而這些操作方式其實(shí)就是一些標(biāo)準(zhǔn)的系統(tǒng)調(diào)用,如open()、read()、write()、close()等。定義把系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來(lái)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)file_operations,結(jié)構(gòu)體中的每一個(gè)成員都是一個(gè)函數(shù)指針,實(shí)現(xiàn)了對(duì)于不同操作的函數(shù)跳轉(zhuǎn)功能。具體的聲明如下:
    struct file_operations sja1000_can_fops =
    {
        owner: THIS_MODULE,
         ioctl: can_ioctl,                  //設(shè)置通信參數(shù)
         open: can_open, //完成SJA1000初始化,中斷申請(qǐng),
                                      增加次數(shù)計(jì)數(shù)器的使用次數(shù)
         write: can_write,                       //發(fā)送數(shù)據(jù)
        read:  can_read,                       //接收數(shù)據(jù)
         release : can_release,   //關(guān)閉CAN設(shè)備,關(guān)閉中斷,
                                            減少次數(shù)計(jì)數(shù)器的使用次數(shù)
    };
    驅(qū)動(dòng)程序加載到內(nèi)核中時(shí),首先運(yùn)行驅(qū)動(dòng)程序的初始化函數(shù),然后等待系統(tǒng)調(diào)用在file_operations結(jié)構(gòu)中定義的相關(guān)函數(shù),實(shí)現(xiàn)對(duì)設(shè)備的操作。CAN設(shè)備的初始化函數(shù)負(fù)責(zé)創(chuàng)建CAN設(shè)備文件,注冊(cè)CAN設(shè)備驅(qū)動(dòng)程序。
    對(duì)于字符設(shè)備,Linux通過(guò)調(diào)用register_chrdev()向系統(tǒng)注冊(cè);卸載驅(qū)動(dòng)時(shí),注銷(xiāo)設(shè)備函數(shù)為unregister_chrdev()。設(shè)備驅(qū)動(dòng)程序一般以模塊形式加入內(nèi)核,使用module_init和module_exit宏對(duì)模塊初始化函數(shù)can_init()和模塊清除函數(shù)can_cleanup()進(jìn)行標(biāo)記(通常在文件末尾)。程序如下:
  module_init(can_init);
  module_exit(can_cleanup);
    驅(qū)動(dòng)程序編寫(xiě)完成并編譯通過(guò)后,可使用命令:#insmod can_sja1000_dev.ko進(jìn)行動(dòng)態(tài)加載。加載后,用戶(hù)程序就可以通過(guò)文件直接操作CAN控制器,實(shí)現(xiàn)CAN總線(xiàn)通信。使用驅(qū)動(dòng)程序完成CAN總線(xiàn)數(shù)據(jù)收發(fā)的原理如圖4所示。在系統(tǒng)初始化完畢后,發(fā)送命令幀給監(jiān)測(cè)系統(tǒng)的電子控制單元ECU,通過(guò)系統(tǒng)調(diào)用將命令幀從用戶(hù)空間拷貝到內(nèi)核空間,發(fā)送數(shù)據(jù)處理函數(shù)將內(nèi)核層的命令幀寫(xiě)入SJA1000控制器;當(dāng)電子控制單元ECU采集的卡車(chē)運(yùn)行狀態(tài)數(shù)據(jù)到來(lái)時(shí),中斷被觸發(fā),喚醒處于睡眠狀態(tài)的進(jìn)程,接收數(shù)據(jù)處理函數(shù)將從SJA1000控制器讀取數(shù)據(jù)到接收緩沖區(qū),用戶(hù)通過(guò)系統(tǒng)調(diào)用讀取到完整的數(shù)據(jù)。

3.2 基于MiniGUI的車(chē)載儀表顯示程序設(shè)計(jì)
    MiniGUI是嵌入式圖形用戶(hù)界面系統(tǒng),它通過(guò)窗口系統(tǒng)來(lái)管理應(yīng)用程序在屏幕上的顯示[5]。本系統(tǒng)的人機(jī)界面包含的窗口類(lèi)型有:對(duì)話(huà)框、按鈕、靜態(tài)框、位圖和填充條,使用對(duì)話(huà)框作為主窗口,基于MiniGUI人機(jī)界面的程序流程圖如圖5所示。

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

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