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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 雙冗余CAN總線模塊的設計與實現(xiàn)

          雙冗余CAN總線模塊的設計與實現(xiàn)

          作者: 時間:2013-06-27 來源:網(wǎng)絡 收藏

          摘要:為滿足惡劣環(huán)境下計算機系統(tǒng)的高可靠性需求,將冗余技術結合到的硬件與軟件開發(fā)中,介紹其總體方案。硬件及軟件方法,重點描述了在V×Works系統(tǒng)下的驅(qū)動軟件,給出了部分細節(jié)及流程。測試結果表明,此可成功冗余故障情況下的冗余切換,提高了設備可靠性。

          本文引用地址:http://www.ex-cimer.com/article/148011.htm

          引言冗余技術有兩種方式:工作冗余和后備冗余。工作冗余是對關鍵設備以雙重或三重的原則來重復配置,這些設備同時處于工作運行狀態(tài),工作過程中若某一臺設備出現(xiàn)故障,它會自動脫離系統(tǒng),但并不影響系統(tǒng)的正常工作。后備冗余方式是使一臺設備投入運行,另一臺冗余設備處于熱備用狀態(tài),但不投入運行,在線運行設備一旦出現(xiàn)故障,后備設備立即投入運行。常用的冗余系統(tǒng)按其結構可分為并聯(lián)系統(tǒng)。備用系統(tǒng)和表決系統(tǒng)3種。最簡單的冗余設計是并聯(lián)裝置,其它方法還有串并聯(lián)或并串聯(lián)混合裝置和多數(shù)表決裝置等。

          本文通過以上冗余技術的分析選擇,將其結合到的設計中,并在V×Works系統(tǒng)下設計了驅(qū)動,通過測試,驗證了本設計的有效性。

          1 總體設計CAN總線模塊設計主要包括硬件與軟件設計兩部分。為實現(xiàn)冗余功能,硬件上需要有幾個相同可獨立工作的設備支持;軟件上要具備錯誤檢測和動態(tài)切換功能,且切換時間要盡可能短。在本設計中,CAN總線模塊硬件配置兩個獨立的CAN控制器,并有FPGA對其進行控制,軟件通過讀取CAN總線狀態(tài)寄存器判斷是否進行冗余切換動作。

          下面將詳細描述雙冗余CAN總線模塊的硬件與軟件設計,以及冗余功能的實現(xiàn)細節(jié)。

          2硬件設計我們選擇PCI9052作為接口芯片,利用功能芯片實現(xiàn)硬件的邏輯和物理實現(xiàn)。CAN控制器采用PHILIPS的SJAl000,可工作于BasicCAN模式或PeI.CAN模式下,其中PeIiCAN模式支持CAN 2.0B協(xié)議,采用8位地址/數(shù)據(jù)復用總線接口。如圖1所示,PC J總線雙CAN接口卡由兩片SJAl000提供兩路獨立的CAN接口,每片芯片的8位地址/數(shù)據(jù)總線和讀寫控制信號。鎖存信號直接與PCI9052相連。SJAl000輸出信號經(jīng)過光耦到CAN收發(fā)器PCA82C250,82C250供電電源為隔離電源,由隔離電源轉(zhuǎn)換模塊提供。CAN總線的復位信號由FPGA提供,CAN控制器SJAl000的中斷信號輸出到FPGA.

          在硬件上CAN總線冗余模塊要求使用相同兩套CAN設備(CAN0.CANl),每套包含獨立的總線電纜??偩€驅(qū)動器和總線控制器,從而實現(xiàn)物理介質(zhì)。物理層。數(shù)據(jù)鏈路層及應用層的全面冗余。兩套設備采用熱備份方式運行:一個CAN控制器作為系統(tǒng)上電后默認的CAN(稱為主CAN);另一個為系統(tǒng)的備用CAN(稱為從CAN)。系統(tǒng)正常工作時,主CAN設備(CAN0)投入運行,當主CAN設備發(fā)生故障時,系統(tǒng)自動切換至從CAN設備運行,保證整個系統(tǒng)的正常通信,提高系統(tǒng)可靠性。

          3軟件設計3.1 VXWorks驅(qū)動開發(fā)模型VXWorks操作系統(tǒng)是風河公司(Wind River SyStem)推出的一款運行在目標機上的高性能??刹脺p的嵌入式強實時操作系統(tǒng),它包括進程管理。存儲管理。設備管理。文件系統(tǒng)管理。網(wǎng)絡協(xié)議及系統(tǒng)應用等幾個部分,只占用了很小的存儲空間,并可高度裁減,保證了系統(tǒng)能以較高的效率運行。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信。軍事。航空。航天等高精尖技術及實時性要求極高的領域中。

          VXWorks操作系統(tǒng)提供幾種標準驅(qū)動模型,如串行設備驅(qū)動。塊設備驅(qū)動。網(wǎng)絡接口驅(qū)動??偩€控制器驅(qū)動等。根據(jù)設備不同,可選擇相應的標準驅(qū)動模型或自定cAN模塊是串行設備,設計選擇了標準串行設備驅(qū)動模型。CAN總線驅(qū)動VXWorks系統(tǒng)中的結構框圖如圖2所示。

          3.2.1 CAN模塊驅(qū)動設計CAN模塊驅(qū)動設計主要包括實現(xiàn)設備初始化。與上層IO通信。數(shù)據(jù)收發(fā)。參數(shù)設置。驗收濾波器設置等。其中設備初始化要針對CAN設備冗余的特點,對兩個CAN控制器進行相同的初始化操作;與上層IO通信。數(shù)據(jù)收發(fā)。參數(shù)設置。驗收濾波器設置操作只控制當前處于工作狀態(tài)的CAN控制器。

          3.2.2驅(qū)動冗余設計在雙CAN冗余系統(tǒng)的設計中,較之硬件結構而言,軟件設計相對復雜,其關鍵之處在于CAN系統(tǒng)故障檢測及CAN系統(tǒng)自動切換。由于采用兩套完全獨立的傳輸介質(zhì)??偩€驅(qū)動器和總線控制器,因此它們能分別獨立檢測到自己通道的故障,比如CANH與CANL短路,CANH或CANL斷開。CANH與地短路。CANL與電源短路??偩€驅(qū)動器損壞等。實際調(diào)試中發(fā)現(xiàn),如果CANH.CANL斷開或只有一個發(fā)送器在總線上,均會造成發(fā)送/接收錯誤計數(shù)器不斷增加到128,使節(jié)點處于忽略錯誤態(tài);而CANH與CANL短路。CANH與地短路或CANL與電源短路均會造成發(fā)送/接收錯誤計數(shù)器不斷增加到256,使節(jié)點處于總線脫離態(tài)。所以,通過節(jié)點狀態(tài)改變中斷子程序中調(diào)用CAN冗余模塊,可以達到實現(xiàn)上述故障自動檢測及CAN系統(tǒng)自動切換的目的。

          (1)接收冗余設計CAN設備接收時無法主動檢測連接線路的通斷狀態(tài),這時就要求系統(tǒng)中的兩個CAN控制器都同時工作于接收狀態(tài)。這時系統(tǒng)中出現(xiàn)以下幾種情況:①正常工作。這個時候兩個CAN控制器都在接收數(shù)據(jù),此時我們只要取其中主CAN設備中的數(shù)據(jù)即可,從CAN設備中的數(shù)據(jù)丟棄;②主CAN設備沒有接收到數(shù)據(jù)而從CAN設備能正常接收到數(shù)據(jù),主CAN設備控制器的狀態(tài)寄存器中并沒有錯誤標志,這種情況是因為主CAN設備的連接線路斷開而引起的,此時進行通道切換,將主CAN設備設置為備用通道,把從CAN設備設置為工作通道并從中取出數(shù)據(jù)送給10系統(tǒng);③主CAN設備能接收到數(shù)據(jù),但其狀態(tài)寄存器中有錯誤標志,這是因為線路上的數(shù)據(jù)出錯引起的,此時主CAN設備中的數(shù)據(jù)為錯誤數(shù)據(jù),不能被使用,因此要進行通道切換,把從CAN設備設定為工作通道,從中取出數(shù)據(jù)送IO系統(tǒng),而主CAN設備進行復位處理后再讓其工作于接收狀態(tài),作為備用通道。數(shù)據(jù)接收流程如圖3所示。

          光耦相關文章:光耦原理



          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();