RS-485半双工延时问题
学习485总线时,遇到延时问题,困扰很久。通过学习知道了485半双工收发时必须延时,以保证系统的稳定性、可靠性。好多资料都介绍了485 防静电、抗干扰电路。惟独没提 每一帧收发停止位(或第9位)的延时和 半双工总线收发切换延时 问题。
我觉得在半双工状态下 485 帧的收发和 总线的收发状态切换延时问题 对485总线长期稳定的工作有很大影响。彻底搞懂这个问题 对了解误码产生、数据丢失、总线的稳定性、可靠性都有重要意义。
以下来源laoguo 21ic的文章 整理后:
1、每一帧收发停止位(或第9位)的延时问题
在RS-485半双工通讯中,一般以单片机的TI,RI信号作收发切换控制信号,发送时,检测TI是否建立起来,当TI为高电平后关闭发送功能转为接收功能,接收时,检测RI是否建立起来,当RI为高电平后,接收完毕,又可以转为发送。因此,必须控制端RE*,DE的信号的有效脉宽应该大于发送或接收一帧信号的宽度。
1
从上面的时序图可知:单片机在串行口发送数据时,只要将8位数据位传送完毕,TI标志即建立,但此时应发送的第九位数据位(若发送地址帧时)和停止位尚未发出。如果在这时关闭发送控制,势必造成发送帧数据不完整。
接收数据时也同样如此,单片机在接收完8个数据位后就建立起RI信号,但此时还未接收到第九位数据位(若接收地址帧时)和停止位。所以,接收端必须延时大于2位数据位的时间(1位数据位时间=1/波特率),再作应答,否则会发生总线冲突。
总之,发送和接收控制信号应该足够宽,以保证完整地接收一帧数据,任意两个单机的发送控制信号在时间上完全分开,避免总线争端。
注:延时T秒的取值
(1) 传送地址帧时,T>2X(1/波特率),可以选取T=2.5X(1/波特率)。
(2) 传送数据帧时,T>1X(1/波特率),可以选取T=1.5X(1/波特率)。
实际的软件流程:
1
问题:(【5楼】以解决)
可看到软件流程并没有在 每一帧收发停止位(或第9位)后实现延时,而是在(数据包的)最后一个字节(帧)上延时。这样能保障数据帧的正确(完整性)和稳定性吗?
2、半双工总线收发切换延时问题
为了可靠的工作,在485总线状态切换时需要做适当延时,再进行数据的收发。具体的做法是在数据发送状态下,先将控制端置“1”,延时1ms左右的时间,再发送有效的数据,一包数据发送结束后再延时1ms后,将控制端置“0”。这样的处理会使总线在状态切换时,有一个稳定的工作过程。
------------------------------------------------------------------------------------------------------------------------------------------
两个自动转换(零延时)电路:
http://www.ouravr.com/bbs/bbs_upload19801/files_9/ourdev_230635.jpg 零延时电路图: 他们如何保证 “控制端RE*,DE的信号的有效脉宽应该大于发送或接收一帧信号的宽度” 的? 但是这个问题依然存在: 可看到软件流程并没有在 每一帧收发停止位(或第9位)后实现延时,而是在(数据包的)最后一个字节(帧)上延时。这样能保障数据帧的正确(完整性)和稳定性吗? 从本质上说,在发送/接收 数据包的 最后一个帧(字节)时,需要延时 等待 停止位(或第9位)的完整发送/接收。 也就是应当在 最后一个帧发送/接收后,在软件里写入延时代码 控制485芯片。 |
Maxim带有自动方向控制的半双工RS-485收发器
MAX13487E/MAX13488E半双工RS-485收发器。该系列器件带有AutoDirection功能,发送数据时可自动使能驱动器。这一特性省去了驱动使能控制信号。
----------------------------------------------------------------------------------------------------------------------
今天调了232/485电路,都未延时,开了3小时,每秒发/收一个包(9600bps,8/30字节,不定长),无错误。
用下面两个图 直接把原来的程序(232下的上、下位机)未做任何修改搞成 485了。
上位机用的图:
下位机用的图:
----------------------------------------------------------------------------------
半双工总线收发切换延时问题 1ms。有好多帖上说用1ms延时,通讯就稳定了,不用则出现误码。不知究竟为何?
总结下:
1、总线上不间断(长时间连续)的发送数据会产生累积误差(不同晶振频率的误差)。所以用延时(暂停通信一段时间)来消除波特率的误差,避免数据错误。
2、485器件在收、发状态转换时,需要转换时间来过渡到稳定状态。
RS-485半双工延时问题相关推荐
- 嵌入式:485 半双工通信延时
1.每一帧收发停止位(或第9位)的延时问题 在RS-485半双工通讯中,一般以单片机的TI,RI信号作收发切换控制信号,发送时,检测TI是否建立起来,当TI为高电平后关闭发送功能转为接收功能, ...
- Step7-Mricro/win S7-200 485轮询 西门子485 modbus RTU 200 ModbusRTU通信S7-200与最大32个从站RS 485主站程序
Step7-Mricro/win S7-200 485轮询 西门子485 modbus RTU 200 ModbusRTU通信S7-200与最大32个从站RS 485主站程序,程序块自动轮询,无需编写 ...
- RS232 RS422 RS 485
RS232特点: RS-232是现在主流的串行通信接口之一.由于RS232接口标准出现较早,难免有不足之处,主要有以下四点: (1)接口的信号电平值较高,易损坏接口电路的芯片.RS232接口任何一条信 ...
- 如何提高RS -485电快速脉冲群的抗干扰能力
RS-485总线具有结构简单.通信距离远.通信速度快.成本低等优点.广泛应用于工业通信.电力监控.仪器仪表等行业.由于工业控制环境恶劣,通信线路中会出现更多的干扰耦合,从而影响RS-485总线的可靠性 ...
- 嵌入式系统编程实现485串口收发数据
从现在开始,对485串口进行研究,第一步先研究下485数据的收发,想完成的目的是分2个程序,一个收,一个发,这样设计的原因是因为485属于半双工,如果收发同时操作,那么在一个开发板内部测试会出现问题, ...
- 485串口驱动_电工进阶PLC大神,必备PLC串口通讯的基本知识
电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗? 1,什么是串口通讯? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 ...
- PIC 使能485/422_Part2.1使能485_Tx_Only
1.需求 工作中需要把目前设备的单向232转为485/422模式,实现双向通讯,目前查找相关资料.突然想到一件事,我是否能让232现有的单向上发线同时连工控机的tx,rx,然后靠协议,来定时切换PIC ...
- ESP32 (UART 485通讯)-串口之485通讯(3)
提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.ESP32串口介绍 二.硬件设计 三.实现代码 四.串口实验演示结果 五.ESP32串口函数API 5.1.uart_types.h文件中 ...
- 电视监控系统培训教材
电视监控系统培训教材 典型的电视监控系统主要由前端设备和后端设备这两大部分组成,其中后端设备可进一步分为中心控制设备和分控制设备.前.后端设备有多种构成方式,它们之间的联系(也可称作传输系统) ...
- 单片机c语言应用100例第3版课后答案,单片机C语言应用100例(第3版)(含光盘1张)...
基 础 篇 第1章 单片机概述及实验器材介绍2 1.1 单片机概述2 1.1.1 单片机的定义.分类与内部组成2 1.1.2 单片机应用系统的结构及其工作过程5 1.1.3 单片机的应用6 1.2 单 ...
最新文章
- Delphi 中的颜色常量及效果图
- 来首都初次就医的感受
- [Android] Android4.0、4.1在手机上制作fastboot线刷包;
- Spring-JDBC通用Dao
- 兄dei,Python数据竞赛和5万现金奖励了解一下
- Java DOC 转换给 PDF 格式文档的代码
- mybatis mysql uuid_spring boot整合mybatis利用Mysql实现主键UUID的方法
- linux内核启动文件系统,Linux启动过程中文件系统的加载
- Spring Security HttpSecurity
- algorithm头文件下的next_permutation()
- H264/H265/YUV码流分析工具推荐(一)
- 计算机软件资产代码,事业单位六大类固定资产代码.xls
- mysql recovery_MySQL Recovery
- 长沙云长计算机,【长沙记忆】原来关羽和长沙有这么多不解之缘
- 人民币持续升值,百姓感受渐深
- 公众号、小程序、短信消息推送的区别
- 从前端技术到体验科技
- [工作积累] TAA Ghosting 的相关问题
- 汉语中的 熟语中的成语900个
- 蓝牙室内定位导航技术应用