素材來源:網(wǎng)絡(luò)
轉(zhuǎn)自:8號線攻城獅
如上三張圖片大致示意485芯片的收發(fā)特性,這里有個概念。 RS485抗噪音抗干擾能力強(qiáng)、傳輸距離遠(yuǎn)、支持多點(diǎn)通信,是工控行業(yè)首選串行接口。485規(guī)定的電氣特性為2線,半雙工多點(diǎn)通信。采用兩線差分信號傳輸數(shù)據(jù),具有抗共模干擾的能力。由于是半雙工模式,因此通訊時需要切換收發(fā)狀態(tài)。目前常用的485收發(fā)切換方案有以下幾種: 1.傳統(tǒng)RS485電路(帶收發(fā)控制腳非隔離RS-485電路)
傳統(tǒng)的485應(yīng)用電路如下圖所示,采用3線控制,UART_RXD、UART_TXD和收發(fā)控制端UART_CON。
控制策略如下:UART_CON為低電平,485處于接收狀態(tài);UART_CON為高電平,485處于發(fā)送狀態(tài)。通過切換UART_CON的電平來達(dá)到485收發(fā)狀態(tài)的切換。
2.硬件自收發(fā)切換 非隔離RS-485電路
帶收發(fā)控制腳的485在編程時需要切換控制端電平,增加了程序的復(fù)雜度。為了編程方便,常常將電路改為如上圖所示的自動收發(fā)電路。這種采用分立元件搭建非隔離自動收發(fā)RS485電路的優(yōu)點(diǎn)在于控制簡單,收發(fā)控制腳不需要程序干預(yù)。
雖然采用分立元件搭建的非隔離RS485自動收發(fā)電路解決了帶收發(fā)控制腳非隔離RS485電路編程上操作復(fù)雜的問題,但受三極管切換速度、收發(fā)器內(nèi)部接口阻抗等影響,分立元件搭建的自動收發(fā)切換電路降低了系統(tǒng)穩(wěn)定運(yùn)行的最大波特率。
3.收發(fā)切換隔離RS485電路
帶有隔離電路的485是最穩(wěn)定的設(shè)計(jì),需要選擇隔離485芯片以及隔離電源,此方案成本相對于前兩種方案會高很多。
下面介紹一種485硬件收發(fā)切換電路實(shí)例。
485芯片采用MAX485芯片,電路使用NPN三極管開切換收發(fā)。控制原理是:MCU的UART的TX和RX引腳需要連上拉電阻(TX和RX在沒有通信時均是高電平),防止剛上電TX和RX引腳電平不穩(wěn)定引起收到擾亂數(shù)據(jù)。A上拉電阻B下拉電阻,終端并聯(lián)120歐姆電阻,D10、D11、D12為三個防雷防浪涌的TVS管。
接收:默認(rèn)沒有數(shù)據(jù)時,UART_TX為高電平,三極管導(dǎo)通,MAX485芯片RE低電平使能,RO接收數(shù)據(jù)使能,此時從485AB口收到什么數(shù)據(jù)就會通過RO通道傳到MCU,完成數(shù)據(jù)接收過程。
發(fā)送:當(dāng)發(fā)送數(shù)據(jù)時,UART_TX會有一個下拉的電平,表示開始發(fā)送數(shù)據(jù),此時三極管截止,DE為高電平發(fā)送使能。當(dāng)發(fā)送數(shù)據(jù)‘0’時,由于DI口連接地,此時數(shù)據(jù)‘0’就會傳輸?shù)紸B口 A-B<0,傳輸‘0’,完成了低電平的傳輸。當(dāng)發(fā)送‘1’時,此時三極管導(dǎo)通,按理說RO使能,此時由于還處在發(fā)送數(shù)據(jù)中,這種狀態(tài)下MAX485處于高阻態(tài),此時的狀態(tài)通過A上拉B下拉電阻決定,此時A-B>0傳輸‘1’,完成高電平的傳輸。
PS: 此時有人肯定也會有疑惑,發(fā)送數(shù)據(jù)‘1’,三極管導(dǎo)通RE低電平有效應(yīng)該是接收使能,為什么芯片會是高阻狀態(tài)?
因?yàn)閁ART發(fā)送收據(jù)會有一定的格式,數(shù)據(jù)均以“位”為最小單位進(jìn)行傳輸。在收發(fā)數(shù)據(jù)之前,UART之間要約定好數(shù)據(jù)的傳輸速率(即每位所占據(jù)的時間,其倒數(shù)為波特率)、數(shù)據(jù)的傳輸格式(有多少數(shù)據(jù)位、是否有校驗(yàn)位、奇校驗(yàn)還是偶校驗(yàn)、是否有停止位)。平時數(shù)據(jù)線處于“空閑狀態(tài)”(1狀態(tài))。當(dāng)發(fā)送數(shù)據(jù)時,TX由‘1’變?yōu)椤?’維持1位的時間,這樣收方檢測開始位后,再等待1.5位時間就開始一位一位的進(jìn)行數(shù)據(jù)傳輸。意思是說,已經(jīng)確定好發(fā)送狀態(tài),電路發(fā)送‘1’此時RE有效,接收有效但有由于它處于發(fā)送階段,此時芯片會處于高阻狀態(tài)。 三種常用電路如下:
1、基本的RS485電路
上圖是最基本的RS485電路,R/D為低電平時,發(fā)送禁止,接收有效,R/D為高電平時,則發(fā)送有效,接收截止。上拉電阻R7和下拉電阻R8,用于保證無連接的SP485R芯片處于空閑狀態(tài),提供網(wǎng)絡(luò)失效保護(hù),提高RS485節(jié)點(diǎn)與網(wǎng)絡(luò)的可靠性,R7,R8,R9這三個電阻,需要根據(jù)實(shí)際應(yīng)用改變大小,特別是使用120歐或更小的終端電阻時,R9就不需要了,此時R7,R8使用680歐電阻。正常情況下,一般R7=R8=4.7K,R9不要。
圖中鉗位于6.8V的管V4,V5,V6,都是為了保護(hù)RS485總線的,避免受外界干擾,也可以選擇集成的總線保護(hù)原件。另外圖中的L1,L2,C1,C2為可選安裝原件,用于提高電路的EMI性能.
2、帶隔離的RS485電路
根本原理與基本電路的原理相似。使用DC-DC器件可以產(chǎn)生1組與微處理器電路完全隔離的電源輸出,用于向RS485收發(fā)器提供+5V電源。電路中的光耦器件速率會影響RS485電路的通信速率。上圖中選用了NEC的光耦PS2501,受其影響,該電路的通訊速率控制在19200bps下。
3、自動切換電路
上圖中,TX,RX引腳均需要上拉電阻,這一點(diǎn)特別重要。
接收:默認(rèn)沒有數(shù)據(jù)時,TX為高電平,三極管導(dǎo)通,RE為低電平使能,RO收數(shù)據(jù)有效,MAX485為接收態(tài)。
發(fā)送:發(fā)送數(shù)據(jù)時,TX會先有一個下拉的電平(起始位-由高向低),表示開始發(fā)送數(shù)據(jù),此時三極管截止,DE為高電平發(fā)送使能。當(dāng)發(fā)送數(shù)據(jù)“0”時,由于DI接口相當(dāng)于接地,此時數(shù)據(jù)“0”就會傳輸?shù)紸B扣,A-B<0,則傳輸“0”,完成低電平傳輸,當(dāng)發(fā)送“1”時,此時三極管導(dǎo)通,按理說RO會使能,此時由于還處于發(fā)送數(shù)據(jù)中,這種狀態(tài)下MAX485處于高阻太,此時的狀態(tài)通過A上來,B下拉電阻決定,此時A-B>0傳輸“1”,完成高電平的傳輸。 注意:這里面有個疑惑,發(fā)送數(shù)據(jù)“1”,三極管RE低電平有效,應(yīng)該是接收使能,為什么芯片是高阻態(tài)呢?這是因?yàn)閁ART發(fā)送數(shù)據(jù)是有一定格式的,TX和RX數(shù)據(jù)均以“位”為最小單位進(jìn)行傳輸,在發(fā)送數(shù)據(jù)之前,UART之間要約定好數(shù)據(jù)傳輸速率,即波特率,數(shù)據(jù)傳輸格式(數(shù)據(jù)位,校驗(yàn),停止),平時數(shù)據(jù)線處于空閑狀態(tài)(1狀態(tài)),當(dāng)發(fā)送數(shù)據(jù)時,TX由“1”變?yōu)椤?”維持1位的時間,這樣接收方檢測到開始位后,再等待1.5位時間就開始一位一位的進(jìn)行數(shù)據(jù)傳輸了,也就是說,已經(jīng)確定好發(fā)送狀態(tài),電路發(fā)送“1”時RE雖然有效,但是由于它處于發(fā)送階段,芯片也不會收,即芯片處于高阻狀態(tài)。 問題經(jīng)驗(yàn)總結(jié):
問題: 485總線在通訊中,當(dāng)某一節(jié)點(diǎn)出現(xiàn)故障時,其他一些節(jié)點(diǎn)會被影響,出現(xiàn)通信故障。
解決方法:在每個節(jié)點(diǎn)的AB線上串入一個22歐姆左右的電阻,同時協(xié)議的編制一定要考慮到故障偵測和報(bào)警。
問題:當(dāng)485總線處于開路(485收發(fā)器與總線斷開)或者空閑狀態(tài)(485收發(fā)器全部處于接收狀態(tài),總線沒有收發(fā)器進(jìn)行驅(qū)動)時,485總線的差分電壓基本為0,此時總線就處于一個不確定的狀態(tài)。 解決方法:在485總線上增加上下拉電阻(通常A接上拉電阻,B總線下拉電阻,一般為1K左右)。 理論依據(jù):根據(jù)RS-485標(biāo)準(zhǔn),當(dāng)485總線差分電壓大于+200mV時,485收發(fā)器輸出高電平;當(dāng)485總線差分電壓小于-200mV時,485收發(fā)器輸出低電平;當(dāng)485總線上的電壓在-200mV~+200mV時,485收發(fā)器可能輸出高電平也可能輸出低電平,但一般總處于一種電平狀態(tài),若485收發(fā)器的輸出低電平,這對于UART通信來說是一個起始位,此時通信會不正常。
推薦閱讀: 英特爾工藝真的落后了嗎?
gcc和g++是什么,有什么區(qū)別?
TCP三次握手和四次揮手以及11種狀態(tài)
關(guān)注 微信公眾號『strongerHuang』,后臺回復(fù)“1024”查看更多內(nèi)容,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。
長按前往圖中包含的公眾號關(guān)注
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!