在电子发烧友网站上,看到RS232转RS485的一个电路图,如下图所示。元件主要是HN232CP和MAX485CPA,也就是TTL转232电路和TTL转485电路的结合体。可是这个电路却不好分析,几经查找与思考,才得到一点觉悟。

  此电路在使用时,PC机RS232公口或者标准串口接“直连串口通讯线”的一端,串口线的另一端接接该电路最左端的RS232接口上;右端就是RS485输出端。注意串口通讯线分为“直连线”和“交叉线”,这里用的是“直连线”。这是因为标准串口的2脚、3脚分别为“接收端”和“发送端”。该电路的发送端(T1OUT)和接收端(R1IN)分别接的是3脚和2脚,已经对发送端和接收端进行了交叉调换,所以用直连线就可以了。

  在正式分析之前,先看一下HIN232的结构框图,有助于我们接下来的分析。当然此结构图也就是电平转换,但需要注意的是信号的流向,从哪儿进来,又从哪儿出去。此外,RS232是负逻辑电平,我们可以认为逻辑“1”的时候,RS232对应的是-12V;逻辑“0”,RS232对应的是+12V。

  以RS232端作为参考端,在接收时,数据从RS485端向左通过转换电路中绿线所示的通路流向RS232端。处于接收状态的接收端,不会发送数据,也就是处于等待状态,此时TX管脚输出逻辑1(协议规定)。TX在串口公口上对应的引脚是管脚3,RS232是负逻辑,所以输出-12V,经过反相调整后输出TTL高电平,约4.6V。再经过三极管的Q1反相,输出低电平,RE、DE都为低电平的时候,MAX485处于接收状态。

  发送的情况有些复杂,需要耐心分析。数据从RS232端向右通过转换电路中蓝线所示的通路流向RS485端。当输出逻辑低电平,TX(3管脚)对应输出+12V,经过反向调整输出TTL低电平,约0.4V。再经过三极管的Q1反相,输出高电平,RE、DE都为高电平的时候,MAX485处于发送状态,可以正确的将逻辑低电平发送。  

  倘若输出逻辑高电平的时候,TX(3管脚)对应输出-12V,经过反向调整输出TTL高电平,约4.6V。再经过三极管的Q1反相,输出低电平,RE、DE都为低电平的时候,MAX485处于接收状态,如何会将1发送出去呢?

MAX485发送和接收逻辑电平转换关系表

  

  从转换关系表--左图中,可以看出当RE、DE都为低电平的时候,输出为高阻态,也就是说此时485总线是处于高阻态。当232转485电路发送的时候,最右边的总线节点处于接收状态,意味着此节点上的max485cpa的RE、DE都为低电平(通常我们把RE、DE短接)。从转换关系表--右图中可以看出,485总线高阻态的时候,它接收的结果是1。这不正是我们要发送的数据吗。

  或许人提出这样的疑问:既然转换电路中的max485都已经处于接收状态了(RE、DE都为低电平),为何又说它在发送数据1?这是由于一帧数据的发送,包括起始位0、有效数据区、停止位等。从左边向右边传输1帧数据的时候,肯定会先发起始位0以同步右边的接收器。紧接着,加入发送数据1,虽然转换电路中的max485处于接收状态,虽然此时的总线为高组态,但是右边的接收器仍然要把这个高组态翻译成1,并且保存起来,只是因为这个传送已经启动,要把一帧数据完全接收。

  所以,可见这样的发送,是从最右端接收数据的角度来说。整个发送过程,转换电路中的max485可能不断的切换发送与接收的状态,但是从接收端来讲,始终是在接收数据,这是行的通的。

参考网页:RS232转RS485电路图

     基于3.3V供电RS485接口实现远距离通信的电路设计

RS232转RS485电路图分析的更多相关文章

  1. RS-232, RS-422, RS-485 Serial Communication General Concepts(转载)

    前面转载的几篇文章重点介绍了UART及RS-232.在工控领域除了RS-232以外,常用的串行通信还有RS-485.本文转载的文章重点介绍了RS-232.RS-422和RS-485. Overview ...

  2. TTL、RS232、RS485、串口

    Point: 1.串口.COM口是指的物理接口形式(硬件).而TTL.RS-232.RS-485是指的电平标准(电信号). 2.接设备的时候,一般只接GND RX TX.不会接Vcc或者+3.3v的电 ...

  3. RS232与RS485时序分析

    转载于:RS232,RS485波形分析 经常遇到初学者,对单片机串行通讯出了问题不知道如何办的情况.其实最有效的调试方法是用示波器观察收发数据的波形.通过观察波形可以确定以下情况: 是否有数据接收或发 ...

  4. 无源RS232转RS485(转)

    源:无源RS232转RS485 RS232  -485转换器主要包括了电源.232电平转换.485电路三部分.本电路的232电平转换电路采用了NIH232或者也可以直接使用MAX232集成电路,485 ...

  5. UART\RS232与RS485的关系

    https://blog.csdn.net/lhl161123/article/details/53510593 串口通讯是电子工程师面对的最基本的一个通讯方式,RS-232是其中最简单的一种.然而, ...

  6. 串口、COM口、TTL、RS-232、RS-485区别详解

    1.串口.COM口是指的物理接口形式(硬件).而TTL.RS-232.RS-485是指的电平标准(电信号).    2.接设备的时候,一般只接GND RX TX.不会接Vcc或者+3.3v的电源线,避 ...

  7. 【转】RS232、RS485、TTL电平、CMOS电平

    原文网址:http://blog.sina.com.cn/s/blog_63a0638101018grc.html RS232.RS485.TTL电平.CMOS电平 什么是TTL电平.CMOS电平.R ...

  8. UART和RS232/RS485的关系,RS232与RS485编程

    http://wpp9977777.blog.163.com/blog/static/4625100720138495943540/ 串口通讯是电子工程师和嵌入式开发工程师面对的最基本问题,RS232 ...

  9. RS232、RS485和TTL电平与串行通信

    RS232.RS485和TTL 作为一个底层软件开发工程师,经常会碰到RS232.RS485和TTL这一类的问题. 之前总是碰到问题之后Google一下,把当下的问题解决了之后就不管了,过个一两天就忘 ...

随机推荐

  1. C#_MVC_分页update

    private static string getLinkHtml(UrlHelper urlHelper, bool useAjax, string ajaxSuccessFunction, str ...

  2. 在oc代码中使用swift第三方框架

    swift现在使用越来越多了,一些主流的框架或者效果比较好的demo都陆陆续续使用swift写了.所以,要学会如何在oc的项目中调用swift. 这里主要借助一个桥梁文件,这个桥梁文件一般在你导入sw ...

  3. 基于Selenium2+Java的UI自动化(2) - 启动浏览器

    一.准备工作 我们常用的浏览器主要有三个:chrome.Firefox.IE:其中chrome 和 IE 需要下载驱动程序,才能启动浏览器,注意驱动程序有32位和64位两种. 另外:如何查看本机的浏览 ...

  4. 移动端web学习总结

    前言: 一直想做一个移动端的阶段性学习总结,但是工作太忙总是加班.现在总算可以抽出一点时间来写一写,把知道的都写下来,这样就算忘掉了,也能很快想起来,不要太机智啊,哈哈哈! 一.移动端页面常识 1.常 ...

  5. JDBC与ODBC的区别与应用

    jdbc是使用通过JAVA的数据库驱动直接和数据库相连,而jdbc-odbc连接的是ODBC的数据源,真正与数据库建立连接的是ODBC! 建议使用JDBC直接连接,同时最好使用连接池! JDBC 是 ...

  6. ios llvm and clang build tools

    1. 使用 libclan g或 clang 插件 包括( libclang 和  Clangkit) 备注: Clangkit,它是基于 clang 提供的功能,用 Objective-C 进行封装 ...

  7. HTTP 和 Socket 的区别

    要弄明白 http 和 socket 首先要熟悉网络七层:物 数 网 传 会 表 应,如图1 如图1 HTTP 协议:超文本传输协议,对应于应用层,用于如何封装数据. TCP/UDP 协议:传输控制协 ...

  8. C语言文件读写

    1.用fopen打开文件 该函数的原型为FILE *fopen(const char *filename, const char *mode),第一个参数是文件名,第二个参数是打开文件的模式. 打开文 ...

  9. 06_XML的写入_dom4j添加、删除、修改Xml文件内容

    [工程截图] [person.xml]准备一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <st ...

  10. JAVA笛卡尔曲线

    效果图如下: import java.applet.*; import java.awt.*; public class Descartes extends Applet { int AppletWi ...