终于讲透--史上最详细的RS485自动收发电路

摘要:关于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为低,接收器使能,反之接收器禁止。

这样就得到了一个结论

  1. ED: 1 发送使能;0发送禁止
  2. 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引脚有两个用处

  1. RE为低电平时,打开RO方向的接收数据。
  2. RE为高电平时,芯片进入自动方向切换模式。

我们将RE连接高电平,即自动换向模式。

对应的原理图就是下面这样:

直接将PIN2和PIN3接到VCC即可实现自动收发功能。而且MAX13487E还要便宜一些。

那么如果现在然你设计一个485电路,你会采取那种方案呢?

根据下面流程写一个基于modbus的stm32程序,1.前言 因项目中需要用到485电路以及多设备通讯,采用Modbus协议通讯方式,本文写的目的就是记录笔记也提供给初学者一点参考。里面的内容可能会有错误,仅供参考。 2.485电路 上图是项目中的电路,也算一个基本的485电路,没什么好的,这个博主的不错,可以参考他的。 终于了,史上详细RS485自动收发电路你一定要掌握-优快云博客 https://blog.youkuaiyun.com/qq_39400113/article/details/122387133?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171393570316800227442090%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171393570316800227442090&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~top_positive~default-2-122387133-null-null.nonecase&utm_term=485%E7%94%B5%E8%B7%AF&spm=1018.2226.3001.4450 3.Modbus协议 学习以前参考以下博文链接: STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发_stm32modbus主机-优快云博客 https://blog.youkuaiyun.com/qq_37281984/article/details/122739968 3.1 Modbus协议简介 Modbus协议是一种应用层报文传输协议,协议本身并没有定义物理层,所以支持多种电气接口,直接可以理解成他是软件层面的,各种的电气接口比如RS232、RS485、TCP/IP等,他们是硬件层面。他们之间互不影响。 3.2 Modbus通讯过程 Modbus是一主多从的通信协议 Modbus通信中只有一个设备可以发送请求。其他从设备接收主机发送的数据来进行响应,从机是任何外围设备,如I/O传感器,阀门,网络驱动器,或其他测量类型的设备。从站处理信息和使用Modbus将其数据发送给主站。 也就是说,不能Modbus同步进行通信,主机在同一时间内只能向一个从机发送请求,总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信。 从机不会自己发送消息给主站,只能回复从主机发送的消息请求。 3.3 Modbus功能码 Modbus协议同时规定了二十几种功能码,但是常用的只有3种,用于对存储区的读写,如下表所示: 我们主要就是用到03h读取从机寄存器的数据,06h对从机指定寄存器写入指定数据,10h对从机多个寄存器写入数据。 3.4 Modbus协议格式 我们主要就是学习它的协议格式,主要用到3种功能码,也就对应与3种发送数据的格式。 3.4.1 03H功能码-读取数据-协议格式 比如 :主机发送 01 03 00 01 00 01 D5 CA 主机一共发送8个字节。 0x01:表示主机要与从机地址是0x01的设备进行通讯 0x03:功能码,代表我们发送这个指令的作用是什么,03表示我们要读取从机的数据 0x00:要读取从机寄存器地址的高位 0x01:要读取从机寄存器地址的低位 0x00:要读取从机寄存器数量的高位 0x01:要读取从机寄存器数量的低位 D5:前6位数据效验的低位 CA:前6位数据效验的高位 总得来说这段代码的含义是:查询从机地址为0x01的0x0001寄存器地址的0x0001个数据。 从机收到这段协议后,应回复如下格式 01 03 02 00 03 F8 48 从机一共发送7个字节 0x01:表示主机要与从机地址是0x01的设备进行通讯 0x03:功能码,代表我们发送这个指令的作用是什么,03表示我们要读取从机的数据 0x02:返回的数据个数(要读取的寄存器个数*2)——>返回数据的字节都是寄存器的2倍 0x00:从机返回数据的高位 0x03:从机返回数据的低位 F8 48:前面几位数据的效验码 3.4.2 06H功能码-写入数据-单寄存器-协议格式 比如 :主机发送 01 06 00 01 00 17 98 04 主机一共发送8个字节。 0x01:表示主机要与从机地址是0x01的设备进行通讯 0x03:功能码,代表我们发送这个指令的作用是什么,0
03-19
### RS485 SP3485E 自动收发电路设计 #### 设计概述 RS485接口广泛应用于工业控制领域,其中SP3485E作为常见的RS485通信芯片之一,在实现自动收发切换方面具有显著优势。该设计方案旨在通过合理的硬件配置和逻辑控制来简化通信系统的复杂度并提高可靠性。 #### 工作原理 在无数据传输状态下,UART_TX保持高电平,这使得NMOS晶体管导通,进而让SP3485E的\( \text{DE} \)与\( \text{\(\overline{RE}\)} \)引脚被拉至低电平,从而激活接收模式[^1]。此时任何来自外部设备的数据都将经由RO引脚传递给微控制器(MCU),完成一次完整的读取操作。 对于发送动作而言,则需改变上述条件:当有新消息待发出时,MCU会先将要传送的信息写入DI引脚;与此同时,设置\( \text{DE}=\text{\(\overline{RE}\)=H} \),这样就能开启驱动器部分的功能,允许内部产生的信号经过转换后输出到总线上的A/B两端之间形成差分电压。值得注意的是,在实际应用过程中应当确保每次仅有一个节点处于发送状态以免造成冲突现象的发生[^2]。 #### 关键元件说明 - **SP3485E**: 提供半双工异步串行通信能力,支持高达10Mbps的数据率,并具备静电放电保护特性。 - **N沟道MOSFET (如BS170)**: 用于根据UART的状态连接或断开\( \text{DE}/\text{\(\overline{RE}\)} \)线路。 - **上/下拉电阻**: 稳定未活动期间的A/B线电位,防止不确定状态影响正常工作。 #### 原理图示意 以下是基于以上描述构建的一个简单而有效的RS485自动收发电路示意图: ```plaintext +-------------------+ | | | MCU |-----> UART_RXD | |<----- UART_TXD | | +--------+----------+ | \|/ +---------+ | | | BS170 | | | +--||--+--+ || || GND Vcc /\ /__\ A B / \ +-----------+-------+ | | | | SP3485E | | |___________|_______| ``` 请注意此图为简化版本,具体实施时还需考虑更多细节因素比如电源滤波、隔离措施等以增强整体性能表现。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值