<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 汽車電子 > 設(shè)計應(yīng)用 > 基于CAN總線的多ECU通信平臺設(shè)計

          基于CAN總線的多ECU通信平臺設(shè)計

          ——
          作者: 時間:2007-12-26 來源: 收藏

            引言

            隨著集成電路和單片機在汽車上的廣泛應(yīng)用,現(xiàn)代汽車上的電子控制器的數(shù)量越來越多,常見的有發(fā)動機的電子燃油噴射裝置、防抱死制動裝置(ABS)、安全氣囊裝置、電動門窗裝置、主動懸架等。電控系統(tǒng)的增加雖然提高了轎車的動力性、經(jīng)濟性和舒適性,但隨之增加的復(fù)雜電路也降低了汽車的可靠性,增加了維修的難度。從布線角度分析,傳統(tǒng)的電子氣系統(tǒng)大多采用點對點的單一通信方式,相互之間少有聯(lián)系,這樣必然造成寵大的布線系統(tǒng)。因此,一種新的概念——汽車上電子控制器局域網(wǎng)絡(luò),也就應(yīng)運而生。為使不同廠家生產(chǎn)的零部件能在同一輛汽車上協(xié)調(diào)工作,必須制定標準。按照ISO有關(guān)標準,的拓撲結(jié)構(gòu)為式,因此稱為。 CAN被設(shè)計作為汽車環(huán)境中的微控制器通信,在車載各電子控制裝置ECN之間交換信息,在車載各電子控制裝置ECN之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。

            控制器局域網(wǎng)CAN(Controller Area Network)是一種多主方式的串行通信總線,基本設(shè)計規(guī)范要求有高的位速率,高抗電磁干擾性,而且能夠檢測出產(chǎn)生的任何錯誤。CAN在汽車上的應(yīng)用,具有很多行業(yè)標準或者是國際標準,比如國際標準化組織(ISO)的ISO11992、ISO11783以及汽車工程協(xié)會(Society of Automotive Engigeers)的SAE J1939。CAN總線已經(jīng)作為汽車的一種標準設(shè)備列入汽車的整車設(shè)計中。

            1 CAN總線特點及其通信協(xié)議

            1.1 CAN總線簡介

            CAN通信協(xié)議規(guī)定了4種不同的幀格式,即數(shù)據(jù)幀、遠程幀、錯誤幀和超載幀?;谝韵聨讞l基本規(guī)則進行通信協(xié)調(diào):總線訪問、仲裁、編碼/解碼、出錯標注和超裁標注。CAN 遵從OSI模型。按照OSI基準模型只有三層:物理層、數(shù)據(jù)鏈路層和哀告層,但應(yīng)用層尚需用戶自己定義。CAN總線作為一種有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò),應(yīng)用范圍遍及從高速網(wǎng)絡(luò)到低成本的多線路網(wǎng)絡(luò)。如:CAN在汽車中的發(fā)動機控制部件、ABS、抗滑系統(tǒng)等應(yīng)用中的位速率可高達1Mbps。同時,它可以廉價地用于交通運載工具電器系統(tǒng)中,例如電氣窗口、燈光聚束、座椅調(diào)節(jié)等,以替代所需要的硬件連接。其傳輸介制裁為雙絞線,通信速率最高可達1Mbps/40m,直接傳輸距離最遠可達 10km/5kbps,掛接設(shè)備數(shù)最多可達110個。CAN為多主工作方式,通信方式靈活,無需站地址等節(jié)點信息,采用非破壞性總線仲裁技術(shù),滿足實時要求。另外,CAN采用短幀結(jié)構(gòu)傳輸信號,傳輸時間短,具有較強的抗干擾能力。

            

          can總線

            CAN總線與其它通信協(xié)議的不同之處主要有兩方面:一是報文傳送不包含目標地址,它是以全網(wǎng)廣播為基礎(chǔ),各接收站根據(jù)報文中反映數(shù)據(jù)性質(zhì)的標識符過濾報文,其特點是可在線上網(wǎng)下網(wǎng)、即插即用和多站接收;另外一個方面就是特別強化了數(shù)據(jù)安全性,滿足控制系統(tǒng)及其它較高數(shù)據(jù)要求系統(tǒng)的需求。

            1.2 J1939通信協(xié)議

            J1939協(xié)議是在CAN總線通信協(xié)議2.0B(29標識符)之上具體實現(xiàn)了應(yīng)用層,是SAE為重載卡車和客車制定的通信協(xié)議;以CAN 2.0B為基礎(chǔ),物理層標準與ISO11898規(guī)范兼容并采用符合該規(guī)范的CAN控制器及收發(fā)器。J1939協(xié)議將CAN標識符劃分為如下幾個部分:優(yōu)先級(P)、數(shù)據(jù)頁(PGN)、協(xié)議數(shù)據(jù)單元(PDU)格式、PDU特定域(PS)和源地址(SA)。J1939/71應(yīng)用層文檔定義了車輛控制的各種參數(shù)及命令的PGN。

            

          J1939 的報文格式

            由此可見,J1939與CAN通信協(xié)議的區(qū)別在于29位標識符(ID),數(shù)據(jù)場相同。J1939將CAN的29位標識符(或稱辨識別)進行了詳細的物理定義。通過PDU將CAN標準格式封裝為J1939協(xié)議格式。PDU信息幀又由優(yōu)先權(quán)P、保留位R、數(shù)據(jù)頁DP、協(xié)議數(shù)據(jù)單元PF、擴展單元PS、源地址SA和數(shù)據(jù)場DATA七個部分組成,即CAN的29位標識符加上數(shù)據(jù)。

          {{分頁}}

            2 總體設(shè)計

            2.1 汽車電控網(wǎng)絡(luò)結(jié)構(gòu)

            汽車內(nèi)之間的數(shù)據(jù)傳輸特征主要差別在于數(shù)據(jù)傳輸頻率,例如發(fā)動機高速運行時,進行的是高頻數(shù)據(jù)傳輸,每隔幾ms就傳輸1次;而在低速運行時,進行的是低頻數(shù)據(jù)傳輸,每隔幾十ms乃至幾百ms才傳輸1次。然而為了滿足實時性要求,就要求汽車內(nèi)每個控制單元盡可能實現(xiàn)汽車公共數(shù)據(jù)共享,但又由于每個控制單元對實時性的要求是因為數(shù)據(jù)的更新速率和控制周期不同而不同的。這就要求其數(shù)據(jù)交換網(wǎng)是基于優(yōu)先權(quán)競爭的模式,且本身具有較高的通信速率。CAN總線正是為滿足這些要求而設(shè)計的。CAN已有國際標準,即高速場合的ISO11898和用于低速場合的ISO11519-3。

            

          汽車總線電控網(wǎng)絡(luò)

            通常的汽車網(wǎng)絡(luò)結(jié)構(gòu)采用多條不同速率的總線分別連接不同類型的節(jié)點,并使用網(wǎng)關(guān)服務(wù)器來實現(xiàn)整車的信息共享和網(wǎng)絡(luò)管理。若按照美國汽車工程師協(xié)會(SAE)車輛網(wǎng)絡(luò)委員會標準SAE J2057,將汽車數(shù)據(jù)傳輸網(wǎng)劃分為三類。這里可用圖1簡單說明。其中網(wǎng)關(guān)是汽車內(nèi)部通信的核心,通過它可以實現(xiàn)在CAN總線上信息的共享以及實現(xiàn)汽車內(nèi)部的網(wǎng)絡(luò)管理和故障診斷功能;將各個數(shù)據(jù)總線上的信息反饋到儀表板總成上的顯示屏上,駕駛者通過儀表板上的信息就可以知道各個電控裝置是否正常工作了。

            2.2 通信平臺硬件設(shè)計

            在設(shè)計中,主控芯片CPU選用51系列的單片機。CAN通信控制器執(zhí)行完整的CAN協(xié)議,完成通信功能,包括信息緩沖和接收濾波,故CAN控制器選用 Philips的SJA1000。選用PCA82C250作為CAN總線的收發(fā)器,PCA82C250是CAN協(xié)議控制器和物理總線之間的接口,在運行環(huán)境中具有抗瞬變、抗射頻和抗電磁干擾性能,內(nèi)部的限流電路具有電路短路時對傳送輸出級進行保護的功能。傳輸介質(zhì)采用屏蔽電費,在測控節(jié)點與介質(zhì)之間加入光耦電路,以提高總線接口的抗干擾能力。圖2為通信平臺硬件框圖,圖3為控制器與收發(fā)器連接接口。

          {{分頁}}

            

          通信平臺硬件結(jié)構(gòu)框圖

            為進一步提高系統(tǒng)的可靠性,需要考慮到系統(tǒng)的冗余設(shè)計。由于汽車環(huán)境惡劣且干擾 因素較多,在CAN_H和CAN_L信號線與地線之間分別并聯(lián)了兩個電容,濾去噪聲,使信號傳輸平穩(wěn)。雙屏蔽電費可設(shè)兩套,在兩套介質(zhì)上同時進行信息傳輸。接收方只用一個介質(zhì),在冗余和非冗余段的連接臨界點進行總線切換。

            

          SJA1000與PCA82C250的連接
          {{分頁}}

            2.3 軟件設(shè)計

            簡單地說,本通信平臺所要實現(xiàn)的功能就是,使各個節(jié)點()通過CAN總線實現(xiàn)相互通信,發(fā)送接收命令、信息等,并實現(xiàn)數(shù)據(jù)的共享,從而提高各自的控制性能和運行效率。汽車上CAN數(shù)據(jù)總線的每個節(jié)點()都有自己的地址和名稱相對應(yīng)。ECU地址指出了數(shù)據(jù)傳送的目的地,而其名稱則標識了ECN的基本功能。節(jié)點連續(xù)監(jiān)視著總線上發(fā)出的各種數(shù)據(jù)。當(dāng)所收到的數(shù)據(jù)地址值與自身地址吻合時,該節(jié)點就獲得令牌。在通信規(guī)約中,唯一獲得令牌的該節(jié)點有權(quán)發(fā)送數(shù)據(jù),以防止兩個或兩個以上的節(jié)點同時傳輸數(shù)據(jù)引起混亂。同時每一個節(jié)點都有機會得到令牌,完成數(shù)據(jù)傳輸。

            本軟件設(shè)計是基于Keil C語言編寫的。程序主要由主模塊、中斷處理模塊及數(shù)據(jù)通信模塊等組成,如圖4所示。

            

          軟件設(shè)計流程

            主模塊完成對硬件初始化、寄存器的配置、SJA1000初始化等;中斷處理模塊包括數(shù)據(jù)中斷的發(fā)送、接收、錯誤處理及報警處理等;數(shù)據(jù)通信模塊完成數(shù)據(jù)的請求、發(fā)送、接收等。

            當(dāng)一個節(jié)點A發(fā)送數(shù)據(jù)請求報文(遠程幀),向另外一個節(jié)點B請求報文(應(yīng)答幀)時,節(jié)點B接收到請求后,經(jīng)過判別,而后發(fā)送數(shù)據(jù)(應(yīng)答幀)。由于數(shù)據(jù)請求沒有數(shù)據(jù)場,所以相對數(shù)據(jù)幀長度小很多。經(jīng)分析驗證之后與節(jié)點B收到的數(shù)據(jù)相同,請求數(shù)據(jù)程序得到驗證。

            結(jié)語

            在現(xiàn)代汽車的設(shè)計中,CAN總線已經(jīng)成為構(gòu)建汽車網(wǎng)絡(luò)的一種趨勢;而汽車網(wǎng)絡(luò)作為直接與汽車內(nèi)部各個ECU連接并負責(zé)命令的傳遞、數(shù)據(jù)的發(fā)送及共享,其可靠性和穩(wěn)定性與整車的性能緊密相關(guān)。本文的設(shè)計開發(fā)是在基于試驗條件下搭建的仿真平臺,節(jié)點之間的通信是通過對等的CAN通信節(jié)點進行的。試驗表明其運行性能穩(wěn)定可靠,但實用化仍需要進一步的研究和改進,且程序的通信處理能力、糾錯和容錯能力有待進一步的提高。

          數(shù)字通信相關(guān)文章:數(shù)字通信原理


          通信相關(guān)文章:通信原理


          雙絞線傳輸器相關(guān)文章:雙絞線傳輸器原理


          關(guān)鍵詞: CAN 總線 ECU 通信基礎(chǔ)

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();