首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» 基于RS-485总线的多主机通信方法
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
基于RS-485总线的多主机通信方法
发短消息
加为好友
yuchengze
当前离线
UID
1062083
帖子
5837
精华
0
积分
2921
阅读权限
70
在线时间
222 小时
注册时间
2016-6-30
最后登录
2018-9-9
金牌会员
UID
1062083
性别
男
1
#
打印
字体大小:
t
T
yuchengze
发表于 2016-9-11 12:36
|
只看该作者
基于RS-485总线的多主机通信方法
RS-485
,
通信
,
主机
,
网络
引言 RS-
485接口
以其结构简单、通信速率高、传输距离远、成本低廉等优点在
现场总线
中得到广泛应用。传统的
RS-485总线
要求在同一时刻只能有一个节点进行数据发送,为此多采用一主多从方式或分时复用方式。一主多从方式,即网络中有一个主节点和若干个从节点,由主节点轮询各个从节点以实现数据通信。分时复用方式,即
总线
控制权分时交由各个节点使用,各节点按照预先分配的时间段发起通信。遇到节点主动发送实时要求高,节点数目不确定,且各个节点通信负荷不均衡等通信系统时,上述两种通信模式的总线利用率和实时性都相对较低。在模拟器材通信中,经常会遇到各节点不定期、多批次主动发起通信的情况,在应用RS-
485
网络时显得较为不便。为此,需要研究一种基于RS-
485总线
的
多主机通信
方法,并在模拟训练中得到应用,以取得良好效果。
1 接口电路
RS-485 接口电路的主要功能是将来自
微控制器
(MCU)的发送信号TX通过“发送器”转换成通讯网络中的差分信号,将通讯网络中的差分信号通过“接收器”转换成MCU接收的RX信号。任一时刻,RS-485收发器只能够工作在“接收”或“发送”两种模式之一,因此,必须为RS-485 接口电路增加一个收/发逻辑控制电路。另外,RS-485接口电路的附加保护措施也是必须考虑的环节。
如图1所示为我们设计的RS-485总线接口电路,核心芯片为SP3485,该芯片为+3.3V
低功耗
半双工收发器,满足RS-485和RS-422串行协议的要求,数据传输速率可高达10Mbps(带负载),与Sipex的SP481、SP483和SP485的管脚互相兼容,同时兼容工业标准规范。SP3485发送器的输出是差分输出,空载时输出电压的大小为0V~+3.3V,即使在差分输出连接了54Ω负载的条件下,发送器仍可保证输出电压大于1.5V。发送器输出最大250mA ISC的限制使SP3485可以承受-7.0V~+12.0V共模范围内的任何短路情况,保护IC不受损坏。SP3485接收器的输入是差分输入,输入灵敏度可低至±200mV。接收器的输入电阻通常为15kΩ(最小为12kΩ)。-7V~+12V的宽共模电压范围允许系统之间存在大的零电位偏差。SP3485接收器还具有故障自动保护(fail-safe)特性,可在输入悬空时使输出保持在高电平状态。
控制该电路工作的MCU采用
STM32
F103VET6,该芯片为100引脚LQFP
封装
,采用Cortex-M3内核,处理速度可达72MHz,具有64K RAM和512K Flash,支持CAN、I2C、 SPI、USART、USB等接口。其串行口通过RXD(即485_RX引脚)连接SP3485芯片的RO引脚,通过TXD(即485_TX引脚)连接芯片的DI 引脚。MCU输出的485_DIR信号控制芯片的发送器/接收器使能,亦即控制通信方向。当485_DIR信号为“1”时,发送器工作,接收器失效,此时MCU可向RS-485 总线发送数据;485_DIR信号为“0”时,发送器失效,接收器工作,此时MCU可以接收来自RS-485 总线的数据。
为保证电路工作稳定可靠,电路中B引脚连接
上拉电阻
R2,A引脚连接下拉电阻R3,这样在上电或不传输数据时能保证RS485总线处于确定状态,为总线提供网络失效保护,以提高RS-485节点与网络的可靠性。
电阻R5为备用设计,如果将SP3485 连接至80C51或STM32F103VET6等MCU芯片的UART串口,则SP3485芯片的RO引脚不需要上拉(R5为0Ω);否则,需考虑将R5更换为约10K 的上拉电阻。
考虑到485总线在
组网
时,位于网络两端的节点需要增加120Ω终端电阻,我们在485_B和485_A之间放置了终端电阻R4,为便于使用者灵活调整节点在网络中的位置,我们还为终端电阻设计了选择跳线JP1。
2 组网方式
RS-485总线组网方式如图2所示,所有RS-485节点全部挂在一对RS-485总线上。注意RS-485总线不能够开叉、但是可以转弯。RS-485网络采用直线拓朴结构,需要安装2个终端匹配电阻。终端匹配电阻安装在RS-485 传输网络的两个端点,并联连接在A-B 引脚之间,其阻值要求等于传输电缆的特性
阻抗
(一般取值为120Ω)。终端匹配电阻主要作用是使总线的阻抗连续,以减少信号的反射,从而提高信号的传输质量。在矩距离(300 米以下)、低波特率(19200bps)数据传输时可不需终端匹配电阻。
3 多主机通信协议
稳定可靠的通信不仅依赖硬件环境,对通信协议也有很高的要求。为了解决RS-485总线多主机通信的问题,需要对RS-485通信协议进行研究。
3.1 帧结构
设定起始符为字符’$’。考虑到便于报文接收,起始符应与设备地址不同。目的节点、源节点均为网内设备节点地址,取值为1~32。帧长度是从起始符到结束符的字符长度,取值为7~255。结束符为字符’@’。
帧校验(FCS)通常可采用奇偶校验、和校验、CRC校验等方法,前两者处理相对简单,节省运算时间,但存在漏检的可能,后者处理相对复杂,需要一定的运算时间,但可靠性优于前面两种方法。在具体应用时,可根据需要自行选择。本文帧校验方法为从目的地址开始,到数据的最后一个字节为止,各字节依次
异或
,最后得到的数值即为帧校验值,如果接收方发现校验错误则应要求发送方重发。
值得注意的是,对于起始符、结束符与数据帧内容重叠时的处理,采用数据字节前插入0xFF的办法加以识别。例如,要发送的数据为0X24,与结束符重叠,则在报文中应写为0xFF 0x24。
3.2 通信过程
3.2.1 发送方工作流程
RS-485总线采用半双工工作方式,全网在同一时刻只能有一个设备在发送报文(扮演主机),此时其它设备处在接收状态(扮演从机)。基于对可靠性的考虑,采取如图3所示通信流程。
具体解释如下:F_BUSY为总线忙标志,取值为“1”时表示“总线忙”,N为发送报文后对方无应答时报文的重传次数,M为接收到的报文出现FCS错误时的重传次数。当系统初始化时,每个节点的F_BUSY均为0,即总线空闲, N、M均为0。
发送方的工作流程如下:
总线的申请和释放均由通信的发起方完成。
步骤一:申请总线。发送报文前先进行“忙”检测,当F_BUSY为“0”时发送“申请总线”报文,通知全网节点即将占用总线,并开启计时器,无关节点收到该报文后将F_BUSY置为1,并禁止本地发送报文,目的节点收到后发送“确认可用”报文。当F_BUSY为“1”或计时已到却未收到“确认可用”报文,则随机延时后重新申请总线。
步骤二:发送报文。
步骤三:等待应答。发送报文后,启动计时器,等待对方的接收应答,如在规定时间内未收到对方应答,则进行报文重传,并将重传次数N加1。如果重传已达三次,则认为网络断开,释放总线,结束通信。
步骤四:出错重传。如果对方应答帧内容为“FCS错误”报文,则进行报文重传,并把M加1。如果重传已达三次,则认为网络不稳定,释放总线,结束通信。
步骤五:释放总线。报文发送流程结束后,该节点发出“释放总线”报文,各节点将F_BUSY置为0,总线恢复空闲状态。
发送方的处理中,在申请总线阶段没有考虑消息碰撞问题,这主要是基于网络节点数量有限,碰撞几率较低的考虑。为增强报文的可靠性,须进行帧校验处理。在等待应答阶段,采取ARQ技术,对出错报文进行请求重传。为避免程序陷入死循环,针对对方无应答或报文帧校验错误的情况采用了有限次重传的机制。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议