tag 标签: RS485

相关帖子
相关博文
  • 热度 3
    2023-7-14 14:28
    244 次阅读|
    0 个评论
    干货 | RS485接口电路如何设计,你知道吗?
    今天给大家分享 485 接口的 EMC 检测,希望对电路设计,及相关软件开发的人员有帮助。 原理图 1. RS485 接口 6KV 防雷电路设计方案 ( RS485 接口防雷电路) 接口电路设计概述: RS485 用于设备与计算机或其它设备之间通讯,在产品应用中其走线多与电源、功率信号等混合在一起,存在 EMC 隐患。 本方案从 EMC 原理上,进行了相关的抑制干扰和抗敏感度的设计,从设计层次解决 EMC 问题。 2. 电路 EMC 设计说明 A. 电路滤波设计要点 L1 为共模电感,共模电感能够对衰减共模干扰,对单板内部的干扰以及外部的干扰都能抑制,能提高产品的抗干扰能力,同时也能减小通过 429 信号线对外的辐射,共模电感阻抗选择范围为 120 Ω /100MHz ~2200 Ω /100MHz ,典型值选取 1000 Ω /100MHz 。 C1 、 C2 为滤波电容,给干扰提供低阻抗的回流路径,能有效减小对外的共模电流以同时对外界干扰能够滤波 ; 电容容值选取范围为 22PF~1000pF ,典型值选取 100pF; 若信号线对金属外壳有绝缘耐压要求,那么差分线对地的两个滤波电容需要考虑耐压 ; 当电路上有多个节点时要考虑降低或去掉滤波电容的值。 C3 为接口地和数字地之间的跨接电容,典型取值为 1000pF , C3 容值可根据测试情况进行调整 ; B. 电路防雷设计要点 为了达到 IEC61000-4-5 或 GB17626.5 标准,共模 6KV ,差模 2KV 的防雷测试要求, D4 为三端气体放电管组成第一级防护电路,用于抑制线路上的共模以及差模浪涌干扰,防止干扰通过信号线影响下一级电路 ; 气体放电管标称电压 VBRW 要求大于 13V ,峰值电流 IPP 要求大于等于 143A ,峰值功率 WPP 要求大于等于 1859W; PTC1 、 PTC2 为热敏电阻组成第二级防护电路,典型取值为 10 Ω /2W; 为保证气体放电管能顺利的导通,泄放大能量必须增加此电阻进行分压,确保大部分能量通过气体放电管走掉 ; D1~D3 为 TSS 管 ( 半导体放电管 ) 组成第三级防护电路, TSS 管标称电压 VBRW 要求大于 8V ,峰值电流 IPP 要求大于等于 143A; 峰值功率 WPP 要求大于等于 1144W; 3. 接口电路设计备注 如果设备为金属外壳,同时单板可以独立的划分出接口地,那么金属外壳与接口地直接电气连接,且单板地与接口地通过 1000pF 电容相连 ; 如果设备为非金属外壳,那么接口地 PGND 与单板数字地 GND 直接电气连接。 PCB 设计 1. RS485 接口电路布局 ( RS485 接口滤波及防护电路布局) 方案特点: (1) 防护器件及滤波器件要靠近接口位置处摆放且要求摆放紧凑整齐,按照先防护后滤波的规则,走线时要尽量避免走线曲折的情况 ; (2) 共模电感与跨接电容要置于隔离带中。 方案分析: (1) 接口及接口滤波防护电路周边不能走线且不能放置高速或敏感的器件 ; (2) 隔离带下面投影层要做掏空处理,禁止走线。 2. RS485 接口电路分地设计 方案特点: (1) 为了抑制内部单板噪声通过 RS485 接口向外传导辐射,也为了增强单板对外部干扰的抗扰能力,在 RS485 接口处增加滤波器件进行抑制,以滤波器件位置大小为界,划分出接口地 ; (2) 隔离带中可以选择性的增加电容作为两者地之间的连接,电容 C4 、 C5 取值建议为 1000pF ,信号线上串联共模电感 CM 与电容滤波,并与接口地并联 GDT 和 TVS 管进行防护 ; 且所有防护器件都靠近接口放置,共模电感 CM 置于隔离带内,具体布局如图示。 方案分析: (1) 当接口与单板存在相容性较差或不相容的电路时,需要在接口与单板之间进行“分地”处理,即根据不同的端口电压、电平信号和传输速率来分别设置地线。“分地”,可以防止不相容电路的回流信号的叠加,防止公共地线阻抗耦合 ; (2) “分地”现象会导致回流信号跨越隔离带时阻抗变大,从而引起极大的 EMC 风险,因此在隔离带间通过电容来给信号提供回流路径。 关注公众号“优特美尔商城”,获取更多电子元器件知识、电路讲解、型号资料、电子资讯,欢迎留言讨论。
  • 热度 3
    2021-4-20 13:07
    2577 次阅读|
    3 个评论
    当RS485隔离遇见Freemodbus,你碰到问题了吗?
    摘要: 基于 RS485 物理接口的 Modbus 总线在工业控制中广泛应用。 Freemodbus 是一个免费的实用的协议栈,孔丙火(微信公众号:孔丙火)用它实现了一个从站。串口收发信号和 RS485 芯片的收发使能信号采用光耦进行了隔离,在测试过程发现了偶尔出现 TimeOut 的问题,经过查找及分析,发现是光耦信号延时导致的,给出了解决方案,并对问题进行了详细分析。 关键词: RS485 隔离 Freemodbus 光耦 时序 1. 问题来源 工业应用中,在进行 RS485 电路设计的时候,为了确保电气安全和抗干扰性,经常会做信号隔离,光耦隔离是常用的一种形式。 Modbus 协议是现场总线协议中比较常见的一种,其设计和使用简单,运行可靠,在可编程控制器、仪器仪表、传感器中使用广泛,其中,基于 RS485 物理接口的 Modbus 总线使用最多。 Modbus 是主从式的通信结构,一个系统中仅有一个主站,其他为从站。 Freemodbus 是一个免费的协议栈,仅支持从站。 Freemodbus 有专门的机构在维护,比较成熟,相对于自己编写的协议代码,运行更稳定,是开发者在研发时的常用选项。 近来,孔丙火(微信公众号:孔丙火)在设计一个基于 Modbus-RTU 接口的信号采集站,作为从站,把采集到的信号传输给 PLC 等主站设备。单片机采用 STM32F103C8T6 , RS485 芯片: SP485EEN ,接收和发送的隔离采用光耦 PC410 , 485 收发使能信号的隔离采用光耦 EL357NB 。 RS485 部分的原理图如图 1 所示。 图 1 程序设计中,采用 Freemodbus 协议栈实现 Modbus-RTU 协议,串口速率为 115200bps ,数据位 8 位,停止位 1 位,无校验。 在使用 Modbus 主站软件( Modbus Poll )进行调试的过程中,孔丙火(微信公众号:孔丙火)发现通信过程中会出现 TimeOut 的错误,有以下几个特点: a )并不是每一帧都会出错,但会不定时地出现; b )主站询从站的频率越高,出错的几率越低,主站每 30ms 询一帧数据的时候基本不出错,但每 500ms 或 1000ms 询一次的时候,就会比较明显地出错。 2. 查找过程 由于硬件电路是之前使用过的,刚开始并没有考虑是电路的问题。首先是从软件开始查找的。由于能够正常的回复数据,只是偶尔出错,因此软件的整体流程应该是通的,只是某个代码的细节有问题,孔丙火(微信公众号:孔丙火)把代码整个重新捋了一遍,也没有发现明显的问题。 后来,开始逐步排查,先把 RS485 部分的电路短接掉,用 USB-TTL 转换器直接连接单片机的串口收发管脚,进行收发数据的测试,结果一切都正常,无论主站的询问数据周期是多少,都不会出错。于是开始怀疑跟 485 相关的代码。 搞过 485 电路的朋友都知道, 485 电路仅仅是实现一个电平转换,另外由于 485 是半双工,需要外加一个收发使能控制, 485 芯片 实现 TTL 电平与差分电平的转换。涉及到代码,就是多一个管脚,用来控制收发使能。虽然这一步没有测试出问题,但在反复试的过程中,倒是有一点意外收获,孔丙火(微信公众号:孔丙火)分享一下。使能 485 芯片的发送语句,必须在使能串口发送中断(发送为空中断)之前,否则通信是无法成功的。原因分析:发送为空中断在使能后,是立即进入中断的,使能 485 发送的代码无法执行,发送没有使能,但已开始发送数据,这种情况下,发送是肯定不会成功的。这个点给我了启发,是不是发送的时序有问题,导致发送失败呢? 于是开始分析 485 的收发电路,由于信号是隔离的,最有可能出现问题的地方是光耦,就从光耦开始查起。开始查阅 PC410 和 EL357NB 的数据手册,开始是担心光耦前后的限流电阻跟光耦的电流传输比是不是不匹配,导致光耦导通不充分,后经分析电路参数没有问题。然后开始分析光耦的时序,经过光耦隔离的信号肯定会延时,延时的不同步会不会导致问题呢?果然, PC410 和 EL357NB 的传输延时还是有差别的, PC410 的传输延时在几十 ns ,而 EL357NB 的传输延时在 1us 左右,程序代码做了如下修改:在使能 485 发送管脚后,延时一段时间后( 1us 左右,无需太精确),再使能串口的发送中断,经测试, TimeOut 的错误了。 3. 结论及分析 ( 1 )问题就出在光耦的信号传输延时上,在 485 电路的设计之初,单片机的串口收发脚采用高速光耦进行隔离,收发使能脚由于不需要频繁切换,采用一般光耦即可。正是由于这个设计,在使能 485 收发和使能发送中断同时执行的时候,在单片机的串口发送部分(从发送缓存区到硬件管脚,单片机内部完成,无需用户代码干预)处理比较快的时候,就会导致 485 还没有使能发送状态,单片机已开始向 485 芯片发送数据,就会导致发送出错, Modbus 主站软件( Modbus Poll )收到的是不完整的错误的帧,就是看到的 TimeOut 错误。但在单片机的串口发送部分处理的不那么快的时候,就不会出现这个错误,这是错误不定时出现的原因。 ( 2 ) 使能 485 发送管脚后的延时,不能采用 HAL_Delay() 函数, Freemodbus 协议栈的收发使能在 vMBPortSerialEnable() ,由于在调此函数之前已经禁掉了中断,而 HAL_Delay() 函数是基于系统时钟中断定时的,因此不能使用。由于此处不需要精确地定时,只要能满足两种光耦延时的时间差即可,可以使用空语句进行定时,大体算一下时间即可。孔丙火(微信公众号:孔丙火)的代码如图 2 所示。 图 2 ( 3 )在最初的问题中,为什么主站询的快的时候错误少,反而询的慢的时候错误多?这个问题没有完全思考清楚,但孔丙火(微信公众号:孔丙火)有一些心得。元器件都会有一些寄生电容,在电平转换的时候,可以认为电容要先进行充电或放电,因此会有一个斜坡,在主站询的快的时候,电平转换快,在电平改变的时候,电容在上一次的过程中还没有完全放电或充电完毕,这个时候进行反方向的改变需要的时候就会短,可以对冲两种光耦时间差的影响。不知道我这种说法大家是否可以理解,更深层次或者更确切的原因,也欢迎高手指点,或者大家行进讨论。 文章在公众号( 孔丙火 )同步推出,欢迎查看更多系列文章。 单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。
相关资源