实时数据串行通信协议设计*

2014-07-18 11:59唐小琦
组合机床与自动化加工技术 2014年1期
关键词:波特率主站误码率

李 松,唐小琦,宋 宝

(华中科技大学 机械科学与工程学院,武汉 430074)



实时数据串行通信协议设计*

李 松,唐小琦,宋 宝

(华中科技大学 机械科学与工程学院,武汉 430074)

文章结合嵌入式数控系统的需求,设计一种兼容实时数据和非实时数据传输的高速、高可靠性串行通信协议——SCP-Bus,在基于FPGA和高速RS485接口芯片的硬件平台上,解决了嵌入式数控系统数据的实时性问题、异步通信中接收方与发送方波特率时钟相位对准问题、工业现场应用的干扰问题等。试验和现场使用结果表明,SCP-Bus串行通信协议能够满足嵌入式数控系统与外部设备之间通信的要求。

实时;FPGA;串行通信

0 引言

在数控系统中,从结构上来讲,分为非总线式和总线式,非总线式是将轴数据,I/O数据,DA/AD数据,编码器反馈数据等直接通过直连的方式接入数控核心板,这样会导致接线复杂而且凌乱,往往数控系统对线缆要求较高,需要加入屏蔽层和磁环等防干扰措施,这些线缆价格昂贵,做线工作量大,接线工作量也大。如果采用总线式结构,将所有数据都通过总线进行交互,就能避免传统非总线结构带来的不便。针对总线式数控系统,现有的总线协议主要有:华中数控开发的NCUC-BUS,CAN,工业以太网现场总线EtherCAT,Modicon开发的Modbus[1]等。这些总线协议虽然功能齐全而且强大,实时性很高,误码率很低,但是都较为复杂,资源消耗量大,在linux下的驱动复杂,如果应用在嵌入式数控系统中不经济。

针对嵌入式数控系统,本文设计了一套简单的,满足实时数据与非实时数据的传输要求,兼容一般MCU的UART或者USART的串行通信协议——SCP-Bus(Serial Communication Protocol bus)。在基于现场可编程逻辑阵列(FPGA)[2]和RS485接口芯片硬件平台上,实现了数控系统到伺服驱动器、远程I/O模块、MCP键盘之间的数据通信,解决了资源消耗大,驱动复杂的问题,同时轴数据的实时性与误码率也能满足嵌入式数控系统的要求。

1 SCP-Bus通信物理结构

在嵌入式数控系统中,因为各个设备与主站之间的数据传输是一点对多点的形式,因此SCP-Bus协议采用多从站串行通信的结构。SCP-Bus协议采用星形连接[3],因为考虑到数控系统的需求,设计从站负载量为15个。如图1所示,主站和每个从站都包含有一个Altera公司的FPGA和高速485芯片,FPGA用于SCP-Bus协议的实现和与linux驱动层交互,高速485芯片用于接收和发送差分信号。

图1 SCP-Bus协议物理结构

为了增强对外界干扰的抗干扰能力,减少总线误码率,SCP-Bus以差分信号为载体进行数据传输,在主从站的两端,加入终端匹配电阻,在高波特率或者是长距离传输的情况下,减少对信号的反射干扰[4]。除此以外,为了使总线在空闲时期和主从站断开时期有一个确定的电平,在两端加入了偏置电阻。

考虑到数控系统轴数据的通信周期一般为8ms、4ms、1ms,也就是说轴数据需要很高的通行速度,需要在一个插补周期内完成一次轴数据刷新,所以对485芯片通信速度要求较高。另一方面,因为要实现多从站通信,所以从站的485芯片的发送端需要有与总线断开的功能[5],也就是说在同一时间,只能有一个从站挂在总线上,并与主站通信。综上,在选择485接口芯片时,主要需要考虑这两个要求,故选择了TI公司SN65HVD36高速485芯片。该芯片最高速度20Mbps,完全满足嵌入式数控系统的速度要求,而且该芯片有发送和接收使能端,满足多从站星形连接要求。

2 SCP-Bus与UART的兼容性

在嵌入式数控系统中,有许多设备,诸如I/O,AD/DA设备是使用MCU作为控制器的,为了兼容此类设备,SCP-Bus采用异步串行全双工通信模式,在设计SCP-Bus协议时,数据传输的最小单元是一个字节,每个字节设置一个起始位(图2中的第1位),8个有效数据位(图2中的第2~9位),一个奇偶校验位(图2中的第10位),一个停止位(图2中的第11位)。这样设计就能保证普通MCU能够作为SCP-Bus协议的从站,通过MCU的串口挂到总线上。

图2 SCP-Bus协议最小通信单元

3 SCP-Bus通信协议设计

3.1 SCP-Bus通信协议框架设计

SCP-Bus协议是基于FPGA实现的,主要工作是设计SCP-Bus协议IP核,在设计协议IP核时,采用主从分开,自上而下的层次化设计方案。SCP-Bus协议的通信模式是:所有通信都是由主站发起,从站被动响应。所以主站与从站的协议IP核是不相同的。把主从分开来设计,设计思路更加清晰。而在分别设计主从站协议时,运用自上而下分层设计的方案,每个层次完成独立的工作,各层之间的交互都是通过访问寄存器的方式进行,这样就划清了层次之间的界限。这对协议的后期维护和修改是有重要意义的。

SCP-Bus协议主站协议在层次结构上分为1:与linux操作系统的交互层;2:SCP-Bus协议实现层;3:数据发送与接收层。这三层的关系如图3所示。

图3 SCP-Bus协议主站层次结构

在与linux操作系统的交互层中,linux操作系统读取主站采集上来的从站信息(从站的属性,比如是实时数据站还是非实时数据站等),读取从站上传上来的数据,写入需要发送到从站的数据。

主站SCP-Bus协议实现层中,主要完成以下任务:①从站设备的设备属性的扫描;②实时数据通信与非实时数据通信的调度;③实时数据通信强制定时通信;④非实时数据通信轮询通信;⑤总线出错处理机制的实现;⑥与数据发送与接收层交互;⑦将数据写入linux操作系统交互层;⑧从linux操作系统交互层读取数据。

数据发送与接收层中,主要完成从SCP-Bus协议实现层中接受命令和数据,对数据进行组帧,加入CRC16校验值,对每一个字节加入起始位,奇偶校验位,停止位后,发送到总线上。

加强肛门括约肌反馈训练可有效提高腹腔镜下大肠癌根治术后病人肛门括约肌力量,减少术后排便困难发生率,避免病人因疾病并发症产生焦虑、抑郁等负面情绪,提高病人生活质量[29]。肛门括约肌反馈训练过程中,护理人员应将携带气囊的测压导管直接插入大肠相应区域,根据显示器反馈的压力情况调整阈值,增强病人肛门括约肌力量[30]。Arafa等[31-32]通过对病人实施电刺激生物反馈实验发现:将诱发电位检测仪应用到肛门括约肌收缩刺激中,对腹腔镜下大肠癌根治术病人术后康复具有重要意义。

SCP-Bus协议从站协议在层次结构上分为①交互层;②命令响应层;③数据发送与接收层。交互层主要任务是将收到的数据存入双口Ram,并且在从站数据得到更新后,给出一个脉冲信号,表示数据更新一次。命令响应层根据主站下发的命令,做出相应响应。从站数据发送与接收层跟主站的数据发送与接收层行使一样功能,而且代码也是一致的。

3.2 SCP-Bus实时通信机制

为了保证实时数据(数控系统中的轴数据)能够在期望的时间内得到更新,非实时数据也能在相对宽松的时间内也得到更新,需要一个强有力的调度机制来保证,另外还需要添加一个必要的限制——实时性从站的数目的限制。实时性从站的个数限制可以通过下列公式进行计算:

(1)

(2)

(3)

(4)

式(1)中,TInterpolation为数控系统插补周期,TRead(baud),TWrite(baud),TReadWrite(baud)分别为读周期,写周期,读写周期,单位为ms。LRead,LReplyRead,LWrite,LReplyWrite,LReadWrite,LReplyReadWrite分别为读命令帧帧长度,回复读命令帧帧长度,写命令帧帧长度,回复写命令帧帧长度,读写命令帧帧长度,回复读写命令帧帧长度,单位为bit。经过上述公式计算,在插补周期为8ms,波特率为3571428bit/s情况下,实时性从站数目最多为32个,在插补周期为4ms,波特率为3571428bit/s的情况下,实时性从站数目最多为16个,在插补周期为1ms,波特率为3571428bit/s的情况下,实时性从站数目最多为4个。

在保证实时性从站在限制数目内的前提下,实时与非实时通信进程调度就能有效保证实时数据在期望的时间内得到更新。而这个调度机制是基于时间片分配的一个调度算法。其具体调度机制如图4所示。

图4 实时与非实时通信调度机制

当Slave Scan完成后,立刻触发正常通信,进入正常通行阶段后首先调度实时性从站进入通信,进入实时性从站的通信后,首先会重置TInterpolation和Tserve看门狗时钟。所有实时性从站依次完成一次通信后,调度进入非实时性从站的通信,在非实时从站的通信中,每次调度新的非实时从站进入通信之前,检测Tserve和TInterpolation时钟计时到否,如果Tserve时钟到,调度进入Tservetimeup状态,在这种状态下,总线空闲,等待TInterpolation到来。如果TInterpolation时钟到,重置两个看门狗时钟,调度实时性从站进入通信状态。

为了便于理解,描述几种极端行为,如果在slavescan后得到的从站中,没有实时性从站,这时总线就会在非实时从站中不停循环通信,比如非实时从站有1、7、9、16号从站,那么总线就会轮转地分配时间片给1、7、9、16。

如果在slavescan后得到的从站中,实时性从站的数目过多,超过了总线的额定负荷Nmax,这时总线在完成实时性从站的通信后,一旦调度到非实时从站通信状态就发现TInterpolation计时到,立刻又调度回实时性从站通信。非实时从站分配不到通信的时间片,实时性从站的实时通信也无法得到保证。这就是为什么需要计算实时性从站个数的最大值Nmax。

在嵌入式数控系统中,轴设备从站是比较特殊的实时性从站,如果操作系统层未向主站交互层写入数据(表示这个插补周期插补值为0),那么主站在实时通信进程中,需要自动将轴数据自动填充为0,否则轴设备从站会误动作。为了实现这个特殊要求,在主站交互层中监控了linux操作系统往交互层中的写动作,如果检测到了linux操作系统往轴数据区写入了数据,对应数据区状态设置为Full,当SCP-Bus协议实现层从轴数据区取走数据后,对应数据区状态设置为Empty。每次SCP-Bus协议实现层在取轴数据时,首先询问轴数据状态,如果是Full,按照原样发走数据;如果是Empty,自动填充0后再发走数据。同样地,linux操作系统层在往轴数据区写入数据时,需要询问轴数据状态,如果是Full,表明上次写入的轴数据还未发走,需要等待它被发走后,状态为Empty时才能写入。

3.3 接收波特率相位自适应

由于SCP-Bus采用异步串行通信方式,所以发送方波特率时钟、接收方波特率时钟是在发送方和接收方内部自行产生的,如果发送方波特率时钟和接收方波特率时钟相位没对准,会增大通信的误码率[6]。在SCP-Bus中,所有发送方波特率时钟都自由产生,对相位不作要求,而要求接收方波特率时钟作自适应调整[7]。自适应的方法是:对接收方来说,在接收数据线空闲时,接收方不产生波特率时钟。只要接收方在接收数据线上采集到一个下降沿,接收方认为总线上来数据了,才开始产生波特率。这样接收与发送的波特率会自动对准。对准效果如图5所示。

图5 接收方波特率相位自适应

图中可以看出,接收方波特率时钟与发送方波特率时钟的相位差只有1个系统时钟(20ns),满足对准要求。

4 实验平台及测试

本文设计的SCP-Bus测试平台由DNC-11嵌入式数控系统,2个HIO-1000远程单元,MCP远程控制台组成,主站为DNC-11,下辖3个从站,其中2个实时性从站,1个非实时性从站。本文从实时性与实时性从站个数的关系、误码率与通信波特率的关系来评价SCP-Bus总线的性能。试验方法如下:①对实时性测试:主站数控系统通过基于xenomai的实时linux驱动向实时性从站写入轴数据[8],完成从0~2000pulses/8ms的加速过程,然后从2000~0pulses/8ms的减速过程,停止2秒,反向进行下一次加减速,再停止2秒,如此循环,观察伺服电机的最终位置是否为0,如果为0,说明脉冲没有丢失,实时性良好。②对于误码率与通信波特率的关系的测定:因为影响误码率的因素很多,比如测试环境的电磁干扰强度、传输线的长度、通信波特率、通信线缆的材质等,但是本文主要关注通信波特率对误码率的影响,故将其他变量设置为定值,测试环境为:昆明机床厂生产车间,2台伺服电机使能的情况下测定;线缆长度:20M;通信线缆:普通有屏蔽层双绞线,加磁环。本文在总线上设置总线监控模块,统计总线上错误帧的帧数。通过72小时测试,测试结果如图6、图7所示。

图6 SCP-Bus实时性测试结果

从图6中可以看出,在实时性从站个数少于Nmax时,脉冲丢失个数为0,实时性很好,但是当实时性从站个数大于Nmax时,脉冲丢失个数很大,在使用时,一定要保证实时性从站个数小于计算值Nmax。

从图7中可以看出,波特率对误码率的影响很大,在低于3.5Mbp/s的情况下,误码率很小,满足使用要求。当波特率大于3.5Mbp/s后,误码率剧增,不能满足使用要求。

SCP-Bus总线对比NCUC-bus总线,两者在FPGA资源消耗和linux驱动复杂程度上的对比结果如下:

图7 SCP-Bus误码率测试结果

FPGA资源消耗是评价逻辑复杂程度的指标,SCP-Bus 消耗的total logic elements为 2702门,NCUC-Bus消耗的total logic elements 为3588门;SCP-Bus 消耗的total registers为1442个,NCUC-Bus 消耗的total registers为2674个;SCP-Bus 消耗的total memory bits为8192个,NCUC-Bus 消耗的total memory bits为831488个[9]。如图8、图9所示。

图8 SCP-Bus逻辑资源消耗

图9 NCUC-Bus逻辑资源消耗

Linux系统驱动程序复杂程度用驱动程序行数来度量,SCP-Bus总线linux驱动程序233行,NCUC-Bus总线linux驱动程序2434行[10]。

从逻辑资源的消耗和linux驱动代码的复杂程度对比结果可以看出,SCP-Bus是一条十分精简的总线。

5 结束语

本文设计的SCP-Bus总线,已经应用在了DNC-11TA数控系统中,成为该系统的一个标准协议,经过现场检验,该总线满足设计要求,在实时性从站个数小于Nmax和波特率小于3.5Mbp/s的情况下,实时性良好,可靠性良好,误码率低。在嵌入式数控系统中对扩展轴设备,I/O设备,AD/DA设备等有广泛的应用价值。

[1] 贺毅,赵望达,刘勇求. 现场总线技术应用及其发展趋势探讨[J]. 工业计量,2005(1):55-58.

[2] 尚明. FPGA技术的应用与发展趋势[J]. 科技资讯,2007(14):32-34.

[3] 田立志,王美忠,孙广,等. 485总线使用中的问题与编程[J]. 设备管理与维修,2007(7):77-80.

[4] 董兵,许晓斐. RS-485总线系统通信可靠性设计与应用[J]. 广东轻工职业技术学院学报,2009(3):84-88.

[5] 张习加,李成群. 波特率自适应的RS-485中继器设计[J]. 单片机与嵌入式系统应用,2007(8):34-38.

[6] 冷玉林,钟将. 基于ARM的嵌入式Linux系统构建[J]. 计算机系统应用,2010(11):64-70.

[7] 刘萍先,曹清华,赵筱媛. 基于RS232/485协议的多机通信系统的设计[J]. 南昌工程学院学报,2008(12):17-20.

[8] 金如彬,叶萍萍,陈詠恩. 异步串行口波特率自动调整的原理与实现[J]. 同济大学学报(自然科学版),1998(12):729-731.

[9] 王翰,宋宝,唐小琦,等. 基于NCUC-Bus现场总线的驱动信号转发装置的设计与实现[J]. 组合机床与自动化加工技术,2012(7):23-27.

[10] 刘慧双,宋宝,周向东,等. 嵌入式数控系统NCUC-Bus现场总线设备驱动研究与开发[J]. 组合机床与自动化加工技术,2012(8):63-65.

(编辑 李秀敏)

The Design of Real Time Serial Communication Protocol

LI Song, TANG Xiao-qi, SONG Bao

(School of Mechanical Science and Engineering, HuaZhong University of Science and Technology, Wuhan 430074, China)

Considering the requirement of the Embedded NC System, this paper designs a high speed and reliable serial communication protocol-SCP-Bus, which is compatible with the transmission of real time data and non-real time data. Based on hardware platform composed of PFGA and high speed RS485 chip, this paper solves the problem of data’s instantaneity in Embedded NC System, and the problem of baud rate clock’s phase alignment between the receiver and the sender in asynchronous communication, the problem of disturbance in industrial field, and etc. The result of experiment and field application indicates that SCP-Bus can meet the demands of communication between the Embedded NC System and peripheral equipment.

embedded NC System; real time; FPGA; serial communication

1001-2265(2014)01-0096-04

10.13462/j.cnki.mmtamt.2014.01.027

2013-05-14;

2013-06-20

“高档数控机床与基础制造装备”科技重大专项(2012ZX04001012);“高档数控机床与基础制造装备”科技重大专项(2012ZX04001041);高等学校博士学科点专项科研基金(新教师基金课题)(20090142120035)

李松(1986—),男,四川乐山人,华中科技大学硕士研究生,主要研究方向为数控技术、嵌入式系统,(E-mail)374985119@qq.com。

TH165;TG65

A

猜你喜欢
波特率主站误码率
UART 波特率检测电路的FPGA 设计算法与实现
面向通信系统的误码率计算方法
利用混合RF-FSO 系统改善深空通信的研究
CAN 总线波特率自适应程序设计
基于S7-1200 PLC的DP总线通信技术在马里古伊那水电站泄洪冲沙孔门机上的应用
一种快速同步统计高阶调制下PN 码误码率的方法∗
浅谈西门子S7—400与S7—200的通讯实现方法
波特率自适应的CAN驱动在嵌入式Linux下的实现①
EtherCAT主站与主站通信协议的研究与实现*
多表远程集抄主站系统