<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于CAN總線(xiàn)的重型卡車(chē)嵌入式車(chē)載儀表系統設計

基于CAN總線(xiàn)的重型卡車(chē)嵌入式車(chē)載儀表系統設計

作者: 時(shí)間:2011-03-13 來(lái)源:網(wǎng)絡(luò ) 收藏

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


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

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

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

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

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

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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>