摘要:針對RS-485總線通信使用過程中容易出現的問題,分析了問題產生的的原因并給出了解決問題的方法。
關鍵詞:RS-485總線、通信、可靠性
一、引 言
RS-485總線是一種半雙工異步通信總線。具有高噪聲抑制、寬共模范圍、長傳輸距離、組網方便的優點。它被廣泛應用于工業控制、儀器儀表、空調控制系統等領域。使用RS-485總線的通信系統結構圖如圖1所示。
RS-485總線要采用手拉手結構,而不能采用星形結構。星形結構會產生反射信號,從而影響到485通信。總線到每個終端設備的分支線長度應盡量短,一般不宜超出5米。分支線如果沒有接終端,會有反射信號,對通訊產生較強的干擾,應將其去掉。
由于工程現場的復雜性,使用RS-485總線時,如果簡單地按常規方式設計電路,往往通信的可靠性不高,在實際工程應用中可能會遇到以下幾個問題:一是通信數據收發的可靠性。二是多機通信時,多個結點通訊故障;三是共模干擾和EMI問題。這些問題通常會使整個通信系統的通信出現故障,由于一般工程結點分布較散,故障排查也很不方便。
針對以上問題,對RS-485總線通信的硬件、軟件設計采取了一些改進措施。
二、硬件電路的設計
現以NEC的μPD78F0511單片機自帶的異步通信口0,外接MAX487芯片轉換成RS-485總線為例,電路如圖2所示。
為提高通信電路的可靠性,在設計電路時注意了以下幾個問題:
2.1 光耦隔離電路的參數選取
在實際應用中,由于要實時監控現場情況并及時做出響應,通信波特率往往較高,一般不低于9600bps(比特/秒)。制約通信波特率提高的因素并不是現場的通信線(一般使用普通雙絞線),而是在與單片機系統進行信號隔離的光耦電路上,此處選用的光耦是PC817。電路設計時可以考慮采用高傳輸速率的光耦,也可以通過優化普通光耦電路參數,使其工作在最佳狀態。在此電路中,電阻R1、R2的阻值可以在510Ω-1KΩ之間選取,電阻R8的阻值可以在680Ω-1KΩ之間選取。
2.2 485通信總線上電復位防癱瘓設計
在實際應用中,一般主機與從機距離較遠,往往不在同一個時間上電。如果此時某個從機MAX487芯片的發送接收使能控制端(MAX487芯片的第3管腳)一直處于高電平,那么RS-485總線將會處于發送狀態,也即占用了通信總線,這樣其它的從機就無法與主機進行通信。這種情況尤其表現在某個從機出現異常情況下,會導致整個通信系統癱瘓。因此在電路設計時,應保證系統上電復位時MAX487芯片的第3管腳為低電平。由于在上電復位后,程序將P1.5端口置為高電平,故光耦U19無法導通,可以有效保證圖2電路在上電復位后RS-485總線處于接收狀態,不會使總線在上電復位時出現癱瘓狀態。
2.3 485通信總線輸出級電路設計
輸出電路的設計要充分考慮到線路上的各種干擾及線路特性阻抗的匹配。由于工程環境比較復雜,現場常有各種形式的干擾源,所以RS-485總線的輸出端一定要加有保護措施。在電路設計中D13、D21采用能夠抗浪涌的TVS二極管。
考慮到某個從機節點的485芯片被擊穿短路的特殊情況,為防止總線中其它從機的通信受到影響,在MAX487芯片的485信號輸出端串聯了兩個36Ω的電阻R50、R51,這樣某一個從機的硬件故障就不會使整個總線的通信受到影響,該串聯電阻的阻值可在20Ω-51Ω之間選取。
由于485通信芯片的特性,接收器的檢測靈敏度為土200mV,即差分輸入端VA-VB≥+200mV,輸出邏輯“1”,VA-VB≤-200mV,輸出邏輯“0”;而A、B端電位差的絕對值小于200mV時,輸出為不確定狀態。如果在總線上所有發送器被禁止時,接收器輸出邏輯“0”,這會被誤認為通信幀的起始狀態引起工作不正常。解決這個問題的辦法是人為地使A端電位高于B兩端電位,選樣單片機的RXD端的電平在RS-485總線空閑時呈現確定的高電平狀態,單片機就不會誤接收進入接收中斷。通過在RS-485總線的A輸出端接上拉電阻R61、B輸出端接下拉電阻R60,即可以較好地解決這個問題。上下拉電阻的阻值需要根據具體的485芯片和通信結點數確定。
還有一個需要注意的是終端負載電阻問題,在設備少、距離短的情況下不加終端負載電阻整個網絡能很好地工作,但隨著距離的增加性能將降低。有一條經驗性的原則可以用來判斷在什么樣的通信速率和通信線長度時需要進行匹配:當信號的轉換時間(上升或下降時間)超過電信號沿總線單向傳輸所需時間的3倍以上時就可以不加匹配。一般終端匹配采用·終端電阻方法,應在RS-485總線的開始和末端都并接一個終端電阻。終端電阻的阻值在120Ω左右。相當于通信線特性阻抗的電阻,因為大多數雙絞線電纜特性阻抗大約在100-120Ω。
此外還可以在串聯電阻R50、R51和485芯片之間(或串聯電阻與總線輸出端之間)加濾波電容,以提高通信電路的EMC性能,電容的具體值根據通信波特率和通信線長度實際測試結果確定。
2.4 通信總線上各結點共信號地
RS-485總線采用差分信號負邏輯。+2V-+6V表示邏輯“0”,-6V--2V表示邏輯“1”。RS-485總線一般采用的是兩線制接線方式,通常連接RS-485通信線路時只是簡單地用一對雙絞線將各個接口的“A”、“B”端連接起來,而忽略了信號地的連接,這種連接方法在許多場合是能正常工作的,但卻有很大的隱患,主要是兩個方面的問題,一是共模干擾問題。RS-485接口采用差分方式傳輸信號方式,并不需要相對于某個參考點來檢測信號,系統只_需檢測兩線之間的電位差就可以了。但收發器有一定的共模電壓范圍,RS-485收發器共模電壓范圍為-7-+12V,只有滿足上述條件,整個網絡才能正常工作。當網絡線路中共模電壓超出此范圍時就會影響通信的穩定性和可靠性,甚至損壞接口。另一個是EMI問題。發送驅動器輸出信號中的共模部分需要一個返回通路,如果沒有一個低阻抗的返回通道(信號地),就會以輻射的形式返回源端,整個通信總線就會像一個巨大的天線向外輻射電磁波。所以在連接各結點時,最好將各結點的信號地也連接到一起。
三、軟件編程
3.1 通信協議制定
485芯片的軟件編程對控制系統的可靠性有著很大的影響。由于RS-485總線是異步半雙工的通信總線,在某一個時刻,總線只可能呈現一種狀態,所以這種方式一般適用于主機對從機的查詢方式通信,總線上必然有一臺始終處于主機地位的設備,其循環查詢總線上各從機的狀態,所以需要制定一套合理的通信協議來協調總線的主從機通信。此處采用數據幀通信方式。通信數據是分幀發送的,每幀數據都有引導碼、地址碼、幀碼、長度碼、命令碼、數據有效內容、校驗碼等部分組成。其中引導碼是用于同步每一幀數據用的,可用一個字節或多個字節來表示;長度碼是這一幀數據的總長度,命令碼是主機點名從機或從機回復主機的控制命令-地址碼分為兩部分,一部分是接收結點地址,一部分是發送結點地址,幀碼是用于識別一串較長數據分多幀發送時的幀號;“內容”是這一幀數據里的各種有效信息;校驗碼是這一幀數據的校驗標志,可以采用奇偶校驗、求和校驗、循環冗余校驗等不同校驗方式。
3.2 發送中斷的選擇
一般單片機的串行異步通信發送機制是有一個發送緩沖區,先將發送寄存器中的數據轉移到發送緩沖區中,再從緩沖區將數據發送到TXD端口上。與此對應的有兩個中斷源,一個是發送完成中斷,一個是發送緩沖區空中斷,如果要將數據全部發送到總線上,一般要查詢發送緩沖區空中斷標志位,如果查詢發送完成標志位,則最后一個數據可能在發送緩沖區無法發送出去,造成發送數據的丟失。
3.3 發送與接收狀態的切換
在RS-485總線通信中,尤其要注意對485芯片發送接收使能控制端的切換。為了實現通信系統可靠的工作,在RS-485總線狀態切換時需要做適當延時,再進行數據的接收和發送。在數據發送狀態下,先將發送接收使能控制端置為高電平,然后延時約1ms左右的時間,再向總線發送有效數據;所有幀數據發送完成后再延時約lms左右的時間,將發送接收使能控制端置為低電平,使總線處于接收數據狀態。這樣一來總線在狀態切換時有個穩定的過程。
3.4 從機延時回復主機數據
為使通信主從機數據之間留有足夠的總線空閑時間,同時避免數據沖突并方便識別兩串數據,一般從機接收到主機的點名幀后最好在“6T-20T”(T為一個字節的傳輸時間)之間發出回復幀的第一個數據。
四、結 語
以上RS-485總線通信的軟硬件設計,通信系統的可靠性大大提高,在通常的環境下,1000小時連續工作,系統的通信始終正常,滿足實際工程的需要。
在珠海格力電器股份有限公司開發的商用空調控制系統中,已廣泛使用上面的RS-485總線通信電路,通訊網絡的穩定性和可靠性很好。
盡管RS-485,總線也存在一些缺點,例如總線不能自動仲裁、主機故障會引起系統癱瘓等等,但由于其電路設計簡單、成本較低、控制方便,只要合理地使用,在某些應用領域仍然能發攛其良好作用。