各位工程師是否會(huì)遇到這樣的情況,測(cè)試單個(gè)RS-485設(shè)備數(shù)據(jù)無(wú)異常,但設(shè)備組網(wǎng)后,就出現(xiàn)通訊數(shù)據(jù)異?;蜻B接失敗等情況。出錯(cuò)的原因是什么?本文將從門限電平為你揭秘RS-485組網(wǎng)異常。
RS-485總線是具有結(jié)構(gòu)簡(jiǎn)單、通信距離遠(yuǎn)、通信速度高、成本低等優(yōu)點(diǎn),廣泛應(yīng)用于工業(yè)通訊、電力監(jiān)控以及儀器儀表等行業(yè)。若總線上接有終端電阻,則在總線空閑狀態(tài)時(shí),RS-485總線AB差分電壓可能處于門限電平(±200mV)之內(nèi),這時(shí)可能會(huì)導(dǎo)致通信出錯(cuò),那么,出錯(cuò)的原因是什么?MCU接收到的數(shù)據(jù)會(huì)發(fā)生什么樣的變化?
數(shù)據(jù)出錯(cuò)的原因
如圖1所示為8位數(shù)據(jù)位無(wú)校驗(yàn)位的UART時(shí)序圖,當(dāng)使用UART進(jìn)行通信時(shí),MCU在檢測(cè)到起始位后開(kāi)始接收其后的數(shù)據(jù)。
圖1 無(wú)校驗(yàn)位,8位數(shù)據(jù)位,串口時(shí)序圖
如圖2所示為STM32串口外設(shè)檢測(cè)到起始位的條件,當(dāng)檢測(cè)到下降沿(3個(gè)高電平+1個(gè)低電平)并且采樣序列1和采樣序列2均為0時(shí),STM32檢測(cè)到一個(gè)起始位。
每個(gè)位采樣16次,采樣點(diǎn)的間隔時(shí)間為tbit/16,tbit為每個(gè)位的時(shí)間,例如通信波特率為115.2kbps,則tbit=1/115.2k=8.68us,則采樣點(diǎn)的間隔時(shí)間為8.68us/16=0.5425us。
圖2 STM32串口外設(shè)檢測(cè)到起始位的條件
下面以RSM485PCHT的門限電平為例進(jìn)行說(shuō)明,當(dāng)AB差分電壓處于±200mV之內(nèi)時(shí),模塊RXD引腳輸出狀態(tài)不確定。
當(dāng)總線變?yōu)榭臻e時(shí),若RXD引腳輸出低電平,則可能導(dǎo)致MCU接收到錯(cuò)誤數(shù)據(jù)或MCU在正常數(shù)據(jù)后誤接收1個(gè)000。
圖3 RSM485PCHT門限電平
數(shù)據(jù)發(fā)生了什么變化?
如圖4所示,收發(fā)器1在AB差分電壓處于±200mV門限電平之內(nèi)時(shí)輸出高電平,收發(fā)器2在AB差分電壓處于±200mV門限電平之內(nèi)時(shí)輸出低電平,可以看出,收發(fā)器2可能導(dǎo)致MCU接收到錯(cuò)誤的數(shù)據(jù),并且在數(shù)據(jù)后誤接收到1個(gè)000數(shù)據(jù)。
圖4 數(shù)據(jù)后多000
如圖5所示,若總線上持續(xù)存在數(shù)據(jù)信號(hào)或連續(xù)發(fā)送多個(gè)字節(jié)數(shù)據(jù),在數(shù)據(jù)之間存在的空閑狀態(tài)可能會(huì)被收發(fā)器2識(shí)別為1個(gè)起始位,從而導(dǎo)致數(shù)據(jù)連續(xù)錯(cuò)誤。
圖5 數(shù)據(jù)連續(xù)錯(cuò)誤
解決方案
總線空閑時(shí)若AB差分電壓處于門限電平之內(nèi),則可能導(dǎo)致數(shù)據(jù)出錯(cuò),可以使用如下方法避免總線空閑時(shí)AB差分電壓處于門限電平之內(nèi)。