RS485接口具有抗干扰性强,适合长距离传输和多站点通讯等特点,因此在工业控制中被普遍使用。MCU只有UART接口,如果需要使用RS485通讯,需要外面加一个Transceiver。由于RS485工作在半双工模式,因此发送和接收的方向切换是设计过程中的一个重要问题。通常的接口电路有以下三种:
1)第一种方式是将MCU的UART TXD端通过控制三极管进行信号反转,然后接到Transceiver的输出使能端DE和接收使能端RE,并将Transceiver的A端接上拉电阻,B端接下拉电阻。电路图如下图所示:
该电路的控制原理是:默认情况下UART TXD为1,这时Transceiver的输出使能端DE和接收使能端RE为0,Transceiver工作在接收状态。当UART有信号输出时,TXD 首先会有一个低电平产生(起始位),这时Transceiver的输出使能端DE和接收使能端RE为1,Transceiver切换到发送状态,这时会把这个低电平发送出去。看到这里你肯定会有一个疑问,当发送的数据位为高电平时该如何发送出去呢?
由Transceiver的发送真值表可以看出,在发送过程如果DE变为0,那么输出时高阻态,因为这里在A、B端加了上拉和下拉电阻,所以这时输出为高电平。
该设计使得RS-485芯片的方向切换不需要在软件里做任何处理,减轻了软件调试的工作量,不过在硬件上需要在A、B端加上拉和下拉电阻。
2) 另外一种更常用的方式是通过MCU的GPIO去控制DE和RE
这种方法需要在软件中去控制GPIO的高低电平变化。当需要发送时控制GPIO为高电平,当需要接收时控制GPIO为低电平。
3)还有一种比较好的方法是通过UART的RTS引脚来控制DE和RE,当然这种方法的前提是MCU 的UART硬件流控功能才可以。Cortex-M4内核Kinetis MCU才具有。
这种方法的好处是在使用UART进行数据发送时它会自动产生流控信号。
在使用这个功能时在初始化时将UARTx_MODEM的TXRTSE设置为1,
TXRTSE置位0(默认就是0,可不设置)
之后在发送数据时会自动产生高电平,数据发送完变为电平,变为接收状态。
下图是我在实际使用过程中抓取到波形图。
MCU中RS485接口设计
最新推荐文章于 2024-07-05 22:03:12 发布