ECAT运动控制器ARM软件设计
一、ARM向FPGA发送目标位置
1、对应的操作地址
define TARGET_CUR_POSL 2
`define TARGET_CUR_POSH 3
2、操作步骤
发每个轴的位置时,先通过写地址1,告知FPGA接下来要发送目标位置的伺服;
通过写地址2向FPGA写目标位置的低16bit;
通过写地址3向FPGA写目标位置的高16bit。

3、注意
通过地址1,向FPGA写接下来要操作的伺服,写0表示第一个伺服,写31表示第32个伺服,以此类推。
在读写操作完成之前,不要改变指定的伺服。也就是说指定伺服+读写数据,是一整套。
二、ARM向FPGA读取当前位置
1、对应的操作地址,与目标位置共享一套地址
define TARGET_CUR_POSL 2
`define TARGET_CUR_POSH 3
2、操作步骤
发每个轴的位置时,先通过写地址1,告知FPGA接下来要读取当前位置的伺服;
通过读地址“2”向FPGA读取当前位置的低16bit;
通过读地址“3”向FPGA读取当前位置的高16bit。
三、ARM向FPGA发送控制字
1、对应的操作地址
define STS_SERVO 4
2、操作步骤
发每个轴的控制字时,先通过写地址1,告知FPGA接下来要发送控制字的伺服;
通过写地址4向FPGA写伺服的控制字;FPGA会根据第一步的伺服去对应该控制字是给哪个伺服的。
当ARM通过地址58检测到所有伺服进入OP状态后,可以通过控制字来控制各个伺服进入伺服使能状态,具体的操作流程为:顺序发送控制字6、7、15。每发送一个控制字,伺服对应的状态字就会发生变化。通过检测状态字的变化来确定发送下一个控制字。
回零的控制字为15到31,回零完成后,控制字要返回15。
四、ARM向FPGA读取状态字
1、对应的操作地址
define STS_SERVO 4
2、操作步骤
发每个轴的控制字时,先通过写地址1,告知FPGA接下来要读取控制字的伺服;
通过读地址4向FPGA读取对应伺服的控制字。
五、ARM读取轴的位置缓存数据的个数
1、对应的操作地址
define ECAT_POS_FIFO_CNT 65
2、操作步骤
FPGA为每个轴的目标位置都对应设计了一个32深度的缓存,ARM根据缓存和需要将目标位置发送到这个缓存,供FPGA的ECAT刷新。
通过写地址1,告知FPGA接下来要读取数据个数的伺服;
通过读地址65来读取对应伺服的轴数据缓存中数据个数。
六、ARM在启动FPGA的ECAT之前需要配置的内容
1、配置FPGA内容的相关写地址
define SM1_PHYADDR 50
define SM3_PHYADDR 52
define LOOP_PERIOD_H 55
`define LOOP_PERIOD_L 56
2、具体含义
M0_PHYADDR,SM0的地址,16bit,xml文件中的高低8bit交换后,下发给FPGA。
M1_PHYADDR,SM1的地址,16bit,xml文件中的高低8bit交换后,下发给FPGA。
M2_PHYADDR,SM2的地址,16bit,xml文件中的高低8bit交换后,下发给FPGA。
M3_PHYADDR,SM3的地址,16bit,xml文件中的高低8bit交换后,下发给FPGA。
ATCHDOG_SUPPORT,伺服是否支持看门狗,写1表示支持,写0表示不支持,从测试的5家伺服来看,除久同外,其他家均支持。
OOP_PERIOD_H ,为循环周期的高16bit。
OOP_PERIOD_L ,为循环周期的低16bit。
七、控制和状态寄存器
1、相关操作地址
define SERVO_INIT_DONE_ALL 58
2、具体含义
CAT_RSTN ,ARM向该地址写1,启动FPGA的ECAT运行。
ERVO_INIT_DONE_ALL,ARM通过该地址读取所有伺服是否初始化完毕,1表示完毕。
八、伺服参数配置功能寄存器
1、相关操作地址
define PARA_SUB_INDEX 78
define PARA_DATA_L 80
define PARA_DATA_UpLOAD 82
define PARA_DATA_UpLOAD_L 84
define PARAM_SET_RST 86
`define PARAM_SET_SERVO 87
九、伺服回零功能
多个伺服同时回零的流程:
通过参数设置端口,依次将各个伺服设置成模式6,再依次发送控制字31,再依次去读取状态字,如果读到某个轴的状态字是回零完成,就将该轴的控制字写回15,并然后通过参数设置接口将其模式设置为8。
十、伺服IO读取与写入
在启动ECAT之前,通过如下两个地址,分别配置伺服IO的地址:
define S2M_IO_PHYADDR 48 //master input
地址47为运动控制器输出到伺服的IO指令;
地址48为运动控制器从伺服获取的IO状态。
启动ECAT后,通过地址99来输出IO指令到伺服,或者从伺服获取IO状态。
`define SERVO_IO 99
同理,通过地址4来指定所要操作的伺服。
初定为8输入8输出,16位数据线的低8bit有效。
十一、其他标志
轴数据缓存的空满标志、ECAT断线等等标志
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!