踩坑又給項(xiàng)目埋雷,這RS485自動(dòng)收發(fā)電路設(shè)計(jì)
發(fā)布時(shí)間:2024-10-21作者:admin點(diǎn)擊:58
這個(gè)文章的題目有點(diǎn)騙眼球的感覺(jué),其實(shí)是自己踩過(guò)大坑,很是痛恨這個(gè)電路,希望大家以后不要踩了。工程師要畫(huà)這個(gè)電路時(shí),網(wǎng)上一搜,不經(jīng)深入分析就拿來(lái)用,給項(xiàng)目埋了炸彈。
RS485自動(dòng)收發(fā)電路
因?yàn)镽S485采用叉分信號(hào),只支持半雙工。正常的RS485芯片驅(qū)動(dòng)電路是需要GPIO來(lái)切換發(fā)送和接收模式。如下圖所示,一般的RS485電平轉(zhuǎn)換芯片都有RE/DE腳,用來(lái)切換收發(fā)模式。
RS485標(biāo)準(zhǔn)電路參考
嵌入式行業(yè),特別是MCU相關(guān)的都比較愛(ài)摳成本,便宜的MCU往往就是GPIO數(shù)量不夠。如果是上Linux系統(tǒng)的方案,一般串口支持RS485就還得改GPIO驅(qū)動(dòng),會(huì)有軟件工作量。于是有大聰明發(fā)明了自動(dòng)切換的電路,省掉了那個(gè)GPIO。下圖是網(wǎng)上找的一個(gè)自動(dòng)收發(fā)電路圖,收發(fā)原理直接看圖中文字描述。
1. 不發(fā)送數(shù)據(jù)時(shí),接收模式,沒(méi)問(wèn)題。
2. 發(fā)送數(shù)據(jù)0時(shí),發(fā)送模式,輸出0,沒(méi)問(wèn)題。
3. 發(fā)送數(shù)據(jù)1時(shí),接收模式,外圍A,B由上下拉電路控制,輸出1,問(wèn)題出在這里。
RS485自動(dòng)收發(fā)電路
三極管的關(guān)斷時(shí)間較長(zhǎng)(主要是由于三極管關(guān)斷時(shí)的存儲(chǔ)時(shí)間較長(zhǎng)),因此若TXD發(fā)送低電平,DE&RE引腳較長(zhǎng)時(shí)間后才會(huì)升至高電平,才會(huì)切到發(fā)送模式,發(fā)送低電平的延時(shí)時(shí)間較長(zhǎng),如下圖所示為1.204 μs。
關(guān)斷延時(shí)
二是自動(dòng)收發(fā)電路發(fā)送高電平是通過(guò)外部上下拉電阻驅(qū)動(dòng)的,上升沿較緩慢,波形如下圖所示,可以看出,發(fā)送高電平的上升沿較為緩慢,限制了高速通信的應(yīng)用。
上下拉驅(qū)動(dòng)上升沿緩慢
RS485自動(dòng)收發(fā)電路風(fēng)險(xiǎn)
如下圖所示,TXD變?yōu)楦唠娖?,DE&RE引腳降為低電平,AB差分電壓緩慢上升,由于此時(shí)RS-485收發(fā)器已經(jīng)處于接收狀態(tài),在AB差分電壓上升至RS-485收發(fā)器門(mén)限電平前RXD引腳會(huì)出現(xiàn)到一段時(shí)間的低電平信號(hào),例如門(mén)限電平為-200mV~-50mV的收發(fā)器,AB差分電壓上升至-50mV前RS-485收發(fā)器均可輸出低電平,此低電平信號(hào)的時(shí)間與AB差分電壓上升時(shí)間和RS-485收發(fā)器的接收延時(shí)有關(guān)。由于串口一般是將每個(gè)位分成16份,檢測(cè)中間的3份的電平信號(hào)從而確定此位的信號(hào)高低,因此若此低電平信號(hào)保持至每個(gè)位的信號(hào)檢測(cè)時(shí),則會(huì)使MCU接收到一個(gè)起始位,從而接收到錯(cuò)誤的數(shù)據(jù),因此這個(gè)問(wèn)題同樣限制了高速通信的應(yīng)用并且降低了通信的可靠性。
rxd接收到低電平
我們?cè)趯?shí)際應(yīng)用中就是遇到這個(gè)問(wèn)題,概率收到錯(cuò)誤數(shù)據(jù),導(dǎo)致丟包(數(shù)據(jù)校驗(yàn)不通過(guò)而丟棄)。在研發(fā)的環(huán)境中,連接的終端設(shè)備少,距離近,這個(gè)丟包概率比較低,不容易發(fā)現(xiàn)。在Modbus應(yīng)用中,概率丟包只會(huì)影響數(shù)值更新速度慢,影響不大。但是我們?cè)诂F(xiàn)場(chǎng)做升級(jí)操作時(shí),幾乎很難成功,因?yàn)樵谘邪l(fā)環(huán)境沒(méi)問(wèn)題,我們優(yōu)先排查現(xiàn)場(chǎng)環(huán)境信號(hào)干擾等問(wèn)題,浪費(fèi)了很多時(shí)間。這個(gè)電路有兩個(gè)缺點(diǎn):
1. 通信速度慢:
三極管有電容效應(yīng),導(dǎo)致關(guān)斷時(shí)間較長(zhǎng),導(dǎo)致RE/DE從低到高電平變化出現(xiàn)比較大的斜坡.同時(shí)485輸出高電平,是依靠上下拉來(lái)完成的,會(huì)導(dǎo)致上升沿不夠迅速,因此上下拉的阻值選擇也是影響速度的關(guān)鍵。
2. 驅(qū)動(dòng)能力弱:
由于當(dāng)tx為高,485電平是由其上拉電阻完成的,因此弱提高驅(qū)動(dòng)能力,就要減小電阻,由于485芯片驅(qū)動(dòng)能力有限,電阻太小會(huì)導(dǎo)致tx為低的時(shí)候,485芯片無(wú)法將485總線拉低,因此總線上所有上拉電阻的并聯(lián)值不應(yīng)該小于375歐。還用當(dāng)接入120歐的終端電阻的時(shí)候,AB兩相的電壓差由終端電阻和上下拉分壓得到,會(huì)導(dǎo)致AB兩相的電壓差變小,因此自動(dòng)收發(fā)串口轉(zhuǎn)RS485設(shè)計(jì)不太適合添加終端電阻。
終端電阻的問(wèn)題
終端電阻主要是為了匹配通信線的特性阻抗,防止信號(hào)反射,提高信號(hào)質(zhì)量。在組建RS-485總線網(wǎng)絡(luò)時(shí),通常使用特性阻抗為120Ω的屏蔽雙絞線,由于RS-485收發(fā)器輸入阻抗一般較高(例如RSM485ECHT輸入阻抗為96kΩ,最多可連接256個(gè)節(jié)點(diǎn)),在信號(hào)傳輸?shù)娇偩€末端時(shí)會(huì)由于受到的瞬時(shí)阻抗發(fā)生突變(以RSM485ECHT為例,阻抗由120Ω變?yōu)?6kΩ),導(dǎo)致信號(hào)發(fā)生反射,影響信號(hào)的質(zhì)量。
實(shí)際上只有距離+高速率的環(huán)境需要添加終端電阻,例如長(zhǎng)度>500米 + 波特率超過(guò)500kbps。
總結(jié)和建議
RS485總線和電路看似簡(jiǎn)單,但是要看應(yīng)用場(chǎng)景,對(duì)穩(wěn)定性有要求的不建議使用自動(dòng)收發(fā)驅(qū)動(dòng)電路。
在沒(méi)有遇到信號(hào)反射問(wèn)題時(shí),盡量不要使用終端電阻;硬件設(shè)計(jì)時(shí),可以預(yù)留外掛或焊接120Ω電阻的位置。
要查看RS485驅(qū)動(dòng)芯片的輸入阻抗參數(shù),和支持外掛設(shè)備數(shù)。上、下拉電阻與收發(fā)器輸入阻抗的并聯(lián)值應(yīng)大于375Ω;
如果是現(xiàn)場(chǎng)做工程項(xiàng)目,建議帶上萬(wàn)用表和示波器,測(cè)一下空閑狀態(tài)下的電壓值,收發(fā)的信號(hào)質(zhì)量,這樣才安心。