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