正运动三轴运动控制卡ECI3320控制汇川EtherCat伺服2
调试记录:
硬件配置表:
正运动三轴控制卡型号:ECI3320
汇川伺服驱动器型号:IS620NS2R8I,伺服电机型号:MS1H4-40B30CB Type:A331Z
调试完成的功能:
1、利用绝对式编码器,编码器位置记录,不用每次进行回零操作。
a、首先确认绝对式编码器型号的电机和伺服驱动器型号
b、驱动器开启绝对值
参考链接:绝对位置模式简单应用介绍 - 通用伺服(单传) - 汇川技术官网-水滴社区 - Powered by Discuz! (inovance.com)
2、设置扭矩模式下伺服电机的运动速度,利用扭矩速度限制进行控制。
3、利用正运动的板卡进行位置模式和扭矩模式切换,完成挤压力控制
a、设置电机的电子齿轮比,改型号的驱动器,要通过EtherCat总线函数进行电子齿轮比设置,再进行正运动卡组态时完成电子齿轮比的设置。
完整的函数如下:
'*******************************************************ECAT总线初始化
'''''''''
global CONST BUS_TYPE = 0 '总线类型。用于上位机区分当前模式
global CONST MAX_AXISNUM = 8 '最大轴数
global CONST Bus_Slot = 0 '槽位号0
global CONST Bus_AxisStart = 0 '总线轴起始轴号
global Bus_InitStatus '总线初始化完成状态
Bus_InitStatus = -1
global Bus_TotalAxisnum '检查扫描的总轴数
delay(3000) '延时3S等待驱动器上电
'**********************初始化ECAT总线
Ecat_Init()
end
global sub Ecat_Init()
for i=0 to MAX_AXISNUM - 1 '初始化还原轴类型
AXIS_ENABLE(i) = 0
atype(i)=0
next
Bus_InitStatus = -1
Bus_TotalAxisnum = 0
SLOT_STOP(Bus_Slot)
delay(200)
slot_scan(Bus_Slot) '开始扫描
if return then
?"总线扫描成功","连接设备数:"NODE_COUNT(Bus_Slot)
?
?"开始映射轴号"
for i=0 to NODE_COUNT(Bus_Slot)-1 '遍历总线下所有从站节点
if NODE_AXIS_COUNT(Bus_Slot,i) <>0 then '判断当前节点是否有电机
for j=0 to NODE_AXIS_COUNT(Bus_Slot,i)-1
AXIS_ADDRESS(Bus_AxisStart+i)=Bus_TotalAxisnum+1 '映射轴号
ATYPE(Bus_AxisStart+i)=65 '设置控制模式 65-位置 66-速度 67-转矩
DRIVE_PROFILE(Bus_AxisStart+i)= 30 '设置PROFILE功能
disable_group(Bus_AxisStart+i) '每轴单独分组
SDO_WRITE(0,Bus_AxisStart+i,$6091,1,7,2^23)
SDO_WRITE(0,Bus_AxisStart+i,$6091,2,7,10000)
' DRIVE_IO(Bus_AxisStart+i) = 128 + (Bus_AxisStart+i)*16 '映射驱动器上的IO状态
' REV_IN(Bus_AxisStart+i) = 128 + (Bus_AxisStart+i)*16
' FWD_IN(Bus_AxisStart+i) = 129 + (Bus_AxisStart+i)*16
' DATUM_IN(Bus_AxisStart+i) = 130 + (Bus_AxisStart+i)*16
' INVERT_IN(128 + (Bus_AxisStart+i)*16,ON)
' INVERT_IN(129 + (Bus_AxisStart+i)*16,ON)
' INVERT_IN(130 + (Bus_AxisStart+i)*16,ON)
Bus_TotalAxisnum=Bus_TotalAxisnum+1 '总轴数+1
next
endif
next
?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum
wa 2000
SLOT_START(Bus_Slot) '启动总线
if return then
?"总线开启成功"
?"开始清除驱动器错误(根据驱动器数据字典设置)"
for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1
DRIVE_CONTROLWORD(i)=128 '根据驱动器数据字典
wa 100
DRIVE_CONTROLWORD(i)=6
wa 100
DRIVE_CONTROLWORD(i)=15
wa 100
next
?"驱动器错误清除完成"
wa 100
?"清除控制器错误"
datum(0)
DRIVE_CLEAR(0)
?"控制器错误清除完成"
wa 100
?"轴使能准备"
for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1
base(i)
AXIS_ENABLE=1
next
wdog=1 '使能总开关
Bus_InitStatus = 1
?"轴使能完成"
else
?"总线开启失败"
Bus_InitStatus = 0
endif
else
?"总线扫描失败"
Bus_InitStatus = 0
endif
end sub
注意:当时遇到的问题是脉冲当量设的太大了,导致发的脉冲太大时,电机无法运动,将脉冲当量限制在1000以内。