创龙科技提供了基于IMX8、ZYNQ、AM5728、AM5708、AM437x、AM335x、T3/A40i等平台的开源EtherCAT主站IgH案例。本文主要演示TLZ7x-EasyEVM-S评估板如何控制基于IgH EtherCAT的伺服电机。
案例适用开发环境:
Windows开发环境:Windows 7 64位、Windows 10 64位
Linux开发环境:Ubuntu 14.04.3 64位
虚拟机:VMware15.1.0
PetaLinux:2017.4
内核:linux-xlnx-xenomai-g7645980-v1.0
IgH EtherCAT:ethercat-stable-1.5-gcd0d17d-20210723
Xenomai:xenomai-v3.0.11-g4f49146
伺服驱动器:台达ASD-A2-0121-E
伺服电机:台达ECMA-C10401GS
硬件平台:TLZ7x-EasyEVM-S评估板(Xilinx Zynq-7010/7020)
图1 TLZ7x-EasyEVM评估板
图2 SOM-TLZ7x-S核心板
IgH EtherCAT是一个运行在Linux系统上的免费开源EtherCAT主站程序。框架如下。
图3
IgH EtherCAT主站构建Linux字符设备,应用程序通过访问字符设备实现与EtherCAT主站模块的通信。
IgH EtherCAT开发套件提供了EtherCAT工具,该工具提供了可以在Linux用户级运行的各种命令,可以直接访问和设置从站,例如设置从站地址、显示总线配置、显示PDO数据、以及读写SDO。参数等
案例功能:控制伺服电机正反转。
正转:伺服电机的目标速度从0加速到10000。当达到10000转速时,控制伺服电机减速到0,循环运行。反转:伺服电机目标速度从0加速到-10000。达到-10000速度后,控制伺服电机减速至0,循环运行。图4
请使用网线如下图连接评估板的RGMII ETH网口和伺服驱动器A的IN网口,并将伺服驱动器A的OUT网口连接到IN网口使用网线连接伺服驱动器B。
图5
图6
为了方便测试,我公司提供了经过验证的内核镜像文件和基于Xenomai编译的设备树镜像文件,位于案例目录'igh_ethercat_dc_motor\kernel-xenomai\images\linux-xlnx-xenomai-g7645980-v1.0 '。请将其替换为Linux系统启动卡rootfs分区的启动目录。同时将linux-xlnx-xenomai-g7645980-v1.0目录下的模块驱动压缩包4.9.0-xilinx-g7645980.tar.gz解压到rootfs分区的‘lib/modules/’目录下Linux系统启动卡。
注:如果需要使用重新编译内核源代码生成的内核映像文件和设备树文件,请参考Linux系统用户手册将编译好的模块驱动程序安装到Linux系统启动卡中。安装后默认模块驱动目录为4.9.0-xilinx。
图7
将整个IgH EtherCAT主站程序文件夹复制到评估板文件系统中,执行以下命令查询评估板网卡的物理地址。
图9
执行以下命令加载驱动模块。
目标# insmod /home/root/_install/modules/ec_master.ko main_devices=00:0a:35:00:01:22
图10
执行以下命令将EtherCAT主站相关文件复制到评估板文件系统中。
目标# mkdir /etc/sysconfig
目标# cp _install/etc/sysconfig/ethercat /etc/sysconfig
Target# cp _install/modules/ec_master.ko /lib/modules/4.9.0-xilinx-g7645980///模块驱动名称可以通过‘uname -r’查看
Target# depmod //同步模块依赖
图11
执行以下命令启动EtherCAT主站。
目标# /home/root/_install/etc/init.d/ethercat start
图12
执行以下命令加载ec_generic.ko驱动文件。
目标# insmod _install/modules/ec_generic.ko
图13
执行以下命令添加IgH动态链接库路径。
目标#导出LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/root/_install/lib
图14
将case igh_ethercat_dc_motor可执行文件复制到评估板文件系统中,执行以下命令查看参数信息。
目标# ./igh_ethercat_dc_motor --help
图15
执行以下命令控制两个伺服电机同时正转。
目标# ./igh_ethercat_dc_motor -d 0
图16
图17
按“Ctrl+C”停止运行程序。
图18
执行以下命令可控制两个伺服电机同时反转。
目标# ./igh_ethercat_dc_motor -d 1
图19
图20
图21
按“Ctrl+C”停止运行程序。
图22
注:案例设置EtherCAT周期为1ms,串口循环打印EtherCAT周期的最小值和最大值。
参数分析:
延迟:等待唤醒的时间。 period:EtherCAT通讯周期时间。 exec:接收和发送EtherCAT数据的时间。