摘要: 关于 485 通讯大家肯定不陌生, 那么你会设计一个 485 电路而且能自带收发功能的吗? 或者还是直接随便找一个电路甚至不管其中的原理就用上了. 485 通信一般离不了单片机控制, 所以一般单片机尤其是 STM32 单片机之类的开发板上面都有 RS485 通信模块, 因为 485 通讯只需要你的 MCU 有串口就可以了.
下面再某宝上找了几款 STM32 开发板上面关于 485 通信模块的电路图, 发现有几家竟然电路图一模一样, 而且画法也一模一样.
原子哥
硬石
普中
洋桃
安富莱
野火
可以发现, 485 通讯模块大家普遍用的只有两种芯片, SP3485 和 MAX485, 而且原理图画的都差不多.
1, 传统 RS485 电路
不管是 SP3485 还是 MAX485 它们电路都是一样的.
先说一下原理: 因为单片机通信一般是 TTL 电平, 而我们的外接设备如果是 485 设备, 通信的电平就是 485 电平, 这两者的电平是不一样的, 所以两者不能直接相接一起. 中间需要一个电平转换的芯片来协商一下, 所以就有了我们的 485 芯片. 因为 485 通信是半双工的, 就是发送数据的时候不能同时接收数据, 所以我们又把 485 芯片叫做半双工收发器. 而 SP3485 芯片就是一款非常经典的低功耗半双工收发器, 满足 RS-485 串行协议要求.
然后这款芯片的引脚定义如下:
RO 一 接收器输出
RE 一 接收器输出使能(低电平有效)
DE - 驱动器输出使能(高电平有效)
DI 一 驱动器输入
GND 一 连接地
A - 驱动器输出 / 接收器输入(同相)
B - 驱动器输出 / 接收器输入(反相)
VCC - 芯片供电
现在你可能有疑问? 这个引脚怎么叫做接收器也叫输出器啊? 还真人这么问. 一般在 485 设备的数据向 MCU 发送时我们把芯片叫做接收器, 因为它接收了外界的数据. 在 MCU 向 485 设备发送数据时我们把芯片叫做驱动器, 因为这时候像是我们驱动了芯片让它向外发送数据.
SP3485 的驱动器输出是差分输出, 空载时输出电压的大小为 0V~+3.3V.SP3485 有一根使能控制线 (高电平有效).DE 上的逻辑高电平(1) 将使能驱动器的差分输出.
SP3485 接收器的输入是差分输入, 接收器的输入电阻通常为 15K. 如果 RE 为低, 接收器使能, 反之接收器禁止.
这样就得到了一个结论
ED: 1 发送使能; 0 发送禁止
RE: 0 接收使能; 1 接收禁止
因此, 我们一般将 ED 和 RE 接在一起, 单片机 MCU 向外发送数据时, 将 USART_EN 置位 1, 单片机 MCU 接收外界送数据时, 将 USART_EN 置位 0, 即可.
当然我们在写程序时候, 就相对会比较麻烦, 因为我们要在接收和发送时将 USART_EN 引脚置位不同的电平.
那么有没有一种可以自动收发功能的电路呢?
答案是有的, 只要我们在这个电路的基础上加一个三极管就可以解决了.
2, 自动切换收发的 RS485 电路
大家看我们在前面电路的基础上加了一个经典的三极管开关电路. 电阻 R6, 电阻 R7 和 NPN 三极管 Q1 组成一个典型的三极管开关电路. R7 是限流电阻, 最好选择 4.7K, 也可以选择 10K.R6 是上拉电阻, 可以选择 4.7K 或者 10K.
学过模电大家知道, NPN 三极管, 高电平导通. 当 TX 高电平, 三极管导通, RE 和 DE 引脚接地, 进入接收模式. 当 TX 低电平, 三极管截止, RE 和 DE 引脚接高电平, 进入发送模式.
疑问?
DI 引脚本来是接 TX 的, 现在直接接地了, 那岂不是发送的数据都是 0? 可以正常工作吗?
答: 当然可以!
发送数据过程
发送数据, 用的是单片机的 TX 引脚, 也就是说, 在 TX 引脚上表现数据. 要发送数据 0x32, 写成二进制就是 0x00110010,TXD 引脚上就会依次的用高低电平体现 1 和 0.
当 TX 发送 0 时, 三极管不导通, DE 接高电平, 进入发送模式, 485 芯片会把 DI 上的电平反应到 AB 引脚上输出, 因为 DI 已经接地, 所以 AB 引脚会传输 0. 所以, 当 TXD 发送 0 时, AB 引脚发送 0.
当 TX 发送 1 时, 三极管导通, RE 接低电平, 进入接收模式, 485 芯片的 AB 引脚进入高阻状态, 因为 R3 把 A 拉高, R2 把 B 拉低, 所以, AB 传输的是 1. 所以, 当 TXD 发送 1 时, AB 引脚发送 1.
一句话: TXD 发 1,AB 就发 1;TXD 发 0,AB 就发 0.
接收数据过程
接收数据, 用的是单片机引脚 RX, 在 RXD 引脚上表现数据. 在接收数据的过程中, TX 引脚是一直保持高电平的, 当 TXD 是高电平时, RE 是低电平, 正好变成了接收状态, 然后 485 芯片的 RO 引脚 (也就是接 RX 的引脚) 就会接收 AB 传输过来的数据.
怎么样神奇吧!
那么有没有一款芯片可以自带自动切换收发功能的呢? 答案是有的.
3, 自动切换方向芯片 - MAX13487
为了克服软件参与的方向控制不确定性, 美信公司发布了宣称首款支持芯片自动换向的 RS485 芯片 - MAX13487.
对比其他的 RS485 芯片, MAX16487 的 RE 引脚有两个用处
RE 为低电平时, 打开 RO 方向的接收数据.
RE 为高电平时, 芯片进入自动方向切换模式.
我们将 RE 连接高电平, 即自动换向模式.
对应的原理图就是下面这样:
直接将 PIN2 和 PIN3 接到 VCC 即可实现自动收发功能. 而且 MAX13487E 还要便宜一些.
那么如果现在然你设计一个 485 电路, 你会采取那种方案呢?
来源: https://blog.csdn.net/qq_39400113/article/details/122387133