交流伺服驱动器EtherCAT通信功能的实现*
2019-12-26张静
张 静
上海电气集团股份有限公司 中央研究院 上海 200070
1 研究背景
近年来,自动化行业发展迅速,机器人开始逐渐代替人进行相关工作。交流伺服驱动器作为机器人的关键零部件,在工业机器人、协作机器人,以及医疗与餐饮行业中的服务机器人领域,都有广泛应用。机器人属于由控制器控制多台伺服驱动器的集成系统,多台伺服驱动器的通信实时性要求较高。
传统的以太网硬件和标准传输控制协议(TCP)/网际协议(IP),如施耐德Modbus/TCP、罗克韦尔Ethernet/IP和西门子Profinet(第一版)等,已经不能满足市场对于交流伺服驱动器通信功能的要求。在不改变以太网硬件基础的前提下,Powerlink和Profinet(第二版)改善了过程数据的通信协议,但受硬件层限制,通信的实时性仍有欠缺。对此,倍福提出了EtherCAT,通过硬件集成来提高以太网的性能,同时运行过程数据通信协议和TCP/IP协议栈,保证数据链路层的实时性。EtherCAT具有拓扑结构灵活和系统配置简单的特点,满足交流伺服驱动器中通信功能实时性和成本低的要求。
2 EtherCAT概述
随着工业自动化的迅猛发展,以及EtherCAT具有较强的实时性和扩展性特点,市场上越来越多的交流伺服驱动器配置EtherCAT通信功能。为提高产品迭代更新的速率,笔者研究在现有交流伺服驱动器上实现EtherCAT通信功能。
2.1 EtherCAT主从站技术
EtherCAT由倍福于2003年提出,于2007年12月成为国际标准。作为一种实时以太网现场总线技术,EtherCAT采用主从介质访问方式,主站控制所有从站发送或接收数据。主站可以选取基于个人计算机的软件控制方法,如将TwinCAT上位机作为一个虚拟主站,但这一方法的实时性不佳,且开发费用较高。通过应用网络接口控制器(NIC)卡或集成以太网媒体访问控制(MAC)的板卡,在Linux系统中进行主站开发,可以实现良好的开源性,且费用较低。
对于从站的开发,倍福先后提出两种从站接口控制器(ESC)——ET1100和ET1200。ESC实现了EtherCAT物理层与数据链路层的通信,通常具备两个MAC地址,可扩展为两个网口,从而方便级联构成多种拓扑结构。
2.2 EtherCAT协议
CoE(CANopen over EtherCAT)协议是专门针对交流伺服驱动器制定的协议。CoE协议中EtherCAT数据帧包含标准CANopen数据帧内容,数据帧格式如图1所示。EtherCAT数据帧分为三个部分:以太网帧头、EtherCAT数据区和帧校验序列。一个完整的EtherCAT子报文由10 Byte子报文头、最大可存储1 486 Byte的数据区及2 Byte工作计数器(WKC)组成。
图1 EtherCAT数据帧格式
2.3 从站周期性过程数据通信
在交流伺服驱动器中,周期性过程数据通信非常关键,所对应的变量为过程数据对象(PDO)变量。EtherCAT从站可运行于自由运行模式和同步运行模式,前者利用查询的方式来处理PDO变量,后者在中断服务函数中处理PDO变量。
笔者主要介绍同步运行模式下的PDO变量传输方式,以及EtherCAT主站对从站的读写操作。PDO通信流程如图2所示。EtherCAT主站对从站进行写操作时,内存管理单元FMMU0复制至同步管理器通道SM2缓存器中,同时触发过程数据接口(PDI)中断。再将SM2缓存器中的数据复制至PDI_Isr中断函数中,应用层更新数据。与写操作类似,EtherCAT主站对从站进行读操作时,需要将更新后的输入数据写入同步管理器通道SM3缓存器中,内存管理单元FMMU1将SM3缓存器中的数据写入EtherCAT数据帧,进而将所读取的数据发送至EtherCAT主站。
图2 PDO通信流程
3 硬件设计
笔者打破传统的数字信号处理器(DSP)+ET1X00芯片设计模式,采用DSP+XMC4300芯片硬件结构,两片芯片之间通过串行外设接口(SPI)进行数据传输。将TMS320F2809作为交流伺服驱动器主程序芯片,同时作为SPI的主站和EtherCAT通信中的从站。通过XMC4300芯片,实现交流伺服驱动器的EtherCAT通信功能,并将这一芯片作为SPI的从站和EtherCAT通信中的主站。XMC4300芯片支持SPI全双工和半双工功能,可以有效提高数据帧的传输速率。
3.1 SPI技术
SPI通过时钟信号实现主从站的同步,数据传输时不需要增加起始位、停止位等用于同步的格式位。SPI主站发送数据的寄存器中可以直接存放要传送的数据,根据时钟节拍,将寄存器中的数据移位至SPI主站的输出口(MOSI)。根据时钟节拍,从站将接收到的数据移位至移位寄存器中。当接收完一个完整的数据帧后,设置中断标志,通知SPI从站数据已接收完毕,同时将移位寄存器中的数据传输至接收数据寄存器中。
3.2 硬件框架
硬件框架如图3所示,将基于TMS320F2809芯片的交流伺服驱动器电路板与基于XMC4300芯片的开发板通过SPI连接起来。其中,CLK为SPI通信周期的时钟信号,STE为SPI通信的片选信号,MOSI为SPI主站输出数据帧至SPI从站,这三种信号均为从SPI主站TMS320F2809芯片发送至SPI从站XMC4300芯片。SPI从站至SPI主站有五种信号,其中:MISO为SPI从站输出数据帧至SPI主站;RDY为SPI通信中的准备信号,高电平时进行数据帧传输;SYNC为EtherCAT中的sync0信号,用于实现XMC4300芯片的时钟与TMS320F2809芯片的时钟同步,保证EtherCAT的通信实时性;CS1和CS2为片选信号。
图3 硬件框架
4 软件设计
4.1 软件工具
软件开发环境采用英飞凌Dave平台,结合Dave内置的图形化编程界面App Dependency Tree,同时利用C语言进行编程。App Dependency Tree界面可以方便地增加SPI_SLAVE模块,便于设置和修改SPI相关参数。
EtherCAT主站选用TwinCAT,设定EtherCAT的通信时间为250μs。鉴于个人计算机的内核资源有限,将TwinCAT安装在倍福 C6915工控机上进行操作。
TwinCAT与基于XMC4300芯片的开发板之间通过IE-C6FP8LD带屏蔽功能网线连接,从而减少EtherCAT通信受到SPI通信的干扰。系统框架如图4所示。
图4 系统框架
4.2 SPI协议
现有的交流伺服驱动器中,DSP芯片采用Modbus协议,而XMC4300芯片采用CoE协议,为实现DSP芯片与XMC4300芯片之间的成功通信,需要建立一个新的SPI协议。建立的思路是将XMC4300芯片中CoE协议的变量名称及索引号与TMS320F2809芯片中Modbus协议的地址一一对应,方便两块芯片之间的数据传输。
以CoE协议中的状态字0x6041为例,此PDO变量为PDO1部分中的只读型变量,规定其对应TMS320F2809芯片中Modbus协议的地址值为0x850。与此类似,控制字0x6040为PDO1部分中的读写型变量,规定其对应TMS320F2809芯片中Modbus协议的地址值为0x851。
在EtherCAT通信中,XMC4300芯片作为通信的主站,TMS320F2809芯片作为通信的从站。主站向从站发送请求数据,从站向主站发送应答数据,两块芯片之间通过SPI通信来实现数据的传输。新的SPI协议中,规定一个命令对应一个数据值,命令和数据的长度均为1 Word,并且规定在命令字中高两位为命令的类型,低14位为地址值。
数据字均为16 bit,这就需要对CoE协议中的变量数据长度进行处理。对于32 bit变量,需要拆分为高16 bit和低16 bit两部分数据值。这两部分数据值分别对应不同的地址,从而实现SPI通信中的数据传输。对于16 bit变量,不需要进行数据处理操作。对于8 bit变量,需要将其数据长度扩展为16 bit。
4.3 软件框架
实现SPI基本通信功能,主要包含调用spi_handle()函数。spi_handle()函数用于初始化握手过程,插入握手阶段的数据存储,同时进行片选信号和同步信号的设置。在Dave软件开发平台上,通过图形化软件进行设计,设置SPI基本通信为全双工,传输模式为直接存储器存取(DMA)方式,每一帧的数据长度为8 bit,每一个SPI周期可以发送64帧。
设计EtherCAT通信中的PDO变量数据传输框架。根据EtherCAT的实时性及SPI每周期可传输的数据帧情况,将需要传输的PDO变量分为PDO1和PDO2部分,保证PDO1、PDO2分别每隔50μs通信一次,实现TwinCAT对伺服驱动单元的读写操作。PDO1与PDO2传输数据的时序关系如图5所示。
图5 PDO变量数据传输时序
通过TwinCAT进行PDO变量数据的读写操作,此部分需要新的SPI协议。spi_pdo_data_load()函数和Coe_read_Modbus_PDO()函数用于实现XMC4300芯片对TMS320F2809芯片写数据时的SPI通信功能,spi_pdo_data_fetch()函数和Modbus_write_Coe_PDO()函数用于实现XMC4300芯片对TMS320F2809芯片读数据时的SPI通信功能。
Coe_read_Modbus_PDO()函数针对写操作中所用到的PDO变量,对EtherCAT从站功能中的PDO变量顺序与自定义SPI协议中的PDO变量顺序确定对应关系,同时将一个32 bit的PDO变量拆分为高16 bit和低16 bit两个PDO变量。
spi_pdo_data_load()函数对写操作中所用到的PDO变量进行移位和与操作,将16 bit变量转换为8 bit变量,进而传输至SPI底层模块的端口。
Modbus_write_Coe_PDO()函数针对读操作中所用到的PDO变量,对EtherCAT从站功能中的PDO变量顺序与自定义SPI协议中的PDO变量顺序确定对应关系,同时将一个32 bit的PDO变量拆分为高16 bit和低16 bit两个PDO变量。
spi_pdo_data_fetch()函数对读操作中所用到的PDO变量进行移位和与操作,将16 bit变量转换为8 bit变量,进而传输至SPI底层模块的端口。
PDO变量读写操作流程如图6所示。
图6 PDO读写操作流程
(1)读写型PDO变量。以控制字0x6040为例,在EtherCAT主站TwinCAT中输入控制字0x6040的数据值时,EtherCAT主站向EtherCAT从站发起写操作请求。PDO变量的写操作经过SM2通道,在PDI_Isr函数中调用spi_handle()函数后,在SM2的函数中调用spi_pdo_data_load()函数和Modbus_write_Coe_PDO()函数,再通过SPI通信方式,发送至TMS320F2809芯片。
控制字0x6040为读写型变量,在进行写操作的同时,EtherCAT主站向EtherCAT从站发起读操作请求。这一读操作请求同样通过SPI通信传输至TMS320F2809芯片,TMS320F2809芯片作为SPI通信的主站,再将控制字0x6040当前的数据值通过SPI通信传输至XMC4300芯片。XMC4300芯片分别作为SPI通信和EtherCAT通信的从站,接收控制字0x6040当前的数据值。PDO变量的读操作经过SM3通道,在SM3的函数中调用Coe_read_Modbus_PDO()函数和spi_pdo_data_fetch()函数。最终将控制字0x6040的数据值传输至EtherCAT主站TwinCAT,并成功显示。
(2)只读型PDO变量。以状态字0x6041为例,在EtherCAT主站TwinCAT中输入状态字0x6041的数据值时,EtherCAT主站向EtherCAT从站发起写操作请求,由于状态字0x6041为只读型变量,因此在上位机上显示写操作错误。EtherCAT主站向EtherCAT从站发起读操作请求,步骤与读写型PDO变量相同,此处不再重复介绍。
5 测试
5.1 SPI通信周期测试
笔者设置SPI的时钟频率为12.5 MHz,每传输1 bit数据需要80 ns时间,每个SPI周期中可传输256 bit容量的数据。由此可知,理论上传输一个SPI数据帧的时间应为20.48μs,示波器上显示的实测时间为21μs,如图7所示。图7中,A为SPI数据传输中的时钟信号,B为SPI中的RDY信号。
图7 SPI通信周期测试
5.2 EtherCAT通信PDO变量读写操作测试
对于读写型变量,选取索引号为0x60E1的PDO变量,其名称为反转转矩限制值,数据长度为16 bit,写入数值为0xFFFF,如图8所示。基于TMS320F2809芯片的交流伺服驱动器端手动操作板上显示为有符号的16 bit十进制数,则对应0xFFFF实际显示值为-1,如图9所示。针对读写型变量的读写操作成功,与设计思路相符。
图8 读写型变量TwinCAT写入数值
图9 读写型变量手动操作板显示数值
对于只读型变量,选取索引号为0x606C的PDO变量,其名称为实际速度值,数据长度为32 bit。在基于TMS320F2809芯片的交流伺服驱动器端手动操作板上分别设置该变量的高位为十进制数-4,对应0xFFFC;低位为十进制数-7,对应0xFFF9,如图10所示。在TwinCAT上读取到该变量的数值为0xFFFCFFF9,如图11所示。针对只读型变量的读操作成功,与设计思路相符。
图10 只读型变量手动操作板写入数值
6 结束语
笔者对EtherCAT主从站技术、EtherCAT协议和从站周期性过程数据通信进行了介绍,设计了DSP+XMC4300芯片的硬件结构,两块芯片之间通过SPI进行PDO变量的数据传输,并规定了新的SPI协议及数据传输中16 bit数据的格式,进而实现了交流伺服驱动器EtherCAT通信功能。对新SPI协议下软件框架中的读写操作流程进行了介绍,给出了通过上位机TwinCAT对读写型与只读型PDO变量进行读写操作的具体过程,并通过测试验证了设计的合理性与正确性。