TTL串口是我们日常做电子产品调试时候常用的一种通讯口,你可以用它来控制外设芯片,可以用它来做调试输出。之所以TTL串口这么受大众欢迎,是因为在硬件层面,它连接简单,只需要RXD、TXD和GND三根线即可连接两台机器进行通讯,而且通讯方向全双工。软件层面,TTL串口没有复杂的协议栈,软件处理非常简单。
但是,5V电平的TTL串口显然无法做长距离的通讯,因为串行通讯在较长距离(1m以上)传输时,由于传输线缆的阻抗因素影响,外加外部电磁环境的干扰,5V的单端通讯电平显然无法做长距离传输的。事实上,现在一些单片机的电压都普遍为3.3V,因此这些单片机自带的串口只能做一些近距离的调试,或者一些PCB板内的传感器、模块控制。
为了克服TTL串口传输距离不足的问题,RS232串口采用了一种最直接的办法来解决。其具体做法为:
1 将TTL串口的0~5V电平标准提升到了-12V~+12V;
2 将原本TTL串口中规定的0V表示数字0,5V表示数字1这样的正逻辑进行反向,采用了这种负逻辑形式,具体规定为-12V表示数字1,+12V表示数字0。
这样的作法可以解决两个问题,首先-12V电平在电路系统中不是常规电压,因此将其表示数字1的好处是,即是通讯电缆上有一个正电压的干扰进来,也不会被误判为1。其次将电压标准提高到了±12V,可以大大增加传输的驱动力。
介于此,RS232可以用来传输一些频率不是很高,干扰不是很强,距离较长(综合距离60m~150m左右,具体看实际环境)的信息。因此RS232早前被广泛用于小型机终端接入,广告牌通讯等应用。
三线制的RS232有着诸多的有点,如传输距离适中,电缆成本低,通讯简单等。但是由于RS232需要接受双方的RXD和TXD线交叉连接,因此这种连接方式注定只能在两台设备之间点对点连接。而且在高干扰的电磁环境中,单端式的电平通信根本无法保证通讯的可靠性。
RS232采用单端式电压信号传输有效信息,单端式的通讯很难满足长距离的通讯,因为单端信号距离过长时,地线的阻抗,地线的干扰,还有信号的失真都会对通讯质量产生影响。而且随着科技的发展,点对点的通讯远远满足不了现代的智能仪表和智能设备技术了,这种智能仪表和只能设备的应用最重要的一点就是可以多机组网,而RS485的出现解决了这个问题。
RS485是一种利用差分传输的半双工接口,又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485。RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,该标准由电信行业协会和电子工业联盟定义。使用该标准的数字通信网络能在远距离条件(1200m左右,100Kbps情况下)下以及电子噪声大的环境下有效传输信号。
RS485信号的传输是通过一组差分线来实现的,一般标记为A(非反向(non-inverting)信号)和B反向(inverting)信号。A和B信号的关系,RS-485标准中提到:
若是MARK(逻辑1),线路B信号电压比线路A高;
若是SPACE(逻辑0),线路A信号电压比线路B高。
一个由RS485组成的总线系统中最多可以挂接32个节点,这个总线网络是半双工的,即每一时刻只能允许一个设计发送信息。由于硬件上RS485网络没有CSMA/CD(载波侦听多路访问/冲突检测)机制,因此利用RS485组成的总线系统,必定是单主机多从机形式的。大多数时刻,从机都是处于接收状态,当主机请求自己数据发送时,主机进入接收状态,被选中的从机进入发送状态,将信息发送给主机。
RS485接口传输的信号虽然是差分信号,但是我们在日常应用的时候,还是需要将其转换为TTL串口送入单片机去处理的。
常用的RS485转TTL串口的芯片有MAX485系列芯片,这个系列芯片中包含了多种其它型号的芯片,这些芯片使用方法一模一样,引脚Pin-to-Pin兼容,其原理图为:
这些芯片的区别也是存在的,主要的区别主要在传输速率,支持的最大节点数等。
MAX485/MAX487系列的芯片,其中的A(Pin6)和B(Pin7)用来传输RS485差分信号,一个总线网络中的两个端节点需要借一个120Ω的匹配电阻。
VCC(Pin8)和GND(Pin5)分别是电源和地,输入电压为4.75V ≤ VCC ≤ 5.25V。
RO(Pin1)是数据输出,其实转换成TTL之后就是TTL的RXD,DI(Pin4)是数据输入,转换成TTL之后,就是连接TTL的TXD。
RE(Pin2)是接接收数据使能,DE(Pin3)是发送使能。前面我们说过,由于RS485是半双工的,因此需要通过MCU来控制整个数据的流向,这两个信号一个是互斥的,因此我们为了节约IO口和收发逻辑不冲突,因此使用时都将这两个引脚接到同一个IO口,这样,当IO口为1时,DE有效,此时RS485总线上的信号是单片机TXD信号转成的差分信号,当IO口为0时,RE有效,此时的单片机RXD引脚一直在监控RS485总线上的数据。