串口扫盲十一:RS-232至RS-485RS-422接口的智能转换器

2023-05-16

摘要:详细地介绍了如何从RS-232信号线上高效率地产生电源,如何实现RS-232接口与RS-485RS-422接口的智能转换,同时,也给出了具体的硬件设计及软件设计方法.

关键词:RS-232 RS-485RS-422 接口 智能转换器
随着计算机在工业的广泛应用,控制局域网络也深入应用到各行各业之中.现行的诸多控制系统,若采用单机控制方式已越来越难以满足设备控制的要求,因为往往我们所控制的设备只是整个系统的一个基本单元,它既需要外部输入一些必要的信息,同时,也需要向外部输出自身的运行参数和状态.所有这些,都要求我们采用控制网络技术,将众多设备有机地连成一体,以保证整个系统安全可靠地运行.

目前,在我国应用的现场总线中,RS-485RS-422使用最为普遍.当用户要将基于标准的RS-232接口设备,如PC机,连接至由RS-485RS-422构成的通讯网络时,则必须作RS-232和RS-485RS-422之间的电平转换.传统的做法是在设备内扩展一个通讯适配卡,由通讯适配卡实现电平转换,内部主机再通过并行总线读出或写入数据.显然,这种设计方法存在下列缺点:

  1. 由于适配卡是基于某一种总线标准扩展的,而不是基于RS-232电平标准,所以其应用范围受到限制,只能一种适配卡适用一种总线(如ISA适配卡不可能插入STD总线或用户自定义的总线),其通用性较差;
  2. 虽然实现的仅仅是电平转换,但是由于需要考虑与扩展总线的接口和增加一个标准的UART,并且需要占用系统的其它宝贵资源,使硬件和软件变得过于复杂;
  3. 复杂的硬件设计大大增加了元器件的数目和电路板面,使适配卡的成本过高;
  4. 由于采用内置插卡方式,使变更通信方式比较麻烦,如将半双工通信方式设置为全双工方式等.另外,维修和测试也比较麻烦;
  5. 对于现有的基于RS-232的设备,在无法变动系统软件和硬件的情况下,显然适配卡无法将这些设备连成基于RS-485或RS-422通信网络的分布式系统.
  6. 为了克服上述缺点,同时考虑到RS-232接口的自身特点,我们设计了一种小巧的、无须外部供电的智能收发转换器,实现RS-232和RS-485RS-422之间的电平转换.

1. 功能描述及结构框图

本智能转换器作为一个独立的电平转换控制器,涉及线上取电、发送和接收状态的智能切换、通信方式设置、RS-232电平与RS-485RS-422电平之间的转换等方面.具体描述如下:

  1. 从RS-232接口上取电

由于不采用外部供电方式,则必须从RS-232接口线取电,为内部元器件供电.我们知道,标准的RS-232接口定义中,TXD、RTS和DTR是RS-232电平输出.设计一个DC-DC转换器,从这些信号上,能够为系统提供一定的电源功率.

  1. 低功耗微处理器

微处理器通过监测TXD信号的变化,决定是否允许数据发送和数据接收.另外,有关通信方式、波特率和半/双工工作方式选择也是通过TXD信号,或I/O口来设定的.

  1. RS-232电平与TTL电平之间的转换
  2. RS-485RS-422电平与TTL电平之间的转换

其内部电路结构示意图如图1所示.

图1 只能转换器的内部电路结构示意图

2. 工作原理

该智能转换器必须解决两个关键问题,即如何从RS-232线上获得电源和RS-485RS-422接口驱动所需的功率,和如何智能控制RS-485RS-422的收发使能.

  1. 电源方案

标准的RS-232定义中,有三个发送信号:TXD,RTS和DTR.每根线上的典型输出电流为±8mA/±12V,考虑到TXD为负电平(处于停止发送,或发送数字”1”时)的时间较多,因而电源转换决定采用负电源输入,以最大限度地增加电源输入功率,升压至所需的工作电源.从RTS和DTR上输入功率=2×8×12mW=192mW.另外,由于通讯为间歇工作方式,所以输入电源端的储能电容和TXD(为负电平时)能够补充一定的功率.假设,我们设计一个效率为85%、输出电压为3V的DC-DC转换器,则输出电流可达54.5mA.

  1. 智能控制收发使能

RS-232通讯接口采用电平方式传输,适用于点-点通讯,无须专门的收发使能控制;而对于RS-485RS-422通讯接口则不同,由于采用差分电平方式传输,且允许在一条通讯总线上挂接多个节点,必然要求各个节点能够独立地控制总线驱动器关断或打开,保证不会影响到其它节点的正常通讯.为了简化与转换器RS-232接口端相连的软件工作,更重要的是为了提高本转换器的通用性和灵活性(即插即用,无须要求用户更改任何相关软件和硬件),本转换器内置微处理器,实现收发使能的智能控制.具体方法:微处理器在检测到UART的通信起始位后,打开发送使能,允许串行数据发送至RS-485RS-422通讯网络.微处理器根据所设定的波特率延时至UART停止位发送一半时(例如11位格式时,延时10.5T,T=/f(BAUD)).开始检测是否有下一个起始位到来.在时间T内,若有下一个起始位到来,则保持发送状态,否则将关闭发送使能,结束数据发送.

3. 硬件设计

由于本转换器供电来自RS-232信号线,其输入功率受到限制,因而在本设计中将尽可能地采用+3V供电的低功耗器件,保证总电流小于54.4mA.主要包括4个部分:DC-DC转换器、RS-232接口、RS-485RS-422接口和微处理器.分别介绍如下:

  1. DC-DC转换器

图2 -12V至3V,效率高于85%的DC-DC转换器

显然,还没有一个DC-DC转换器能够直接实现-12V输入,+3V输出的IC.但是,如果我们利用现有的IC,稍作改动,即可实现该功能.图2所示的DC-DC转换电路,就是利用MAX761实现的-12V输入,+3V输出、效率高于85%的升压DC-DC转换器.该转换器实际输入电压范围为-2.5~-13.5V,静态工作电流仅I1=120μA,具有输出电流大于54.5mA的能力(如果前端输入功率未受到限制,则输出电流可达300mA以上).由于MAX761采用高效率的PFM控制方式,而且在本电路中,开关损耗较小因为开关电流小于负载电流 所以能够达到比MAX761典型应用更高的效率MAX761典型应用效率为86%.输出电压由下列方程确定:

选取R2=100KΩ,根据所需要的输出电压,计算R1.

  1. RS-232接口

本转换器只需要一片单发/单收RS-232接口就可以满足要求,但必须要求+3V单电源工作、工作电流尽可能地小的接口电路.MAX3221/NAX3221E(带±15kVESD保护)刚好能够满足上述要求,具有1TX/1RX,其工作电压+3~+5.5V,仅1μA的静态电流,负载电流小于I2=2mA.

  1. RS-485RS-422接口

为兼顾RS-485RS-422接口中半双工和全双工的要求,本转换器采用MAX3491作为RS-485RS-422接口电路,其主要指标为:+3~+3.6V单电源工作、工作电流1mA驱动60Ω负载时(半双工时,两个120Ω终端匹配电阻的并联值),峰值电流可达I3=3V/60Ω=50mA.半双工和全双工工作方式是通过跳线器来设置的,见图3.

图3 RS-232到RS-485/RS422接口的智能转换

  1. 微处理器

在本转换器中,微处理器所要完成的任务很简单,仅需要几根I/O线即可实现参数的设置和发送使能的自动控制.实际选择中,采用Microchip公司的PIC12C508A,其主要指标为:工作电流 <1.0mA工作电压3V,频率4MHz)6条I/O线,512kByte的ROM.其中,GP0、GP1、GP4和GP5四个引脚设定对应于16种常用波特率(300、600、1200至38.4Kbps等8种,以及900、1800至115.4Kbps等8种)的延时时间;GP3对应于10位或11位串行数据格式;GP2为TXD输入,用来检测UART何时发送和停止数据;GP1为复用输出引脚,用来控制MAX3491的发送使能控制端;GP0也为复用输出引脚,用来控制MAX3491的接收使能.详见图3.

本转换器的最大电流总和<=0.12+2.0+50.0+1.0=53.12mA,小于DC-DC转换器的最小输出电流54.4mA,因而通过RS-232信号线为本电路供电是完全可行的.实际上,由于输入电源端的储能电容E1和TXD(为负电平时)能够为电路补充一定的功率,所以设计上留有较大的电源功率裕量.

4. 软件设计

本转换器的软件设计较为简单,微处理器复位后,将所有的I/O口设为输入,并读入所有的I/O状态,保存到寄存器;将GP2和GP3改设为输出状态,并输出低电平,使RS-485RS-422接口处于禁止发送、允许接收的状态.CPU根据GPI0的初始状态,确定出用户设定的通讯波特率和串行数据格式,从而预置内部的延时设定.CPU检测到UART开始通讯后,打开发送使能,经内部预置延时后,开始在一个位宽时间内检测是否有下一个起始位到来,如检测到,则重新延时等待;否则,关闭发送使能,结束当前通讯,重新检测UART的起始位.对于半双工通讯方式,允许发送使能前应该关闭接收使能,而在发送使能关闭后才打开接收使能.对于全双工通讯方式,其接收使能可以不受此信号控制,而可以直接通过跳线接地,始终允许接收.
总之,在本RS-232到RS-485RS-422接口的智能转换器设计中,除了本身这个产品具有较高的应用价值外,文中所涉及的RS-232信号线供电方案,由于其高效率、大电流输出能力,在许多基于RS-232接口的应用中都能够很好地满足应用;另外,这种智能控制RS-485RS-422接口的收发使能的思想,在扩展基于RS-485RS-422接口的网络分支及延伸通讯距离都能够得到很好的应用.

本文转自:http://cs.nju.edu.cn/yangxc/dcc2003.files/jszc-sub/comif-11.htm

转载于:https://www.cnblogs.com/jason-lu/articles/3173235.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串口扫盲十一:RS-232至RS-485RS-422接口的智能转换器 的相关文章

  • arguments

    arguments是什么 xff1f 答 是一个对象 xff0c 是一个长的很像数组的对象 arguments内容是什么 xff1f 答 arguments是函数运行时的实参列表 函数运行期间 xff0c 关键的三个对象 AO 本函数AO上
  • xcode5项目图标添加

    转载文章 地址http www 360doc com content 14 0103 08 14615320 342227413 shtml 最近提交itunesconnect应用时 xff0c 有个警告说缺少120x120图标 xff0c
  • 三款扒站神器

    https www shiyanlou com questions 80548 10个 webzip xff0c HTTrack Website Copier xff0c teleport pro 我主要用2 个配合起来使用 xff0c 效
  • kubeadm部署kubernetes 1.13.1集群

    kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具 xff0c 本篇文章使用kubeadm搭建一个单master节点的3节点k8s集群 kubernetes部署dashboard可视化插件 xff1a
  • curl 同时发送多个请求

    创建一对cURL资源 ch1 61 curl init ch2 61 curl init 设置URL和相应的选项 curl setopt ch1 CURLOPT URL 34 http test cm a php 34 curl setop
  • 网络通信第四课 C++发送Post请求的完整案例

    说明 当前例子采用boost asio库发送HTTP数据报文 xff0c 采用boost asio streambuf request流封装数据报文 xff0c 在例子的后面 通过string对响应数据包进行分析 xff0c 获取其中的js
  • 玩转X-CTR100 l STM32F4 l BMP280气压计传感器

    我造轮子 xff0c 你造车 xff0c 创客一起造起来 xff01 塔克创新资讯 塔克社区 www xtark cn 塔克博客 www cnblogs com xtark 本文介绍X CTR100控制器 扩展BMP280气压计传感器 xf
  • arduino连接LCD1602A

    接线图 caption id 61 34 attachment 1183 34 align 61 34 alignnone 34 width 61 34 1108 34 LCD1602A接线图 xff08 4位 xff09 caption
  • CURL详解

    目前为目最全的CURL中文说明了 学PHP的要好好掌握 有很多的参数 大部份都很有用 真正掌握了它和正则 一定就是个采集高手了 PHP中的CURL函数库 xff08 Client URL Library Function xff09 cur
  • C++各种类库介绍(转)

    C 43 43 类库介绍 再次体现了C 43 43 保持核心语言的效率同时大力发展应用库的发展趋势 在C 43 43 中 xff0c 库的地位是非常高的 C 43 43 之父 BJARNESTROUSTRUP先生多次表示了设计库来扩充功能要

随机推荐

  • 跨平台C++开源码的两种经常使用编译方式

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 跨平台C 43 43 开源代码为适应各种编译器的编译 xff0c 採用了两种方式方面来适配 一种是makefile方式 以著名的空间数据格
  • 暗渡陈仓:用低功耗设备进行破解和渗透测试

    信息安全技术丛书 暗渡陈仓 xff1a 用低功耗设备进行 破解和渗透测试 Hacking and Penetration Testing with Low Power Devices 美 菲利普 布勒斯特拉 xff08 Philip Pol
  • EPG

    简介 EPG 是Electronic Program Guide的 英文缩写 xff0c 意思是电子节目菜单 IPTV所提供的各种业务的索引及导航都是通过 EPG系统来完成的 IPTV EPG实际上就是 IPTV的一个门户系统 EPG系统的
  • 什么是寄存器

    我们看到的 STM32 芯片已经是已经封装好的成品 xff0c 主要由内核和片上外设组成 若与 电脑类比 xff0c 内核与外设就如同电脑上的 CPU 与主板 内存 显卡 硬盘的关系 STM32F429 采用的是 Cortex M4 内核
  • 编程-函数栈与进程栈

    https mp weixin qq com s QsY3cwpLQ5qthgrpZJkBng 一 代码编程极简进化史 从纸带上的机器码 xff0c 到汇编语言算是比较自然而然的变化 因为汇编语言每一条指令即对应着一条机器指令码 汇编中的j
  • 开源飞控

    OpenPilot 官网 xff1a http www openpilot org WiKi xff1a http wiki openpilot cc 论坛 xff1a http bbs tryfly cn forum php KK飞控 M
  • Windows Server 2008r2 取消屏幕自动锁定

    Windows Server 2008r2取消屏幕锁定 企业网管在日常维护服务器的时候 xff0c 往往不会每次有问题都去机房处理 xff0c 一般都是通过远程连接到服务器终端上 xff0c 但是很多企业网管总是被Server 2008服务
  • JAVA中对List<Map<String,Object>>中的中文汉字进行排序

    转载于 xff1a http blog csdn net flykos article details 54631573 参考 xff1a http www jb51 net article 88710 htm 本篇文章 xff0c 对中文
  • Python maketrans() 方法

    描述 Python maketrans 方法用于给 translate 方法创建字符映射转换表 可以只接受一个参数 xff0c 此时这个参数是个字典类型 xff08 暂不研究这种情况 xff09 对于接受两个参数的最简单的调用方式 xff0
  • vue-cli3 项目从搭建优化到docker部署

    项目地址 vue cli3 project 欢迎 star 原文地址 www ccode live lentoo list 1 创建一个vue项目 相信大部分人都已经知道怎么创建项目的 xff0c 可以跳过这一节 xff0c 看下一节 1
  • 解决Linux:No route to host

    在VPS上面配置了某分布式服务 xff0c 死活跑不起来 xff0c 该配置的都配置了 xff0c 真是见鬼了 日志里面很多 xff1a No route to host 但是 xff0c 我能ping通 xff0c 为了排除是程序自身原因
  • 停止linux的ntpd服务

    service ntpd status service ntpd stop service ntpd status chkconfig list ntpd chkconfig level 35 ntpd off chkconfig list
  • 09.打印“caoliuzhenhao”

    printf 命令用于格式化输出 xff0c 是echo命令的增强版 它是C语言printf 库函数的一个有限的变形 xff0c 并且在语法上有些不同 注意 xff1a printf 由 POSIX 标准所定义 xff0c 移植性要比 ec
  • http://www.seattletechinterviews.com/

    http www seattletechinterviews com 转载于 https www cnblogs com kungfupanda p 6503751 html
  • inode的若干锚

    insert inode hash hash an inode 64 inode unhashed inode 64 hashval unsigned long value used to locate this object in the
  • Swap Nodes in Pairs

    Given a linked list swap every two adjacent nodes and return its head For example Given 1 gt 2 gt 3 gt 4 you should retu
  • Redis

    介绍 官网 xff1a http redis io Redis是一个开源的使用ANSI C语言编写 支持网络 可基于内存亦可持久化的日志型 Key Value数据库 xff0c 并提供多种语言的API 从2010年3月15日起 xff0c
  • 转 C++常用的类库

    1 系统和网络编程库 xff1a ACE 除了ACE之外 xff0c 还有很多系统和网络编程方面的程序库 比如在线程库方面 xff0c 还有ZThread boost thread xff0c 如果放大到C C 43 43 领域 xff0c
  • Linux零碎记录之ulimit【堆栈大小、stack size、进程数限制、文件句柄限制、linux用户空间限制】...

    写了个小程序 本来打算写个hash表的 xff0c 但是出现 段错误 include lt stdio h struct a char a 4096 char a1 4096 char a2 4096 char a3 4096 int ma
  • 串口扫盲十一:RS-232至RS-485RS-422接口的智能转换器

    摘要 详细地介绍了如何从RS 232信号线上高效率地产生电源 如何实现RS 232接口与RS 485RS 422接口的智能转换 同时 也给出了具体的硬件设计及软件设计方法 关键词 RS 232 RS 485RS 422 接口 智能转换器 随