新聞中心

EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > RS-485總線通信系統(tǒng)的可靠性措施

RS-485總線通信系統(tǒng)的可靠性措施

——
作者:長沙民政學(xué)院 朱志偉 周志光 鮑祖尚 時間:2007-01-26 來源:《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》 收藏

1 問題的提出

本文引用地址:http://m.butianyuan.cn/article/20771.htm

在工業(yè)控制及測量領(lǐng)域較為常用的網(wǎng)絡(luò)之一就是物理層采用rs-485通信接口所組成的工控設(shè)備網(wǎng)絡(luò)。這種通信接口可以十分方便地將許多設(shè)備組成一個控制網(wǎng)絡(luò)。從目前解決單片機(jī)之間中長距離通信的諸多方案分析來看,rs-485總線通信模式由于具有結(jié)構(gòu)簡單、價格低廉、通信距離和數(shù)據(jù)傳輸速率適當(dāng)?shù)忍攸c而被廣泛應(yīng)用于儀器儀表、智能化傳感器集散控制、樓宇控制、監(jiān)控報警等領(lǐng)域。但rs485總線存在自適應(yīng)、自保護(hù)功能脆弱等缺點,如不注意一些細(xì)節(jié)的處理,常出現(xiàn)通信失敗甚至系統(tǒng)癱瘓等故障,因此提高rs-485總線的運行可靠性至關(guān)重要。


圖1rs485通信接口原理圖

2 硬件電路設(shè)計中需注意的問題

2.1 電路基本原理

某節(jié)點的硬件電路設(shè)計如圖1所示,在該電路中,使用了一種rs-485接口芯片sn75lbc184,它采用單一電源vcc,電壓在+3~+5.5 v范圍內(nèi)都能正常工作。與普通的rs-485芯片相比,它不但能抗雷電的沖擊而且能承受高達(dá)8 kv的靜電放電沖擊,片內(nèi)集成4個瞬時過壓保護(hù)管,可承受高達(dá)400 v的瞬態(tài)脈沖電壓。因此,它能顯著提高防止雷電損壞器件的可靠性。對一些環(huán)境比較惡劣的現(xiàn)場,可直接與傳輸線相接而不需要任何外加保護(hù)元件。該芯片還有一個獨特的設(shè)計,當(dāng)輸入端開路時,其輸出為高電平,這樣可保證接收器輸入端電纜有開路故障時,不影響系統(tǒng)的正常工作。另外,它的輸入阻抗為rs485標(biāo)準(zhǔn)輸入阻抗的2倍(≥24 kω),故可以在總線上連接64個收發(fā)器。芯片內(nèi)部設(shè)計了限斜率驅(qū)動,使輸出信號邊沿不會過陡,使傳輸線上不會產(chǎn)生過多的高頻分量,從而有效扼制電磁干擾。在圖1中,四位一體的光電耦合器tlp521讓單片機(jī)與sn75lbc184之間完全沒有了電的聯(lián)系,提高了工作的可靠性?;驹頌椋寒?dāng)單片機(jī)p1.6=0時,光電耦合器的發(fā)光二極管發(fā)光,光敏三極管導(dǎo)通,輸出高電壓(+5 v),選中rs485接口芯片的de端,允許發(fā)送。當(dāng)單片機(jī)p1.6=1時,光電耦合器的發(fā)光二極管不發(fā)光,光敏三極管不導(dǎo)通,輸出低電壓(0 v),選中rs485接口芯片的re端,允許接收。sn75lbc184的r端(接收端)和d端(發(fā)送端)的原理與上述類似。

2.2 rs-485的de控制端設(shè)計

在rs-485總線構(gòu)筑的半雙工通信系統(tǒng)中,在整個網(wǎng)絡(luò)中任一時刻只能有一個節(jié)點處于發(fā)送狀態(tài)并向總線發(fā)送數(shù)據(jù),其他所有節(jié)點都必須處于接收狀態(tài)。如果有2個節(jié)點或2個以上節(jié)點同時向總線發(fā)送數(shù)據(jù),將會導(dǎo)致所有發(fā)送方的數(shù)據(jù)發(fā)送失敗。因此,在系統(tǒng)各個節(jié)點的硬件設(shè)計中,應(yīng)首先力求避免因異常情況而引起本節(jié)點向總線發(fā)送數(shù)據(jù)而導(dǎo)致總線數(shù)據(jù)沖突。以mcs51系列的單片機(jī)為例,因其在系統(tǒng)復(fù)位時,i/o口都輸出高電平,如果把i/o口直接與rs-485接口芯片的驅(qū)動器使能端de相連,會在cpu復(fù)位期間使de為高,從而使本節(jié)點處于發(fā)送狀態(tài)。如果此時總線上有其他節(jié)點正在發(fā)送數(shù)據(jù),則此次數(shù)據(jù)傳輸將被打斷而告失敗,甚至引起整個總線因某一節(jié)點的故障而通信阻塞,繼而影響整個系統(tǒng)的正常運行??紤]到通信的穩(wěn)定性和可靠性,在每個節(jié)點的設(shè)計中應(yīng)將控制rs485總線接口芯片的發(fā)送引腳設(shè)計成de端的反邏輯,即控制引腳為邏輯“1”時,de端為“0”;控制引腳為邏輯“0”時,de端為“1”。在圖1中,將cpu的引腳p1.6通過光電耦合器驅(qū)動de端,這樣就可以使控制引腳為高或者異常復(fù)位時使sn75lbc184始終處于接收狀態(tài),從而從硬件上有效避免節(jié)點因異常情況而對整個系統(tǒng)造成的影響。這就為整個系統(tǒng)的通信可靠奠定了基礎(chǔ)。

此外,電路中還有1片看門狗max813l,能在節(jié)點發(fā)生死循環(huán)或其他故障時,自動復(fù)位程序,交出rs-485總線控制權(quán)。這樣就能保證整個系統(tǒng)不會因某一節(jié)點發(fā)生故障而獨占總線,導(dǎo)致整個系統(tǒng)癱瘓。

2.3 避免總線沖突的設(shè)計

當(dāng)一個節(jié)點需要使用總線時,為了實現(xiàn)總線通信可靠,在有數(shù)據(jù)需要發(fā)送的情況下先偵聽總線。在硬件接口上,首先將rs-485接口芯片的數(shù)據(jù)接收引腳反相后接至cpu的中斷引腳int0。在圖1中,int0是連至光電耦合器的輸出端。當(dāng)總線上有數(shù)據(jù)正在傳輸時,sn75lbc184的數(shù)據(jù)接收端(r端)表現(xiàn)為變化的高低電平,利用其產(chǎn)生的cpu下降沿中斷(也可采用查詢方式),能得知此時總線是否正“忙”,即總線上是否有節(jié)點正在通信。如果“空閑”,則可以得到對總線的使用權(quán)限,這樣就較好地解決了總線沖突的問題。在此基礎(chǔ)上,還可以定義各種消息的優(yōu)先級,使高優(yōu)先級的消息得以優(yōu)先發(fā)送,從而進(jìn)一步提高系統(tǒng)的實時性。采用這種工作方式后,系統(tǒng)中已經(jīng)沒有主、從節(jié)點之分,各個節(jié)點對總線的使用權(quán)限是平等的,從而有效避免了個別節(jié)點通信負(fù)擔(dān)較重的情況??偩€的利用率和系統(tǒng)的通信效率都得以大大提高,從而也使系統(tǒng)響應(yīng)的實時性得到改善,而且即使系統(tǒng)中個別節(jié)點發(fā)生故障,也不會影響其他節(jié)點的正常通信和正常工作。這樣使得系統(tǒng)的“危險”分散了,從某種程度上來說增強(qiáng)了系統(tǒng)的工作可靠性和穩(wěn)定性。 2.4 rs-485輸出電路部分的設(shè)計

在圖1中,vd1~vd4為信號限幅二極管,其穩(wěn)壓值應(yīng)保證符合rs-485標(biāo)準(zhǔn),vd1和vd3取12 v,vd2 和vd4取7 v,以保證將信號幅度限定在-7~+12 v之間,進(jìn)一步提高抗過壓的能力??紤]到線路的特殊情況(如某一節(jié)點的rs-485芯片被擊穿短路),為防止總線中其他分機(jī)的通信受到影響,在sn75lbc184的信號輸出端串聯(lián)了2個20 ω的電阻r1和r2,這樣本機(jī)的硬件故障就不會使整個總線的通信受到影響。在應(yīng)用系統(tǒng)工程的現(xiàn)場施工中,由于通信載體是雙絞線,它的特性阻抗為120 ω左右,所以線路設(shè)計時,在rs485網(wǎng)絡(luò)傳輸線的始端和末端應(yīng)各接1個120 ω的匹配電阻(如圖1中的r3),以減少線路上傳輸信號的反射。

2.5系統(tǒng)的電源選擇

對于由單片機(jī)結(jié)合rs-485組建的測控網(wǎng)絡(luò),應(yīng)優(yōu)先采用各節(jié)點獨立供電的方案,同時電源線不能與rs-485信號線共用同一股多芯電纜。rs-485信號線宜選用截面積0.75 mm2以上的雙絞線而不是平直線,并且選用線性電源tl750l05比選用開關(guān)電源更合適。tl750l05必須有輸出電容,若沒有輸出電容,則其輸出端的電壓為鋸齒波形狀,鋸齒波的上升沿隨輸入電壓變化而變化,加輸出電容后,可以抑制該現(xiàn)象。

3 軟件的編程

sn75lbc184在接收方式時,a、b為輸入,r為輸出;在發(fā)送方式時,d為輸入,a、b為輸出。當(dāng)傳送方向改變一次后,如果輸入未變化,則此時輸出為隨機(jī)狀態(tài),直至輸入狀態(tài)變化一次,輸出狀態(tài)才確定。顯然,在由發(fā)送方式轉(zhuǎn)入接收方式后,如果a、b狀態(tài)變化前,r為低電平,在第一個數(shù)據(jù)起始位時,r仍為低電平,cpu認(rèn)為此時無起始位,直到出現(xiàn)第一個下降沿,cpu才開始接收第一個數(shù)據(jù),這將導(dǎo)致接收錯誤。由接收方式轉(zhuǎn)入發(fā)送方式后,d變化前,若a與b之間為低電壓,發(fā)送第一個數(shù)據(jù)起始位時,a與b之間仍為低電壓,a、b引腳無起始位,同樣會導(dǎo)致發(fā)送錯誤??朔@種后果的方案是:主機(jī)連續(xù)發(fā)送兩個同步字,同步字要包含多次邊沿變化(如55h ,0aah),并發(fā)送兩次(第一次可能接收錯誤而忽略) ,接收端收到同步字后,就可以傳送數(shù)據(jù)了,從而保證正確通信。

為了更可靠地工作,在rs485總線狀態(tài)切換時需要適當(dāng)延時,再進(jìn)行數(shù)據(jù)的收發(fā)。具體的做法是在數(shù)據(jù)發(fā)送狀態(tài)下,先將控制端置“1”,延時0.5 ms左右的時間,再發(fā)送有效的數(shù)據(jù),數(shù)據(jù)發(fā)送結(jié)束后,再延時0.5 ms,將控制端置“0”。這樣的處理會使總線在狀態(tài)切換時,有一個穩(wěn)定的工作過程。數(shù)據(jù)通信程序基本流程圖如圖2所示。


圖2數(shù)據(jù)通信程序基本流程圖

單片機(jī)通信節(jié)點的程序基本上可以分為6個主要部分,分別為預(yù)定義部分、初始化部分、主程序部分、設(shè)備狀態(tài)檢測部分、幀接收部分和幀發(fā)送部分。預(yù)定義部分主要定義了通信中使用的握手信號,用于保存設(shè)備信息的緩沖區(qū)和保存本節(jié)點設(shè)備號的變量。設(shè)備狀態(tài)檢測部分應(yīng)能在程序初始化后,當(dāng)硬件發(fā)生故障時,作出相應(yīng)的反應(yīng)。主程序部分應(yīng)能接收命令幀,并根據(jù)命令的內(nèi)容作出相應(yīng)的回應(yīng)。為縮短篇幅,這里僅給出主程序部分的代碼。如下所示:

  /* 主程序流程 */
  while(1) {         //主循環(huán)
    if(recv_cmd(&type)==0) //發(fā)生幀錯誤或幀地址與本機(jī)
                //地址不符,丟棄當(dāng)前幀后返回
  continue;
  switch(type) {
    case __active_:    //主機(jī)詢問從機(jī)是否存在
      send_data(__ok_, 0,dbuf);//發(fā)送應(yīng)答信息
      break;
    case __getdata_:
      len = strlen(dbuf);
      send_data(__status_, len,dbuf);//發(fā)送狀態(tài)信息
        break;
    default:
        break;    //命令類型錯誤,丟棄當(dāng)前幀后返回
    }
  }

4 結(jié)論

rs-485由于使用了差分電平傳輸信號,傳輸距離比rs-232更長,最多可以達(dá)到3000 m,因此很適合工業(yè)環(huán)境下的應(yīng)用。但與can總線等更為先進(jìn)的現(xiàn)場工業(yè)總線相比,其處理錯誤的能力還稍顯遜色,所以在軟件部分還需要進(jìn)行特別的設(shè)計,以避免數(shù)據(jù)錯誤等情況發(fā)生。另外,系統(tǒng)的數(shù)據(jù)冗余量較大,對于速度要求高的應(yīng)用場所不適宜用rs-485總線。雖然rs-485總線存在一些缺點,但由于它的線路設(shè)計簡單、價格低廉、控制方便,只要處理好細(xì)節(jié),在某些工程應(yīng)用中仍然能發(fā)揮良好的作用??傊?,解決可靠性的關(guān)鍵在于工程開始施工前就要全盤考慮可采取的措施,這樣才能從根本上解決問題,而不要等到工程后期再去亡羊補牢。



關(guān)鍵詞:

評論


相關(guān)推薦

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

關(guān)閉