在上一篇的時候我們聊到 Parallel 轉 Serial 的 UART 篇的時候你可能有注意到有提過已經從 UART 轉換完成的 Serial 訊號已經可以用來傳輸通訊了,那為什麼還要把 UART 轉出來的訊號再轉換成成其他的 Serial 介面,像是 RS232/RS485 再進行傳輸呢?原因是 UART 的 Serial 訊號傳輸的距離實在太短了。
使用 9600 Baudrate 的 UART Serial 訊號傳輸距離只有 1 米!
電訊號的通訊距離會跟它的 BaudRate 的大小成反比,想要訊號傳得遠就要降低 BaudRate 的設定;Baudrate 也跟傳輸速率成正比,想要更大的頻寬(單位時間內傳輸更多數據)就需要加大 BaudRate 的設定,結果是傳輸效率越高傳輸距離就越短、如果再考慮傳輸線上的線阻,走在上面的電訊號也會隨著傳輸距離增加逐漸衰減到零,所以整體距離還需要再打些折扣。因此 Serial 通訊設計上有必要再多加一個 EIA Driver 把 UART Serial 訊號轉成其他可實現長距離通訊的 Serial 介面,例如 RS232/RS485 這兩個經典的 Serial To Serial 的介面。
BaudRate 越大,傳輸速率越高,距離越短
RS232 使用的實體介面的 Pin 腳有 9 根 (DB9) ,其中負責傳輸訊號有三條分別是 Rx,Tx 跟 Gnd。Gnd 又叫做地線或是參考線代表本身沒有電壓的狀態 (0V),主要是讓 Rx 或 Tx 用來參考判讀電壓用的,所以 Gnd 在 RS232 的通訊架構裡是必要的存在,這種參考地線來計算電壓的通訊模式也叫做 single-end (單端點)。
RS232 在訊號傳輸設計是利用拉高電壓方式來處理,RS232 的 EIA Driver 就是負責把 3.3V 的 UART Serial 訊號升壓到 5V-25V 電壓的 Serial 訊號的過程。可以想像訊號傳遞就像波浪一樣,電壓越高代表有比較多的能量(電位能),一樣是 9600 BaudRate 的 RS232 介面傳輸距離可達到 15m。過長的傳輸距離會讓訊號衰減變型的太嚴重落入判定無效區。
另外,RS232 這種 single-end 的設計也很怕外部訊號干擾也是另一個影響傳輸距離的原因,傳輸距離越常被干擾的可能性越大,沒做好隔離電磁突波很容易就把 Rx 或 Tx 上的訊號給撞到變形(Gnd 沒有電壓不受影響)。
當發展來到了 RS485 的時候又有了重大的突破。首先,通訊架構進一步被簡化,UART 出來的 Serial 經過 RS485 的 EIA Driver 變成只有兩條線 D+/D-,特色是傳輸的時候這兩條線都有電壓在上面跑,如果我們把 D+/D- 的波形合併在一個畫面上看,就會看到 D+ 與 D- 是互相對稱的訊號波形,接收端利用計算電壓差 (D+ - D-) 的範圍來決定 0 或 1,這種利用計算電壓差的傳輸方式叫做 differential 差分訊號。
差分訊號特色是接線架構簡單、使用的電壓 1.5V 更低外,最大的好處就是訊號抗干擾的能力很強!因為 RS485 訊號傳輸的時候遇到有電磁干擾時,兩條線都會承受相同的電壓增減幅度,結果兩者的差值不變所以換算出來的 0 跟 1 不變。抗干擾能力可以讓傳輸距離大幅提升,一樣是 9600 BaudRate 的 RS485 傳輸距離一口氣來到了 1200 米了。不過,差分訊號的設計也是有困擾的地方,就是通訊時兩條線都要使用結果只能做到半雙工無法同時收送傳輸效率會減半。
通過通訊介面把兩個或以上的設備給串連就能形成「網路」,所有串連在相同網路上的裝置就可以互相通訊。按照連接的型態或者叫做拓樸形態可以分成三種 Point to Point (點對點), Multidrop (多分支), Multipoint (多點)。
Point to Point 是專線只能接兩台裝置,也是 RS232 唯一支持的模式。不過 RS232 的 Pin 腳設計同時有 RX / TX,相當於提供了兩組通訊通道,所以能夠做到全雙工收發同時進行。
Multidrop, Multipoint 是 RS485 支持的架構,先說 Multidrop ,它在同一時間內只能有一台設備傳送訊息,其他設備只能接收訊息行為很像廣播,是屬於半雙工模式。那有沒有全雙工的 RS485?有的,也許你有聽過 4 線的 RS485 架構 (跟 RS422 相同) 那個就是了,所謂的 4 線 RS485 就是再多加一組 D+/D-,這樣就有兩組通訊線,一組可以拿來接收資料 Rx+/Rx- 使用,另一組拿來發送資料 Tx+/Tx-,這種 4 線全雙工且支持多點裝置連線架構就是 Multipoint 了。
目前 RS232/RS485 仍是工控領域很 popular 的 Serial 通訊介面架構簡單實用。實務上我們還是會碰到其他的 Serial 傳輸介面 USB, CAN.. 等,不過轉換的道理都是一樣的,都是先經過電腦的 UART 轉換將 Parallel 轉成 Serial 再透過對應的的 EIA Driver 轉換後再出去,都是為了解決 UART 傳輸距離過短以及傳輸過程中的干擾問題。最後我也把一份比較表放在這裡方便日後查找。