基于嵌入式Linux平台EtherCAT主站设计
2020-03-25,,,,
,,,,
(1.南京航空航天大学机电学院,江苏 南京 210016;2.上海航天控制技术研究所,上海 201109)
0 引言
随着工控的发展,伺服驱动器进入高精度时代,多轴控制的应用越来越广泛,如数控机床[1]、多自由度机器人[2]、汽车系统[3]和3D打印[4]等。多轴控制实时性与同步性问题是影响运动控制精度的重要因素,因此有必要对其进行深入的研究。
针对上述问题,国内外学者们做了相关研究。熊晶洲等[5]采用虚拟主轴法,在虚拟主轴耦合下,实现了位移/载荷比例条件下的四轴同步运动,利用双向加载试验系统进行了试验验证。Jeong等[6]引入最大误差比较方法,使得位置同步误差最小,实验结果表明该方法有效提高了四轴控制系统同步性。孙瑞芳等[7]在此基础上提出偏差耦合同步控制策略,通过扩展交叉耦合方案,将系统中的每个单元的反馈信号与其他单元的反馈信号进行比较,并将每个轴得到的反馈信息作为补偿传递到各轴控制器中,从而提高系统的同步性能。Sato等[8]提出了一种可以补偿伺服延迟的前馈控制器,通过多轴加工的仿真,验证该方法在包括旋转轴的多轴同步运动中的有效性。张恺玉等[9]提出了一种基于CAN总线的多轴电机同步的方法,通过算法控制定时器产生脉冲,从而实现多轴的同步。张高维等[10]提出了确定性调度配合延时补偿的方法,利用卡尔曼滤波算法,采用时隙划分调度测量保证数据交换的确定性,通过RBF对系统延时预测值进行补偿,使系统跟随延时自动调整,试验证明该方法有效提高了同步精度。
本文提出一种基于嵌入式Linux平台的EtherCAT主站方案。该方案主要完成嵌入式Linux平台的实时嵌入式操作系统设计,改写BeagleBone平台的继承网卡驱动,采用分布时钟动态同步机制实现多轴同步的实时性以及同步性能,最后通过两轴伺服控制平台进行了试验验证。
1 基于嵌入式平台的EtherCAT方案
方案采用BeagleBone开发板作为设计的硬件平台。基于嵌入式Linux的主站设计方案主要分为3个层面,分别是用户层、内核层和执行层。设计方案如图1所示。
图1 基于嵌入式Linux的EtherCAT主站方案
用户层包括主站对总线上的从站描述文件的解析,xml描述文件包含从站ID信息、从站相关可操控的对象字典,以及用户应用层控制程序。
内核层包括内核实时化,采用实时内核对Linux标准内核进行实时化改造,构建实时操作系统,并通过测试系统的实时任务调度延时来测试系统的实时性。其次在实时系统上移植IgH主站框架,在实时任务中调用IgH主站的API函数。IgH是EtherCAT协议的实现,可完成总线的通信工作,包括总线上数据的收发解析,以及同步时钟的动态补偿。在内核层,网卡驱动是极其重要的一环,将网卡设备直接提交给主站管理,并且在EtherCAT数据传输中,数据不经过网络堆栈,由于任务的强实时性,数据帧的回收是可预知的,可关闭一些中断。
执行层是从站上的伺服驱动设备,并连接有相应的电机以及其他IO模块设备,提供输入输出信号。执行层通过网线接收来自总线上的数据帧,从数据帧上获取针对自己的任务执行数据,或者是将需要上传的数据放入数据帧中传回给主站模块。
2 基于Xenomai实时操作系统设计
EtherCAT总线主站要求Linux系统具有较强的实时性,但标准内核的Linux操作系统并不是硬实时操作系统,所以需要对Linux内核的实时性改造。本设计采用Xenomai实时内核,构造Linux+Xenomai的双内核系统,Xenomai的中断管道管理机制能有效管理任务优先级以及中断事件,并且为实时应用的开发提供丰富的接口和功能。经过改造后的系统内核架构如图2所示。
图2 实时系统内核框架
在Linux标准内核中嵌入Xenomai实时核的流程是:通过Xenomai脚本将它与Linux内核联系起来,并打上必要的补丁;在Linux内核的配置中,需要使能Xenomai,并且关闭Linux内核中CPU频率缩放等功能的配置;交叉编译Linux内核以及Xenomai实时核,将编译完成的镜像、库等文件移植到开发板上。
3 基于EtherCAT的分布时钟
分布时钟是EtherCAT协议中最重要的功能。在工控领域和运动领域,需要多轴之间具有高精度的同步性能。IgH的分布时钟[11]功能使得总线上的所有设备使用相同的系统时钟tsys_ref,产生SYNC信号,从而控制设备同步执行各自的任务。总线上的每个设备都有自己的本地时钟tlocal(n),系统会计算初始时钟偏差Toffset(n)并将其补偿写进总线上的从站设备,使得设备全部同步到参考时钟。假设从站本地时钟大于参考时钟,则有
tlocal(n)=tsys_ref+Toffset(n)
(1)
从站之间的时钟差主要是由传输延时Tdelay(n)和初始偏移量造成,假设数据帧到达参考时钟(从站0)的时刻是T1时刻,到达第n个从站时的时刻为T2(n),则有tlocal=T2(n),此时关系为
T2(n)-T1=Toffset(n)+Tdelay(n)
(2)
整理上述等式,可得
Toffset(n)=T2(n)-T1-Tdelay(n)
(3)
数据帧经过总线上所有的从站后返回,当数据帧再次经过第n个从站时,时刻为T(n),最后数据帧再次到达参考时钟,时刻为T4。假设线缆上传输时间一样,所有从站处理数据帧时间一样,则传输延时可计算得
Tdelay(n)=[(T4-T1)-(T3(n)-T2(n))]/2
(4)
同时由于设备的本地时钟存在偏移以及偏移累加,系统会定时刷新总线上设备的时钟,保证设备间的同步性能。
4 基于ARM网络芯片驱动设计
EtherCAT主站的驱动模块就是网卡的驱动模块[12],主站将数据报文包装成以太网的格式,通过网卡接收和发送数据报文。IgH框架中网卡驱动部分主要有2种形式:第1种是通用网卡驱动,即可支持所有网卡驱动,但是在实时性上效果比较差;第2种是本地网卡驱动,这是一类针对特定网卡做出特定的驱动修改,以适应高效的传输速率和极端的传输延时。2种网卡驱动的区别如图3所示,本研究采用第2种网卡驱动方式。
本文设计基于ARM集成网卡,并对此网络芯片驱动进行优化。如图4所示,优化的主要内容是:首先,将网卡设备的打开关闭等动作交给主站模块,取消设备在内核系统中的注册;其次,EtherCAT设备不经过网络堆栈,所以屏蔽所有的网络堆栈接口函数;同时,由于EtherCAT协议的实时性,使得总线上的数据帧的回收时间可预知,所以关闭原网卡驱动程序中的中断函数,改写成定时轮询函数;最后,主站在每次发送完成功后并不释放socket缓冲区。在每次发送时,重新将数据帧填满socket,然后将其传递给hard_start_xmit()回调函数。
图3 通用网卡驱动与本地网卡驱动
图4 网卡驱动设计流程
5 主站系统试验验证与分析
采用集成TI网卡的BeagleBone开发板,硬件上运行自行设计的主站系统作主站平台。搭建一主两从的伺服控制平台,两轴采用串联线型头结构,如图5所示。
图5 两轴伺服控制平台
5.1 系统实时性测试
5.1.1 系统任务调度测试及延时测试
在Xenomai内核模式下,运行测试程序latency,设定周期1 ms,测试时长5 min,测试系统的任务调度延时性[13]。测试结果:最大调度延时为36.397 μs(3.640%),最小调度延时为1.952 μs(0.195%)。
在从站传输延时测试中,从主站发送下来的数据帧在从站间的传输,由于从站之间的物理传输介质以及从站对数据帧的处理需要时间,导致从站接收数据帧有一定的延时。测试总线伺服驱动器以及另外3个IO模块,测试结果如图6所示。
图6 从站传输延时结果
5.1.2 伺服从站控制抓包测试
在从站控制测试中,设置任务周期1 ms,上位机主站针对所有从站发送从站控制指令,通过Wireshark抓包测试,测试数据包中的数据信息以及程序控制周期。从几万次的抓包结果中,随机选取100组数据,得到如图7所示的结果。结果显示抓包周期间隔在任务周期1 ms上下浮动20 μs,占比2%。同时对数据帧进行分析,可知操作计数器WCK的值正确变化,即读操作+1,写操作+2,数据帧中正确显示对伺服从站的控制数据。
图7 总线数据帧抓包测试
5.2 同步性测试
本测试是在改造后的网络芯片驱动下,采用Rohde & Schwarz示波器,任务周期为1 ms,测试伺服从站同步引脚sync0中断信号之间的同步时间差,测试时长1 min,采样10万余次,测试结果如图8所示。
由图8可知:同步误差负峰值为-56.571 ns,如B点所示;正峰值为13.155 ns,如A点所示;C点同步时间差是0 ns,表示完全同步。其中,最大同步误差对应负峰值56.571 ns,并且测试结果给出了平均同步时间差20.178 ns。此测试数据具有良好的说服力,即主站具有优秀的同步性能。
图8 从站同步性测试
6 结束语
本文设计并实现了基于嵌入式Linux平台的EtherCAT主站方案,进行了基于Xenomai的Linux实时操作系统改造,完成了ARM集成网卡的网络芯片驱动设计改造。搭建了一主二从试验平台,并进行了相关试验验证。结果表明,所设计的嵌入式Linux平台下的EtherCAT主站具有优越的实时性以及同步性能。