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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于C8051F040的CAN總線隔離器的設(shè)計(jì)與應(yīng)用

          基于C8051F040的CAN總線隔離器的設(shè)計(jì)與應(yīng)用

          作者: 時(shí)間:2009-12-08 來源:網(wǎng)絡(luò) 收藏

            1 引言

            CAN(Controller Area Network),即控制器局域網(wǎng),是應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一,以其實(shí)時(shí)性強(qiáng),可靠性高,結(jié)構(gòu)簡(jiǎn)單,互操作性好,價(jià)格低廉等優(yōu)點(diǎn),可應(yīng)用于高速網(wǎng)絡(luò)和低成本的線路網(wǎng)絡(luò)。這里提出一種的通訊系統(tǒng),將其應(yīng)用于某飛行器到地面的通訊網(wǎng)絡(luò),實(shí)現(xiàn)飛行器和地面的速度隔離,從而使飛行器和地面之間能夠穩(wěn)定實(shí)時(shí)通信。該系統(tǒng)設(shè)計(jì)在分析2.0B協(xié)議的基礎(chǔ)上,采用結(jié)構(gòu)化方法獨(dú)立設(shè)計(jì)飛行器和地面雙方的。底層模塊的硬件設(shè)計(jì)是以C8051F040高速型單片機(jī)為核心,其內(nèi)部集成CAN協(xié)議控制器,因而只需增加CAN收發(fā)器就可實(shí)現(xiàn)CAN智能節(jié)點(diǎn)設(shè)計(jì),比傳統(tǒng)的由單片機(jī)與CAN 協(xié)議控制器共同組成的CAN節(jié)點(diǎn)更簡(jiǎn)單,可靠,易操作。而CAN總線應(yīng)用層協(xié)議由用戶自行定義編寫,使其更符合該系統(tǒng)設(shè)計(jì)要求。目前整個(gè)系統(tǒng)運(yùn)行良好,性能穩(wěn)定,通信冗余度好,符合工業(yè)現(xiàn)場(chǎng)使用要求。

            2 基于C8051F040的CAN智能節(jié)點(diǎn)設(shè)計(jì)

            圖1是基于C8051F040的CAN總線硬件接口原理電路圖。通過C8051F040內(nèi)部所集成的CAN控制器,為了增強(qiáng)系統(tǒng)的抗十?dāng)_能力,在CAN控制器與TJA1040之間接入光電耦合器6N137,從而實(shí)現(xiàn)TJA1040與外界CAN通信。事實(shí)上,集成收發(fā)器TJA1040本身具有瞬間抗干擾能力,可保護(hù)總線,降低射頻干擾,以實(shí)現(xiàn)熱保護(hù)功能。因此,在干擾不嚴(yán)重的廊用場(chǎng)合,無需增加光電隔離,使得系統(tǒng)達(dá)到最大通信速率或距離。如果使用光電,應(yīng)盡量選用高速光電,以減少CAN總線有效回路信號(hào)傳輸?shù)难訒r(shí)時(shí)間。由于CAN隔離器需通過CAN總線采集輸入輸出模塊的數(shù)據(jù)信息,干擾較大,為了系統(tǒng)的穩(wěn)定可靠性,需加光電隔離器。通過CAN2.0B兼容CAN2.0A協(xié)議的連接通訊測(cè)試,光電耦合器6N137上升時(shí)間為30 ns(典型值),隔離電壓為3 000 V,其支持最大頻率值超過30 MHz。

          基于C8051F040的CAN總線硬件接口原理電路圖

            為實(shí)現(xiàn)系統(tǒng)的穩(wěn)定可靠性,該系統(tǒng)設(shè)計(jì)采用冗余設(shè)計(jì),利用雙通道光耦HCPL2631隔離并產(chǎn)生控制信號(hào),控制兩個(gè)單刀雙擲開關(guān)MAX4635,從而實(shí)現(xiàn)CAN智能節(jié)點(diǎn)的切換。

            3 CAN總線隔離器設(shè)計(jì)

            該系統(tǒng)設(shè)計(jì)的CAN總線隔離主要由發(fā)送和接收兩部分組成。發(fā)送和接收部分都由數(shù)據(jù)指令配置、數(shù)據(jù)處理和數(shù)據(jù)傳輸3個(gè)單元組成,如圖2所示。其中發(fā)送部分:上位機(jī)指令配置完后,通過FPGA傳輸給單片機(jī),單片機(jī)利用自身所帶的CAN總線,經(jīng)隔離處理后到達(dá)總線驅(qū)動(dòng)器,然后通過CAN總線輸出數(shù)據(jù)。而接收部分正好相反。該系統(tǒng)設(shè)計(jì)將飛行器速度設(shè)置為500 kHz,地面速度設(shè)置為50 km/s,從而更好模擬飛行器和地面的通信。

            4 隔離器收發(fā)雙方

            總線隔離器分為飛行器高速接口和地面低速接口兩部分,要求隔離器能通過所有地面上行到飛行器的數(shù)據(jù)。本系統(tǒng)CAN總線采用主從方式,所有總線數(shù)據(jù)統(tǒng)一采用數(shù)據(jù)幀,不用遠(yuǎn)程幀,數(shù)據(jù)長(zhǎng)度最大為8字節(jié),最小為0字節(jié)。根據(jù)數(shù)據(jù)鏈路層協(xié)議,仲裁場(chǎng)標(biāo)準(zhǔn)標(biāo)識(shí)符共11位(ID1O~ID0),系統(tǒng)通過標(biāo)識(shí)符確定數(shù)據(jù)傳輸?shù)膬?yōu)先級(jí)。本協(xié)議規(guī)定,ID除表示優(yōu)先級(jí)外,還是數(shù)據(jù)接收目的節(jié)點(diǎn)、數(shù)據(jù)發(fā)送源節(jié)點(diǎn)與數(shù)據(jù)類型。具體說明11位ID:ID[1](ID的0~3位)為數(shù)據(jù)接收目的節(jié)點(diǎn);ID[2](ID的4~7位)為數(shù)據(jù)發(fā)送的源節(jié)點(diǎn);ID[3](ID的8~10位)為數(shù)據(jù)類型。

            本協(xié)議中,飛行器系統(tǒng)和地面系統(tǒng)都有3個(gè)節(jié)點(diǎn),節(jié)點(diǎn)編號(hào)和ID號(hào)如表1所示。

          節(jié)點(diǎn)編號(hào)和ID號(hào)

            5 CAN隔離器的軟件設(shè)計(jì)

            5.1 CAN總線初始化

            CAN總線初始化包括:I/O的配置、外部晶體振蕩器的配置、CAN總線的開閉、發(fā)送和接收初始化。初始化程序如下:

          void initial_can(unsigned char MsgNum,unsignedl int id)
          {SFRPAGE=CONFIG_PAGE;

          初始化程序

            5.2 發(fā)送和接收程序

            CAN報(bào)文發(fā)送是由CAN控制器自動(dòng)完成,用戶只需根據(jù)接收到的數(shù)據(jù)幀的識(shí)別符,將對(duì)應(yīng)的數(shù)據(jù)轉(zhuǎn)移到發(fā)送緩沖寄存器,然后將此報(bào)文對(duì)象的編碼寫入命令請(qǐng)求寄存器啟動(dòng)發(fā)送即可,而發(fā)送由硬件完成。這里使用定時(shí)更新發(fā)送報(bào)文對(duì)象中的數(shù)據(jù),發(fā)送數(shù)據(jù)由控制器自動(dòng)完成,當(dāng)收到一個(gè)數(shù)據(jù)幀時(shí),可將具有相同識(shí)別符的數(shù)據(jù)幀發(fā)送出去。其發(fā)送程序代碼如下:

          發(fā)送程序代碼

            CAN報(bào)文的接收與發(fā)送相同,由CAN控制器自動(dòng)完成,接收程序只需從接收緩存器中讀取所接收的數(shù)據(jù),再進(jìn)行相應(yīng)處理。其方法與發(fā)送程序基本一致,這里不再贅述。

            6 關(guān)鍵技術(shù)設(shè)計(jì)分析

            6.1 冗余設(shè)計(jì)

            工業(yè)控制現(xiàn)場(chǎng)狀況復(fù)雜,因外力所致的電纜接觸故障率遠(yuǎn)遠(yuǎn)高于節(jié)點(diǎn)的故障率,一旦電纜發(fā)生故障,總線就會(huì)失去通信能力,并導(dǎo)致系統(tǒng)癱瘓,對(duì)工控系統(tǒng)的健壯性構(gòu)成威脅。解決這一故障最簡(jiǎn)單、有效的辦法是對(duì)故障率較高的物理介質(zhì)進(jìn)行冗余設(shè)計(jì)。即使用2條總線電纜、2個(gè)CAN總線收發(fā)器,但只用1個(gè)總線控制器。仲裁電路自動(dòng)監(jiān)測(cè)總線狀態(tài),并自適應(yīng)選擇正常的電纜完成通信任務(wù)。發(fā)生電纜故障時(shí),設(shè)備自動(dòng)報(bào)警,提醒工作人員進(jìn)行檢修。檢修過程中,設(shè)備使用備用電纜繼續(xù)工作。電纜冗余設(shè)計(jì)可實(shí)現(xiàn)與通常的CAN總線通訊系統(tǒng)代碼級(jí)兼容。仲裁電路設(shè)置于總線控制器與2個(gè)總線收發(fā)器之間,監(jiān)測(cè)CAN總線電纜狀態(tài),實(shí)現(xiàn)自適應(yīng)切換和報(bào)警。設(shè)備向其他節(jié)點(diǎn)發(fā)送報(bào)文時(shí),總線控制器向2條總線同時(shí)發(fā)送相同的報(bào)文;而接收?qǐng)?bào)文時(shí),仲裁電路在無電纜故障時(shí),一直使用總線1(主總線)進(jìn)行報(bào)文接收。如果總線2(從總線)出現(xiàn)故障,故障監(jiān)測(cè)電路就向主控計(jì)算機(jī)發(fā)出中斷信號(hào)報(bào)故障,同時(shí)處于正常狀態(tài)的總線1仍承擔(dān)正常通訊任務(wù);如果總線1出現(xiàn)故障,故障監(jiān)測(cè)電路在向主控計(jì)算機(jī)發(fā)出中斷信號(hào)的同時(shí),自動(dòng)切換成總線2,以保證設(shè)備正常工作??偩€切換動(dòng)作只會(huì)出現(xiàn)在正在使用的電纜發(fā)生故障時(shí),這樣可提高通訊的穩(wěn)定性,降低應(yīng)答失敗的幾率。

            6.2 接收數(shù)據(jù)時(shí)ID不濾波的實(shí)現(xiàn)

            在CAN總線的接收過程中,一般實(shí)現(xiàn)的都是發(fā)送ID和接收ID相匹配的方式,也就是說在接收方要進(jìn)行接收,而ID濾波,而本設(shè)計(jì)實(shí)現(xiàn)任意接收方式,只要有數(shù)據(jù)就開始接收不進(jìn)行ID號(hào)的濾波,這樣可更好進(jìn)行測(cè)試,例如某個(gè)設(shè)備所攜帶的ID號(hào),由于各種原因與接收方所接收的ID不匹配,這樣就可判斷出所發(fā)設(shè)備可能收到干擾,或者所發(fā)設(shè)備自身出現(xiàn)了問題。這種ID號(hào)不過濾的方法主要通過對(duì)接收設(shè)備的命令請(qǐng)求寄存器、消息掩碼寄存器、仲裁寄存器、消息控制寄存器和命令掩碼寄存器的設(shè)置來實(shí)現(xiàn)。其實(shí)現(xiàn)程序如下:

          實(shí)現(xiàn)程序

            7 結(jié)論

            本文提出一種CAN總線隔離器的實(shí)現(xiàn)方案。利用具有CAN總線控制器的C8051F系列單片機(jī)實(shí)現(xiàn)了CAN智能節(jié)點(diǎn),增加CAN節(jié)點(diǎn)的冗余設(shè)計(jì),提高通訊的穩(wěn)定性,降低應(yīng)答失敗的幾率;實(shí)現(xiàn)不濾波的CAN數(shù)據(jù)接收,可更好測(cè)試系統(tǒng)的可靠性和監(jiān)測(cè)功能,當(dāng)接收到不是已知設(shè)備發(fā)來的消息時(shí),能夠準(zhǔn)確定位設(shè)備故障的位置。此方案實(shí)現(xiàn)的CAN總線隔離器已成功應(yīng)用于某型號(hào)飛行器的地面測(cè)試臺(tái)中,經(jīng)測(cè)試和調(diào)試后,系統(tǒng)工作穩(wěn)定,達(dá)到設(shè)計(jì)要求。并且由于采用內(nèi)嵌的CAN 總線控制器,可為以后的系統(tǒng)升級(jí)預(yù)留大量空間。

          隔離器相關(guān)文章:隔離器原理


          評(píng)論


          相關(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); })();