USB-485隔离转换器
2016-12-22 by Stavros调试各种设备经常用到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也赶紧出个免晶振的版本吧.