RS485抗噪音抗干擾能力強(qiáng)、傳輸距離遠(yuǎn)、支持多點(diǎn)通信,是工控行業(yè)首選串行接口。485規(guī)定的電氣特性為2線,半雙工多點(diǎn)通信。采用兩線差分信號(hào)傳輸數(shù)據(jù),具有抗共模干擾的能力。由于是半雙工模式,因此通訊時(shí)需要切換收發(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在編程時(shí)需要切換控制端電平,增加了程序的復(fù)雜度。為了編程方便,常常將電路改為如上圖所示的自動(dòng)收發(fā)電路。這種采用分立元件搭建非隔離自動(dòng)收發(fā)RS485電路的優(yōu)點(diǎn)在于控制簡(jiǎn)單,收發(fā)控制腳不需要程序干預(yù)。 雖然采用分立元件搭建的非隔離RS485自動(dòng)收發(fā)電路解決了帶收發(fā)控制腳非隔離RS485電路編程上操作復(fù)雜的問題,但受三極管切換速度、收發(fā)器內(nèi)部接口阻抗等影響,分立元件搭建的自動(dòng)收發(fā)切換電路降低了系統(tǒng)穩(wěn)定運(yùn)行的最大波特率。 3.收發(fā)切換隔離RS485電路 帶有隔離電路的485是最穩(wěn)定的設(shè)計(jì),需要選擇隔離485芯片以及隔離電源,此方案成本相對(duì)于前兩種方案會(huì)高很多。 下面介紹一種485硬件收發(fā)切換電路實(shí)例。 485芯片采用MAX485芯片,電路使用NPN三極管開切換收發(fā)??刂圃硎牵篗CU的UART的TX和RX引腳需要連上拉電阻(TX和RX在沒有通信時(shí)均是高電平),防止剛上電TX和RX引腳電平不穩(wěn)定引起收到擾亂數(shù)據(jù)。A上拉電阻B下拉電阻,終端并聯(lián)120歐姆電阻,D10、D11、D12為三個(gè)防雷防浪涌的TVS管。 接收: 默認(rèn)沒有數(shù)據(jù)時(shí),UART_TX為高電平,三極管導(dǎo)通,MAX485芯片RE低電平使能,RO接收數(shù)據(jù)使能,此時(shí)從485AB口收到什么數(shù)據(jù)就會(huì)通過RO通道傳到MCU,完成數(shù)據(jù)接收過程。 發(fā)送: 當(dāng)發(fā)送數(shù)據(jù)時(shí),UART_TX會(huì)有一個(gè)下拉的電平,表示開始發(fā)送數(shù)據(jù),此時(shí)三極管截止,DE為高電平發(fā)送使能。當(dāng)發(fā)送數(shù)據(jù)‘0’時(shí),由于DI口連接地,此時(shí)數(shù)據(jù)‘0’就會(huì)傳輸?shù)紸B口 A-B<0,傳輸‘0’,完成了低電平的傳輸。當(dāng)發(fā)送‘1’時(shí),此時(shí)三極管導(dǎo)通,按理說RO使能,此時(shí)由于還處在發(fā)送數(shù)據(jù)中,這種狀態(tài)下MAX485處于高阻態(tài),此時(shí)的狀態(tài)通過A上拉B下拉電阻決定,此時(shí)A-B>0傳輸‘1’,完成高電平的傳輸。 PS: 此時(shí)有人肯定也會(huì)有疑惑,發(fā)送數(shù)據(jù)‘1’,三極管導(dǎo)通RE低電平有效應(yīng)該是接收使能,為什么芯片會(huì)是高阻狀態(tài)? 因?yàn)閁ART發(fā)送收據(jù)會(huì)有一定的格式,數(shù)據(jù)均以“位”為最小單位進(jìn)行傳輸。在收發(fā)數(shù)據(jù)之前,UART之間要約定好數(shù)據(jù)的傳輸速率(即每位所占據(jù)的時(shí)間,其倒數(shù)為波特率)、數(shù)據(jù)的傳輸格式(有多少數(shù)據(jù)位、是否有校驗(yàn)位、奇校驗(yàn)還是偶校驗(yàn)、是否有停止位)。 平時(shí)數(shù)據(jù)線處于“空閑狀態(tài)”(1狀態(tài))。當(dāng)發(fā)送數(shù)據(jù)時(shí),TX由‘1’變?yōu)椤?’維持1位的時(shí)間,這樣收方檢測(cè)開始位后,再等待1.5位時(shí)間就開始一位一位的進(jìn)行數(shù)據(jù)傳輸。意思是說,已經(jīng)確定好發(fā)送狀態(tài),電路發(fā)送‘1’此時(shí)RE有效,接收有效但有由于它處于發(fā)送階段,此時(shí)芯片會(huì)處于高阻狀態(tài)。 三種常用電路如下:1、基本的RS485電路上圖是最基本的RS485電路,R/D為低電平時(shí),發(fā)送禁止,接收有效,R/D為高電平時(shí),則發(fā)送有效,接收截止。上拉電阻R7和下拉電阻R8,用于保證無連接的SP485R芯片處于空閑狀態(tài),提供網(wǎng)絡(luò)失效保護(hù),提高RS485節(jié)點(diǎn)與網(wǎng)絡(luò)的可靠性,R7,R8,R9這三個(gè)電阻,需要根據(jù)實(shí)際應(yīng)用改變大小,特別是使用120歐或更小的終端電阻時(shí),R9就不需要了,此時(shí)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電源。電路中的光耦器件速率會(huì)影響RS485電路的通信速率。上圖中選用了NEC的光耦PS2501,受其影響,該電路的通訊速率控制在19200bps下。 3、自動(dòng)切換電路上圖中,TX,RX引腳均需要上拉電阻,這一點(diǎn)特別重要。 接收:默認(rèn)沒有數(shù)據(jù)時(shí),TX為高電平,三極管導(dǎo)通,RE為低電平使能,RO收數(shù)據(jù)有效,MAX485為接收態(tài)。 發(fā)送:發(fā)送數(shù)據(jù)時(shí),TX會(huì)先有一個(gè)下拉的電平(起始位-由高向低),表示開始發(fā)送數(shù)據(jù),此時(shí)三極管截止,DE為高電平發(fā)送使能。當(dāng)發(fā)送數(shù)據(jù)“0”時(shí),由于DI接口相當(dāng)于接地,此時(shí)數(shù)據(jù)“0”就會(huì)傳輸?shù)紸B扣,A-B<0,則傳輸“0”,完成低電平傳輸,當(dāng)發(fā)送“1”時(shí),此時(shí)三極管導(dǎo)通,按理說RO會(huì)使能,此時(shí)由于還處于發(fā)送數(shù)據(jù)中,這種狀態(tài)下MAX485處于高阻太,此時(shí)的狀態(tài)通過A上來,B下拉電阻決定,此時(shí)A-B>0傳輸“1”,完成高電平的傳輸。 注意:這里面有個(gè)疑惑,發(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í)數(shù)據(jù)線處于空閑狀態(tài)(1狀態(tài)),當(dāng)發(fā)送數(shù)據(jù)時(shí),TX由“1”變?yōu)椤?”維持1位的時(shí)間,這樣接收方檢測(cè)到開始位后,再等待1.5位時(shí)間就開始一位一位的進(jìn)行數(shù)據(jù)傳輸了,也就是說,已經(jīng)確定好發(fā)送狀態(tài),電路發(fā)送“1”時(shí)RE雖然有效,但是由于它處于發(fā)送階段,芯片也不會(huì)收,即芯片處于高阻狀態(tài)。 問題經(jīng)驗(yàn)總結(jié): 問題:485總線在通訊中,當(dāng)某一節(jié)點(diǎn)出現(xiàn)故障時(shí),其他一些節(jié)點(diǎn)會(huì)被影響,出現(xiàn)通信故障。 解決方法:在每個(gè)節(jié)點(diǎn)的AB線上串入一個(gè)22歐姆左右的電阻,同時(shí)協(xié)議的編制一定要考慮到故障偵測(cè)和報(bào)警。 問題:當(dāng)485總線處于開路(485收發(fā)器與總線斷開)或者空閑狀態(tài)(485收發(fā)器全部處于接收狀態(tài),總線沒有收發(fā)器進(jìn)行驅(qū)動(dòng))時(shí),485總線的差分電壓基本為0,此時(shí)總線就處于一個(gè)不確定的狀態(tài)。 解決方法:在485總線上增加上下拉電阻(通常A接上拉電阻,B總線下拉電阻,一般為1K左右)。 理論依據(jù):根據(jù)RS-485標(biāo)準(zhǔn),當(dāng)485總線差分電壓大于+200mV時(shí),485收發(fā)器輸出高電平;當(dāng)485總線差分電壓小于-200mV時(shí),485收發(fā)器輸出低電平;當(dāng)485總線上的電壓在-200mV~+200mV時(shí),485收發(fā)器可能輸出高電平也可能輸出低電平,但一般總處于一種電平狀態(tài),若485收發(fā)器的輸出低電平,這對(duì)于UART通信來說是一個(gè)起始位,此時(shí)通信會(huì)不正常。
|