隔离型RS485/RS422中继隔离器的波特率识别方法及数据流控制方法与流程

文档序号:12662307阅读:848来源:国知局
隔离型RS485/RS422中继隔离器的波特率识别方法及数据流控制方法与流程
本发明涉及通信技术领域。

背景技术:
RS485/RS422异步通信是目前在工控领域广泛采用的总线标准。当实际节点数目超出最大限制,或是通信距离过远、干扰过大时,如何保证信息的完整可靠传输,是通讯系统中的巨大挑战。实际应用中,一般使用在总线上插入中继器的方式来解决这一问题,如图3所示。在两线制半双工通信系统中,传统的中继器通常不具有波特率自适应的功能,或是具有简单的精度不高的适应性,或是对主机具有一定的依赖性,需要主机发送特定字节完成波特率识别,导致数据流方向控制实时性差,从而使其应用领域受到很多限制。

技术实现要素:
本发明是为了解决传统的中继器通常不具有波特率自适应的功能,精度低,导致数据流方向控制实时性差的问题,从而提供了一种隔离型RS485/RS422中继隔离器的波特率识别方法及数据流控制方法。隔离型RS485/RS422中继隔离器的波特率识别方法,该方法通过以下步骤实现,所述步骤包括:空闲状态步骤:中继隔离器处于空闲状态,接收测量信号,并判断该信号是否有效,判断结果为是,则将i置0,并执行等待步骤;判断结果为否,则返回空闲状态,等待接收测量信号;其中i表示一个计数值;等待步骤:该步骤中令第i个测量值cnt[i]=0,并判断中继隔离器的接收引脚上是否有时钟下降沿,判断结果为是,则执行运行步骤;判断结果为否,则重新执行等待步骤;运行步骤:该步骤每个时钟上升沿将cnt[i]的值加1,即cnt[i]←cnt[i]+1,并判断中继隔离器的接收引脚上是否有时钟上升沿,判断结果为否,则继续对低电平持续时钟数统计;判断结果为是,则对低电平持续时钟数统计结束,i的值加1,该值表示测量次数,判断i是否等于50时,判断结果为是,则j=0,j表示计数变量,并执行排列步骤;判断结果为否,则重新执行等待步骤;排列步骤:该步骤中令i=0,执行比较步骤;比较步骤:判断第i个测量值cnt[i]是否大于第i+1个测量值cnt[i+1],判断结果为是,则交换cnt[i]和cnt[i+1]的值,即tmp←cnt[i],cnt[i]←cnt[i+1],cnt[i+1]←tmp,其中tmp表示中间变量,使得相邻的两个数中后者大,并i的值加1;判断结果为否,则i的值直接加1;比较步骤完成则判断i是否等于49,判断结果为否,则重新执行比较步骤,判断结果为是,则令j的值加1,并判断j是否为49,若是,则执行求开始序号步骤,若判断结果为否,则重新执行排列步骤;求开始序号步骤:根据排列步骤和比较步骤,得到cnt[i]的值排列顺序为由小至大排列,判断相邻两个值后者比前者差值是否小于20,即cnt[i]+20>cnt[i+1],判断结果为是,则令start的值等于i,其中start表示开始序号,并执行求结束序号步骤;判断结果为否,则i的值加1,并重新执行开始序号步骤;求结束序号步骤:判断相邻两个值后者比前者差值是否大于20,即cnt[i]+20<cnt[i+1],判断结果为是,则令stop的值等于i,其中stop表示结束序号,并计算结束序号stop与开始序号start间数据的个数num,即num←stop-start+1,同时令i的值为start的值,sum为0,sum表示所有数据的和,执行求和步骤;判断结果为否,则i的值加1,并重新执行求结束序号步骤;求和步骤:令sum等于原sum的值加cnt[i],判断i的值是否等于stop的值,判断结果为是,则执行计算步骤;判断结果为否,则i的值加1,并重新执行求和步骤;计算步骤:令sum除以num得到该方法计算出的数avg,即得到对应一位数据的时间的均值,根据得到的时间的均值计算得出波特率。隔离型RS485/RS422中继隔离器的数据流控制方法,该方法通过以下步骤实现,所述步骤包括:空闲状态步骤:接受使能信号有效,发送使能信号无效,判断中继隔离器的左右两个数据接收引脚是否同时出现信号下降沿,判断结果为是,则重新执行该步骤;判断结果为否,即只有左侧或右侧出现信号下降沿,则令cnt为0,并执行等待步骤;该步骤中左右两侧数据接收引脚后续步骤相同;等待步骤:关闭右侧接收使能信号,打开右侧发送使能信号,并令cnt的值加1,判断cnt的值是否等于10*avg,其中avg为波特率识别中计算出来的数,判断结果为是,则执行检测步骤;判断结果为否,则继续执行等待步骤;检测步骤:令cnt的值加1,并检测左侧接收引脚上是否存在低电平,若检测结果为否,则令cnt的值为0,并执行等待步骤;若检测结果为是,则进一步半段cnt的值是否等于11*avg,若判断结果为是,则返回空闲状态,若判断结果为否,则继续执行检测步骤。本发明的有益效果是:通过本发明能够完成波特率的自动识别与通信数据流方向控制,大大加强了对数据流方向的控制,同比加强了10%,同时对总线冲突与故障给出相应的提示,精度同比提高了15%;使用高性能信号隔离芯片与隔离电源,实现中继器两端数据的完全隔离。如图4所示,隔离电源将输入的12V直流电压通过DC/DC变换技术变换为3组5V、1组12V的稳定直流电源,其中5V电源分别为收发器、隔离芯片和CPLD供电,输出的12V电源可供后电路使用。MAX491为总线收发器,可实现差分信号到TTL电平的转换。采用高速磁隔离芯片ADUM1201实现信号的隔离。TVS管阵列可抑制雷击或浪涌,防止隔离器另一侧通信节点的损坏。由于使用的隔离电源数目相对较多且电压较低,故采用了推挽拓扑结构,主控制芯片采用TL494CN,原理图如图5所示。其中,+12V输出经PC817(U1)线性光耦输入至控制芯片TL494的误差放大器,以实现电压调整,稳定输出电压。R20为电流取样电阻,当电流过大时,取样电阻上电压增大,通过三极管Q1关断控制芯片的输出,从而达到过流及短路保护的目的。设计中使用CPLD可编程逻辑器件作为中继器的主控制器。由于CPLD可编程特性是基于硬件逻辑电路的,因此相比于基于微控制器的可编程器件,具有速度快、处理能力强、稳定性高、不易死机的特点。本设计中,使用ALTERA公司的EPM570T144,其具有57个LAB(LogicArrayBlocks)、144个引脚,足以满足大多数中小型设计。CPLD主时钟为50MHz,在波特率自动识别时,对于高达1Mbps的波特率误差仅为2%,足以满足大多数设备对波特率精度的要求。指示灯D1、D2、D3分别指示系统正常、总线冲突、总线错误。本设计中CPLD电路原理图如图6所示。使用TVS管阵列实现防雷防浪涌的功能。输入到中继器的总线信号经防雷防浪涌电路后,由MAX491转成TTL电平,经隔离输入到CPLD逻辑处理后,由另一片MAX491转成差分信号,从而达到中继的目的。电路原理图如图7所示。附图说明图1为隔离型RS485/RS422中继隔离器的波特率识别方法的状态图;图2为隔离型RS485/RS422中继隔离器的数据流控制方法的状态图;图3为RS485/RS422网络中使用中继器的结构图;图4为RS485中继隔离器结构框图;图5为隔离电源原理图;图6为CPLD外围电路原理图;图7为总线隔离及防雷防浪涌电路;图8为UART发送一个字节的时序图。具体实施方式具体实施方式一:下面结合图1说明本实施方式,本实施方式所述的隔离型RS485/RS422中继隔离器的波特率识别方法,该方法通过以下步骤实现,所述步骤包括:空闲状态步骤:中继隔离器处于空闲状态,接收测量信号,并判断该信号是否有效,判断结果为是,则将i置0,并执行等待步骤;判断结果为否,则返回空闲状态,等待接收测量信号;其中i表示一个计数值;等待步骤:该步骤中令第i个测量值cnt[i]=0,并判断中继隔离器的接收引脚上是否有时钟下降沿,判断结果为是,则执行运行步骤;判断结果为否,则重新执行等待步骤;运行步骤:该步骤每个时钟上升沿将cnt[i]的值加1,即cnt[i]←cnt[i]+1,并判断中继隔离器的接收引脚上是否有时钟上升沿,判断结果为否,则继续对低电平持续时钟数统计;判断结果为是,则对低电平持续时钟数统计结束,i的值加1,该值表示测量次数,判断i是否等于50时,判断结果为是,则j=0,j表示计数变量,并执行排列步骤;判断结果为否,则重新执行等待步骤;排列步骤:该步骤中令i=0,执行比较步骤;比较步骤:判断第i个测量值cnt[i]是否大于第i+1个测量值cnt[i+1],判断结果为是,则交换cnt[i]和cnt[i+1]的值,即tmp←cnt[i],cnt[i]←cnt[i+1],cnt[i+1]←tmp,其中tmp表示中间变量,使得相邻的两个数中后者大,并i的值加1;判断结果为否,则i的值直接加1;比较步骤完成则判断i是否等于49,判断结果为否,则重新执行比较步骤,判断结果为是,则令j的值加1,并判断j是否为49,若是,则执行求开始序号步骤,若判断结果为否,则重新执行排列步骤;求开始序号步骤:根据排列步骤和比较步骤,得到cnt[i]的值排列顺序为由小至大排列,判断相邻两个值后者比前者差值是否小于20,即cnt[i]+20>cnt[i+1],判断结果为是,则令start的值等于i,其中start表示开始序号,并执行求结束序号步骤;判断结果为否,则i的值加1,并重新执行开始序号步骤;求结束序号步骤:判断相邻两个值后者比前者差值是否大于20,即cnt[i]+20<cnt[i+1],判断结果为是,则令stop的值等于i,其中stop表示结束序号,并计算结束序号stop与开始序号start间数据的个数num,即num←stop-start+1,同时令i的值为start的值,sum为0,sum表示所有数据的和,执行求和步骤;判断结果为否,则i的值加1,并重新执行求结束序号步骤;求和步骤:令sum等于原sum的值加cnt[i],判断i的值是否等于stop的值,判断结果为是,则执行计算步骤;判断结果为否,则i的值加1,并重新执行求和步骤;计算步骤:令sum除以num得到该方法计算出的数avg,即得到对应一位数据的时间的均值,根据得到的时间的均值计算得出波特率。本实施方式中,RS485总线驱动器使用UART接口来驱动。图8为UART发送1字节数据时的时序图。通常,包含1个起始位(start)、8个数据位(data)、1个奇偶校验位(parity)和1个停止位(stop),因此,实际发送的位数为11。由于在应用中数据中的0和1是随机的,因此,可以在一段时间内测量1电平或0电平持续的时间,其中最小的值即对应1位数据的时间,由此时间即可计算出实际的波特率。使用检测0电平的方法实现波特率识别。首先,检测是否存在下降沿,下降沿到来时,启动一个计数器,并等待上升沿到来,当检测到上升沿时,停止计数器。连续重复50次这样的过程可得到50个计数值,并对其进行升序排序(本设计使用冒泡排序法)。由于可能存在干扰,故最小的计数值可能对应于干扰。但干扰是随机的,故其持续的时间也并不是固定的。因此,从最小的数开始,对相邻两个数大小进行比较,若差别小于20,则认为此数对应于发送一个位的时间。对满足这样条件的连续一段数据进行加和,并取平均值,则可得到位时间的均值,由此均值则可求出波特率数值。具体实施方式二:下面结合图2说明本实施方式,本实施方式基于具体实施方式一的隔离型RS485/RS422中继隔离器的数据流控制方法,该方法通过以下步骤实现,所述步骤包括:空闲状态步骤:接受使能信号有效,发送使能信号无效,判断中继隔离器的左右两个数据接收引脚是否同时出现信号下降沿,判断结果为是,则重新执行该步骤;判断结果为否,即只有左侧或右侧出现信号下降沿,则令cnt为0,并执行等待步骤;该步骤中左右两侧数据接收引脚后续步骤相同;等待步骤:关闭右侧接收使能信号,打开右侧发送使能信号,并令cnt的值加1,判断cnt的值是否等于10*avg,其中avg为波特率识别中计算出来的数,判断结果为是,则执行检测步骤;判断结果为否,则继续执行等待步骤;检测步骤:令cnt的值加1,并检测左侧接收引脚上是否存在低电平,若检测结果为否,则令cnt的值为0,并执行等待步骤;若检测结果为是,则进一步半段cnt的值是否等于11*avg,若判断结果为是,则返回空闲状态,若判断结果为否,则继续执行检测步骤。本实施方式中,半双工通信机制中,要保证中继器能完成数据的可靠中继,应该时刻监测两端是否有数据发送,即空闲的时候应使两个收发器都处于接收状态,当监测到一侧收发器上有数据时,应将另一侧的收发器置为发送状态并持续发送一字节,即11位,对应的时间,并在逻辑上连接对应的数据引脚。当监测到两侧485线路均有数据发送到中继器时,即可认为是总线冲突;同时,接收线路上低电平时间持续时间超过1字节时间(11位),可以认为是总线故障(短路、断路等)。故障监测逻辑输出使能信号,控制数据流控制逻辑是否运行,同时,通过驱动对应的LED灯,给出相应提示。当SEL为高电平时,选择四线制全双工电路。此时,该中继隔离器可应用于四线制通信系统中。由于全双工通信系统中数据首发是独立的,因此不需要进行波特率识别,直接将对应的数据引脚在逻辑上连通,并使能相应的收发器使能引脚即可。对于故障监测,由于四线制系统不存在总线冲突,因此只需考虑总线故障。当数据接收引脚低电平持续时间达到一定时间时,即认为是发生总线故障,此时,要关闭收发器的使能引脚,并给出对应的故障信号。根据以上思想试制出一样机,接入到基于Modbus协议的可燃气体报警器系统中,通过QuartusII自带的SignalTap对测到的波特率进行读取,经实际测试,对几种常见固定波特率的识别误差如表1所示。表1常见固定波特率的识别误差
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1