USB-485 隔離轉換器
調試各種設備經常用到 RS-485 匯流排, 但是現在的 PC 連 232 也基本沒有了, 只剩 USB 能用, 因此需要搞個 USB-485 的轉換器. 做法也簡單, 先用 CP2102/PL2303/CH340/FT232 之類 IC 把 USB 轉成 TTL 電平的串口信號, 再從 TTL 轉成 485. (順便點評一下: PL2303 太差勁, FT232 國內盜版太多, 用原廠驅動會燒, CP2102 好用但是只有 QFN 封裝, 手焊不太好焊, 還是國產的 CH340 最好用.)
這裡有個問題, 485 收發器都需要提供收 / 發方向信號 (也有自動切換方向的, 比如 MAX13487, 但是要用的時候總是買不到), 由 MCU 直接控制很容易, 但從 USB 轉出來的串口信號沒法判斷方向. 網上查到的通行做法是把 485 的 DI 腳直接接地, 串口 TXD 信號用晶體管反相後驅動 485 的 DE/RE 腳. 這樣在接收狀態時, TXD 空閑為高電平, 反相後把 485 的 DE/RE 拉低, 於是 485 方向為接收, 沒問題; 發送 0 時 TXD 為低電平, 反相後 485 的 DE/RE 腳拉高, DI 腳接地, 於是 485 輸出 0, 也沒問題. 發送 1 時 TXD 和空閑時一樣是高電平, 485 的 DE/RE 拉低, 方向為接收, 此時 485 的 A/B 腳是高阻狀態, 靠 A 的上拉和 B 的下拉電阻輸出 1. 這樣確實能通訊, 短距離工作也一切正常, 但是總覺得不太可靠.
偶然發現國產晶元: 江蘇沁恆的 CH341 居然有個 TNOW 腳指示串口發送狀態, 這樣就不需要上面的笨辦法了; 而且 datasheet 里還給了用它轉換 485 的例子. 於是馬上照做了一個, 果然好用, 目前 115200 波特率收發測試正常, 有空再試更高的波特率.
原理圖如下, 485 驅動器用了 ADI 的 ADM2483, 磁耦合隔離, 很好用. 不過它兩邊都要供電, 所以得再加個金昇陽的隔離電源 B0505S. 如果用自帶供電的 ADM2587, 這個隔離電源也可以省掉, 不過 ADM2587 實在太貴了. USB 端加了 TVS 保護, 485 端以後考慮也加一個.
ps. 沁恆的 CH340 最近出了免 12M 晶振的新版本 CH340B/C, 實測 750kbps 好用, 1.5Mbps 時發幾百位元組偶爾丟一位元組數據, 總之已經很不錯了. CH341 也趕緊出個免晶振的版本吧.
推薦閱讀: