RS-485半双工延时问题
来源:互联网 发布:中国碳纤维技术 知乎 编辑:程序博客网 时间:2024/06/05 20:33
6
主题0
好友292
积分中级会员
学习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”。这样的处理会使总线在状态切换时,有一个稳定的工作过程。
问题:
这里的 1ms是如何计算的? 485总线收、发状态切换时需要做适当延时,是指 485芯片的收发切换需要延时还是 485总线电缆固有的特性?
我觉得在半双工状态下 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”。这样的处理会使总线在状态切换时,有一个稳定的工作过程。
问题:
这里的 1ms是如何计算的? 485总线收、发状态切换时需要做适当延时,是指 485芯片的收发切换需要延时还是 485总线电缆固有的特性?
- RS-485半双工延时问题
- RS-485半双工延时问题
- RS-485半双工延时问题
- RS-485半双工延时问题
- MAX13487E, MAX13488E半双工RS-485/RS-422收发器,带有自动选向控制
- MAX13487E, MAX13488E半双工RS-485/RS-422收发器,带有自动选向控制
- 输入输出隔离的半/全双工RS-485/RS-422接口隔离芯片电路
- 双工 和 半双工
- 全双工、半双工
- 零延时RS-485接口电路的设计与应用
- 零延时RS-485接口电路的设计与应用
- RS-485收发的零延时转换电路
- RS-485收发的零延时转换电路
- RS-485收发的零延时自动转换电路(转)
- myEclipse Socket编程半双工练习问题
- RS-485总线相关问题
- 全双工与半双工
- 半双工与全双工
- ASP.NET MVC3默认提供了11种ActionResult的实现
- 基本设置
- Siri技术解析
- Android学习第一季Part09【41-45】
- 设计模式之责任链模式
- RS-485半双工延时问题
- 【计算机视觉】森林火灾检测-2
- android Launcher——启动过程详解
- cocos2d-x场景效果切换
- 我眼中的性能测试工程师
- poj 3667 Hotel(线段树区间合并&Splay解法)
- android Launcher——数据加载与变更
- android Launcher——拖放功能深入研究
- android 布局长度单位深入研究