從目前解決MCU之間中長距離通信的諸多方案分析來看,RS-485因硬體設計簡單、控制方便、成本低廉等優點,在消防、水文、水利自動報測、樓宇控制等工程中被廣泛使用。但RS-485匯流排存在自適應、自保護功能脆弱、通信效率低等缺點,如不注意一些細節的處理常出現通信失敗甚至系統癱瘓等故障,因此提高RS-485匯流排的運行可靠性至關重要。
基本介紹
- 中文名:工業串列匯流排
- 電源選擇:220~1000μF電解電容
- 硬體設計:可與MCU共用5V電源
- 網路建立:採用特性阻抗為120Ω雙絞線
電源選擇,硬體設計,網路建立,通信效率,協定規定,CRC校驗規則,系統維護,
電源選擇
對於由MCU結合RS-485微系統組建的測控網路,應優先採用各微系統獨立供電方案,最好不要採用一台大電源給微系統並聯供電,同時電源線(交直流)不能與RS-485信號線共用同一股多芯電纜。RS-485信號線宜選用截面積0.75mm2以上雙絞線而不是平直線。對於每個小容量直流電源選用線性電源LM7805比選用開關電源更合適。當然應注意LM7805的保護:
1.LM7805輸入端與地應跨接220~1000μF電解電容;
2.LM7805輸入端與輸出端反接1N4007二極體;
3.LM7805輸出端與地應跨接470~1000μF電解電容和104pF獨石電容並反接1N4007二極體;
4.輸入電壓以8~10V為佳,最大允許範圍為6.5~24V。可選用TI的PT5100替代LM7805,以實現9~38V的超寬電壓輸入。
硬體設計
RS-485晶片供電電壓為4.5~5.5V,可與MCU共用5V電源。因RS-485匯流排為並接式二線制接口,一旦有一隻晶片故障就可能將匯流排“拉死”,因此對其二線口VA、VB與匯流排之間應加以隔離。一種簡單可行的方法是:VA、VB與匯流排之間各串接一隻4~10Ω的PTC電阻,同時與地之間各跨接5V的TVS二極體以消除線路浪涌干擾。如沒有PTC電阻和TVS二極體可用普通電阻和穩壓管代替。為防止干擾信號誤觸發RO(接收器輸出)負跳變(RO的負跳變是通信接收的關鍵),建議將RO外接10kΩ上拉電阻。對於收發控制端TC建議採用MCU引腳通過反相器進行控制,不宜採用MCU引腳直接進行控制以防止MCU上電時對匯流排的干擾。對外置設備為防止強電磁(雷電)衝擊,建議選用TI的75LBC184等防雷擊晶片。
網路建立
RS-485網路通常採用特性阻抗為120Ω雙絞線作傳輸介質,傳輸速率300b/s~115.2kb/s兼容,為異步半雙工結構。網路節點數與所選RS-485晶片驅動能力和接收器的輸入阻抗有關,如75LBC184標稱最大值為64點,MAX1487E標稱最大值為128點。實際使用時,因線纜長度、線徑、網路分布、傳輸速率不同,實際接點數均達不到理論值。例如75LBC184運用在500m分布的RS-485網路上節點數超過50或速率大於9.6kb/s時工作可靠性明顯下降。根據筆者經驗,節點數應按最大值的70%選取,傳輸速率在1200~9600b/s之間選取,通信距離1km以內,從通信效率、節點數、通信距離等綜合考慮選用4800b/s最佳。通信距離1km以上時應通過增加中繼模組或降低速率的方法提高傳輸可靠性。
通信效率
RS-485通常套用於一對多點的主從應答式通信系統中,相對於RS-232等全雙工匯流排效率低了許多,因此選用合適的通信協定及控制方式非常重要。
1.匯流排穩態控制(握手信號)大多數使用者選擇在數據傳送前1ms將收發控制端TC置成高電平,使匯流排進入穩定的傳送狀態後才傳送數據;數據傳送完畢再延遲1ms後置TC端成低電平,使可靠傳送完畢後才轉入接收狀態。據筆者使用TC端的延時有4個機器周期已滿足要求;
2.為保證數據傳輸質量,對每個位元組進行校驗的同時,應儘量減少特徵字和校驗字。慣用的數據包格式由引導碼、長度碼、地址碼、命令碼、數據、校驗碼、尾碼組成,每個數據包長度達20~30位元組。在RS-485系統中這樣的協定不太簡練,因此向大家介紹適合RS-485使用的MODBUS標準協定。MODBUS協定採用下傳8個位元組,上傳7個位元組的方式進行通信,現已廣泛使用於水利、水文、電力等行業設備及系統的國際標準中。
協定規定
上位機傳送8個位元組召測指令,其中地址、設備類別、通信路由、指令類別、指令長度、指令各占1個位元組,CRC校驗碼占2個位元組;下位機應答7個位元組,地址、設備類別、數據長度各占1個位元組,數據、CRC校驗碼各占2個位元組。
CRC校驗規則
CRC初始化為&HFFFF(CRC_L=&HFF,CRC_H=&HFF),將CRC_L與傳輸的第一個位元組進行異或運算,然後將CRC進行右移(不循環)並判斷:如移出的位為1,則CRC再與&HA001進行一次異或運算;如移出的位為0,則CRC不變。如此右移8次即完成第一個位元組的校驗,重複上述運算及右移直至將全部位元組校驗完畢,所生成的CRC(16位)即為傳輸校驗碼。
系統維護
RS-485是一種低成本、易操作的通信系統,但是穩定性弱同時相互牽制性強,通常有一個節點出現故障會導致系統整體或局部的癱瘓,而且又難以判斷。故向讀者介紹一些維護RS-485的常用方法。
1.若出現系統完全癱瘓,大多因為某節點晶片的VA、VB對電源擊穿,使用萬用表測VA、VB間差模電壓為零,而對地的共模電壓大於3V,此時可通過測共模電壓大小來排查,共模電壓越大說明離故障點越近,反之越遠;
2.集中供電的RS-485系統在上電時常常出現部分節點不正常,但每次又不完全一樣。這是由於對RS-485的收發控制端TC設計不合理,造成微系統上電時節點收髮狀態混亂從而導致匯流排堵塞。改進的方法是將各微系統加裝電源開關然後分別上電;
3.匯流排連續幾個節點不能正常工作。一般是由其中的一個節點故障導致的。一個節點故障會導致鄰近的2~3個節點(一般為後續)無法通信,因此將其逐一與匯流排脫離,如某節點脫離後匯流排能恢復正常,說明該節點故障;
5.筆者曾遇到MCU故障導致TC端處於長髮狀態而將匯流排拉死一片的現象,故提醒讀者不要忘記對TC端的檢查。儘管RS-485規定差模電壓大於200mV即能正常工作。但實際測量:一個運行良好的系統其差模電壓一般在1.2V左右(因網路分布、速率的差異有可能使差模電壓在0.8~1.5V範圍內)。
雖然RS-485匯流排存在一些缺點,但只要處理好細節,性能還是比較穩定的。