485通信实现自动收发功能

这是我参与更文挑战的第27天,活动详情查看: 更文挑战

在平时使用485通信时,好多人往往首选的就是MAX485芯片,如下图所示:

​常规的方法就是使用RE和DE引脚通过程序来切换接收数据和发送数据,但是这样写起程序来比较麻烦,调试起来也比较费劲。为了方便的调试代码,于是就在芯片外围搭建电路来实现接收和发送数据的自动切换。

比如通过下面的电路可以实现485芯片接收数据和发送数据的自动切换,不再需要通过程序来控制RE和DE引脚实现接收和发送的切换。

控制原理:MCU的UART的TX和RX引脚需要连上拉电阻(TX和RX在没有通信时均是高电平),防止刚上电TX和RX引脚电平不稳定引起收到扰乱数据。

输出端口A接上拉电阻,输出端口B接下拉电阻,终端并联120欧姆电阻,D1、D2、D3为三个防雷防浪涌的TVS管。

接收: 默认没有数据时,UART_TX为高电平,三极管导通,MAX485芯片RE低电平使能,RO接收数据使能,此时从485AB口收到什么数据就会通过RO通道传到MCU,完成数据接收过程。

发送: 当发送数据时,UART_TX会有一个下拉的电平,表示开始发送数据,此时三极管截止,DE为高电平发送使能。

当发送数据‘0 ’时,由于DI口连接地,此时数据‘0 ’就会传输到AB口 A-B<0,传输‘0 ’,完成了低电平的传输。

当发送‘1 ’时,此时三极管导通,按理说RO使能,此时由于还处在发送数据中,这种状态下MAX485处于高阻态,此时的状态通过A上拉B下拉电阻决定,

此时A-B>0传输‘1 ’,完成高电平的传输。

PS: 此时有人肯定也会有疑惑,发送数据‘1 ’,三极管导通RE低电平有效应该是接收使能,为什么芯片会是高阻状态?

因为UART发送收据会有一定的格式,数据均以“位”为最小单位进行传输。在收发数据之前,UART之间要约定好数据的传输速率

(即每位所占据的时间,其倒数为波特率)、数据的传输格式(有多少数据位、是否有校验位、奇校验还是偶校验、是否有停止位)。

平时数据线处于“空闲状态”(1状态)。当发送数据时,TX由‘1 ’变为‘0 ’维持1位的时间,这样收方检测开始位后,再等待1.5位时间就开始一位一位的进行数据传输。意思是说,已经确定好发送状态,电路发送‘1 ’此时RE有效,接收有效但有由于它处于发送阶段,此时芯片会处于高阻状态。

通过这种外部电路可以实现接收和发送的自动切换,现在不用外部电路,可以直接使用MAX13487E芯片就能实现接收和发送的自动切换。

现在看一下MAX13487E芯片的管脚框图。

可以看到MAX13487E的引脚和MAX485引脚只有第3引脚不一样,其他引脚都是一样的。

下面接着看这些引脚的功能

​通过引脚功能可以看到,3脚是关断引脚,当3脚是高电平时芯片为正常模式,当3脚是低电平时,芯片就会进入关断模式。

2脚的功能比MAX485芯片2脚多了一个功能,当2脚是低电平时,芯片处于接收模式,当2脚是高电平时,芯片就会进入到自动方向控制模式,此时接收数据和发送数据都是芯片内部自动切换,不需要程序和外部电路的参与。

接下来再看看芯片的应用推荐电路

​将2脚和3脚都接为高电平,此时芯片就会处于自动方向控制模式,其他引脚的应用和MAX485芯片一样,不需要修改。

通过对比可以看到使用MAX13487芯片进行485通信处理更加方便和高效。

如果在实际应用中不需要隔离电路的话,可以直接将单片机的接收和发送口和芯片连接。

将2、3脚都接VCC,这样485通信时就可以像操作串口那样,直接去读数据或者写数据了,代码中就不用关心接收和发送引脚的电平了。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享