一、RS485通訊介紹,RS485通訊網(wǎng)絡(luò)
RS232接口是一種用于近距離(最大30-60米)、慢速度、點(diǎn)對(duì)點(diǎn)通訊的通訊協(xié)議,在RS232中一個(gè)信號(hào)只用到一條信號(hào)線,采取與地電壓參考的方式,因而在長(zhǎng)距離傳輸后,發(fā)送端和接收端地電壓有出入,容易造成通訊出錯(cuò)或速度降低。
RS485/422接口采用不同的方式:每個(gè)信號(hào)都采用雙絞線(兩根信號(hào)線)傳送,兩條線間的電壓差用于表示數(shù)字信號(hào)。例如把雙絞線中的一根標(biāo)為 A(正),另一根標(biāo)為B(負(fù)),當(dāng)A為正電壓(通常為+5V),B為負(fù)電壓時(shí)(通常為0),表示信號(hào)“1”;反之,A為負(fù)電壓,B為正電壓時(shí)表示信號(hào) “0”。RS485/422允許通訊距離可達(dá)到1200米,采用合適的電路可達(dá)到2.5MB/s的傳輸速率。
RS422與RS485采用相同的通訊協(xié)議,但有所不同:它采用兩根雙絞線,數(shù)據(jù)可以同時(shí)雙向傳遞(全雙工)。 而RS485則采用一根雙絞線,輸入輸出信號(hào)不能同時(shí)進(jìn)行(半雙工),RS485可用于多點(diǎn)通訊,一條信號(hào)線上可連接多個(gè)設(shè)備,它通常采用主/從結(jié)構(gòu)。
在RS485(半雙工)通信中,發(fā)送信號(hào)時(shí),由TXD輸出的TTL電平信號(hào)經(jīng)RS485轉(zhuǎn)換器轉(zhuǎn)換后,從發(fā)送器(A和B)輸出RS485信號(hào);接收信號(hào)時(shí),RS485信號(hào)經(jīng)接收器(A和B)接收后,然后RS485轉(zhuǎn)換器將信號(hào)轉(zhuǎn)換為TTL電平信號(hào),傳給RXD。(注意:2個(gè)需要通訊設(shè)備之間是各有一個(gè)RS485轉(zhuǎn)換器,并不是它們的信號(hào)只經(jīng)過(guò)了一個(gè)RS485轉(zhuǎn)換器就成功通訊了)
在RS422(全雙工)通信中,因信號(hào)的輸入和輸出分開(kāi),所以需要兩根雙絞線來(lái)傳送輸入和輸出信號(hào),標(biāo)為A、B、Y、Z(A為輸入信號(hào)的正極,B為輸入信 號(hào)的負(fù)極,Y為輸出信號(hào)的正極,Z為輸出信號(hào)的負(fù)極)。發(fā)送信號(hào)時(shí),由TXD輸出的TTL電平信號(hào)經(jīng)RS422轉(zhuǎn)換器后,從發(fā)送器(Y和Z)輸出RS485/RS422 信號(hào);接收信號(hào)時(shí),RS485/RS422信號(hào)經(jīng)接收器(A和B)接收后,RS422轉(zhuǎn)換器將信號(hào)轉(zhuǎn)換為TTL電平信號(hào),傳給串口的RXD。
圖1:DM系列RS485/RS422接口轉(zhuǎn)換器原理圖(半雙工)
圖2:DM系列RS485/RS422接口轉(zhuǎn)換器原理圖(全雙工)
以上圖片只是貼出了一半的接線圖,這里給出一張多機(jī)通訊的RS485接線原理圖(半雙工)
二、典型接法
DM485的輸出端最多可以連接256個(gè)RS485接口,其典型接法如圖3(半雙工)和圖4(全雙工)所示。在最遠(yuǎn)的兩個(gè)終端上,輸入和輸出端之間各需接 上一個(gè)120歐姆的電阻。在RS485/RS422的接口連接時(shí),甲接口的輸出端接乙接口的輸入端,雙絞線的正極接正極,負(fù)極接負(fù)極;甲接口的輸入端接乙 接口的輸出端,雙絞線的正極接正極,負(fù)極接負(fù)極。
三、注意事項(xiàng)
1、在長(zhǎng)距離傳輸中,一定要使用用雙絞線
2、多終端傳輸時(shí),距離最遠(yuǎn)的兩個(gè)終端上,輸入和輸出端之間一定連接120歐姆的電阻。
補(bǔ)充:我不知道為什么那么多的資料都沒(méi)有說(shuō)明RS485通信發(fā)送和接收數(shù)據(jù)時(shí)的細(xì)節(jié),都只說(shuō)2根線就能發(fā)送和接收數(shù)據(jù)??? 注意:485芯片有個(gè)控制端,控制端高電平時(shí)候?yàn)榻邮諗?shù)據(jù),低電平時(shí)候?yàn)榘l(fā)送數(shù)據(jù)。而我們?cè)趯?shí)際項(xiàng)目開(kāi)發(fā)的時(shí)候,在使用RS485通信時(shí),如果自己的電路并沒(méi)有設(shè)計(jì)成RS485硬件自收發(fā)切換的電路,則需要自己控制485的收發(fā)使能引腳。即發(fā)送數(shù)據(jù)時(shí),需要拉低485芯片控制端的IO口;相反接收數(shù)據(jù)時(shí),需要拉高控制端的IO口。
需要自己控制收發(fā)的485芯片原理圖:
控制策略:UART_CON為低電平,485處于接收狀態(tài);UART_CON為高電平,485處于發(fā)送狀態(tài)。通過(guò)切換UART_CON的電平來(lái)達(dá)到485收發(fā)狀態(tài)的切換。
485芯片硬件自動(dòng)收發(fā)切換電路:
接收:默認(rèn)沒(méi)有數(shù)據(jù)時(shí),在接收數(shù)據(jù)的過(guò)程中,TXD引腳是一直保持高電平的,三極管導(dǎo)通,RE低電平使能,485芯片處于接收狀態(tài),然后485芯片的RO引腳(也就是接RXD的引腳)就會(huì)反應(yīng)AB傳輸過(guò)來(lái)的數(shù)據(jù)。
發(fā)送:發(fā)送數(shù)據(jù)時(shí),TX會(huì)先有一個(gè)下拉的電平(起始位-由高向低),表示開(kāi)始發(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)通,RE變?yōu)榈碗娖剑蠢碚f(shuō)會(huì)讓接收使能,但是由于還處于發(fā)送數(shù)據(jù)中,這種狀態(tài)下MAX485處于高阻態(tài),此時(shí)的狀態(tài)通過(guò)A上拉電阻(R5),B下拉電阻(R4)決定,此時(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è)到開(kāi)始位后,再等待1.5位時(shí)間就開(kāi)始一位一位的進(jìn)行數(shù)據(jù)傳輸了,也就是說(shuō),已經(jīng)確定好發(fā)送狀態(tài),電路發(fā)送“1”時(shí)RE雖然有效,但是由于它處于發(fā)送階段,芯片也不會(huì)收,即芯片處于高阻狀態(tài)。