一、回零控制原理:
1、回零信号
回零信号可采用限位传感器、home原点传感器、编码器或光栅尺Z(C)相信号。
- 限位传感器(Limit±输入):普通IO方式
- home传感器(Home输入):home捕获方式
- index信号(轴通道编码器Z相信号):index捕获方式()
限位信号采用普通IO触发方式,Home及Index信号使用FPGA捕获方式。
2、回零方式
通过限位、Home、Index三种信号组合共计7种回零方式:
- 限位回零
需要设置回零方向(触发正限位还是负限位)、反向脱离步长(轴第一次触发限位后反向离开距离),轴在触发正(负)限位后先反向移动反向脱离步长的距离再以低速回到限位。
- Home回零
需要设置回零方向(从轴的哪边寻找Home信号),轴在捕获到Home信号时会立即捕获当前编码器位置并停止,重新将捕获位置设为目标位置并低速移动到目标位置(因为速度较高寻找Home时,捕获到Home位置后可能电机并不能立即停下,所以会有这样一个过程,即再以低速返回捕获位置,若回零设置速度低,该过程不明显)。缺点:回零初始方向不太好设定,轴停止在Home信号左边和右边不好判断。
- Index回零:在电机单圈内寻找编码器Index信号,轴在捕获到Index信号时会立即捕获当前编码器位置并停止,重新将捕获位置设为目标位置并低速移动到目标位置(因为速度较高寻找Index时,捕获到Index位置后可能电机并不能立即停下,所以会有这样一个过程,即再以低速返回捕获位置,若回零设置速度低,该过程不明显)。
- 限位+Home回零: 轴先寻找限位再寻找Home信号。(最常见方式。)
- 限位+Index回零: 轴先寻找限位再寻找Index信号。(直线电机常见回零方式。)
- Home+Index回零:轴先寻找Home再寻找Index信号。
- 限位+Home+Index回零:轴先寻找限位再寻找Home再寻找Index信号。
二、回零程序
1、回零参数设置与启动
/*举例:线程内单轴回零*/
private void btn_homeStart_Click(object sender, EventArgs e)
{
Thread threadHome; //回零线程
short cardNo = 0; //卡号为0
short axis = 1; //回零轴
mc.THomePrm tHomePrm = new mc.THomePrm(); //回零参数
threadHome = new Thread(() =>
{
short sRtn = 0;
mc.THomeStatus pHomeStatus;//使用home回零或home+index回零,若轴停止在home点则需要先移开home点在开启回零。由实际情况确认。
sRtn = gts.mc.GT_ClrSts(cardNo, axis, axisNum);//回零前先清除状态
sRtn = gts.mc.GT_ZeroPos(cardNo, axis, 1);//清除规划和实际位置
sRtn = gts.mc.GT_GetHomePrm(cardNo, axis, out tHomePrm);//读取回零参数
tHomePrm.mode = 11; //限位加home回零方式 宏定义11
tHomePrm.searchHomeDistance = 0; //搜索Home距离,0表示最大距离搜索
tHomePrm.searchIndexDistance = 0; //搜索index距离,0表示最大距离搜索
tHomePrm.moveDir = 1; //回零方向 1为正 -1为负
tHomePrm.indexDir = 1; //搜索index方向 1为正 -1为负
tHomePrm.velHigh = 20; //寻找限位速度
tHomePrm.velLow = 5; //寻找home、index速度
tHomePrm.smoothTime = 10; //平滑时间,运动加减速平滑
tHomePrm.acc = 1; //加速度
tHomePrm.dec = 1; //减速度
tHomePrm.escapeStep = 10000; //限位回零后方式时第一次找到限位反向移动距离
tHomePrm.homeOffset = 0; //原点偏移 = 0
sRtn = gts.mc.GT_GoHome(cardNo, axis, ref tHomePrm);//启动SmartHome回原点
do
{
sRtn = mc.GT_GetHomeStatus(cardNo, axis, out pHomeStatus);//获取回原点状态
}
while (pHomeStatus.run == 1 & pHomeStatus.stage == 100); // 等待搜索原点停止run和stage来判断是否回零完成。
Thread.Sleep(1000); //等待电机完全停止,时间由电机调试效果确定也可采用到位判断
sRtn = gts.mc.GT_ZeroPos(cardNo, axis, 1); //回零完成手动清零设为原点
}) { IsBackground = true };
threadHome.Start();
}
2、回零状态检测判
private void timer1_Tick(object sender, EventArgs e)
{
mc.THomeStatus tHomeStatus = new mc.THomeStatus();
sRtn = mc.GT_GetHomeStatus(cardNo, axis, out tHomeStatus);
homeRunning = tHomeStatus.run;//回零状态:0已停止运动 1正在运动
homeStage = tHomeStatus.stage;//0-100 对应宏定义,请查阅固高手册可以查询回零过程,stage = 100表示回零成功。
homeError = tHomeStatus.error;//回零错误代码请查阅固高手册可以查询回零错误,0表示回零过程无错误
}
三、注意事项
1、回零前确认事项
- 先通过点位或JOG运动确认规划位置与实际位置是否一致且方向相同,若是使用步进电机请将.cfg配置文件中的脉冲计数源选择为计数器。
- 确认编码器或光栅尺带Z相信号才可以使用Index回零方式。
2、回零注意
- 限位加Index回零方式时回零方向与搜索Index方向应相反。(触发限位后不可再往该限位方向运动)。
- 回零前先调用 GT_ZeroPos 把规划位置和实际位置清零,防止规划位置和实际位置不一致造成回零不准确。
- 回零前,先确定规划位置和实际位置是否同向,即 GT_GetPrfPos 和
GT_GetEncPos(如果使用了当量变化,请参照相应指令)获取的位置值同正或同负。
- 回零前需要用户判断电机当前位置是否处于原点触发位置或限位触发位置,如果处于原点触发位置,应该先把电机移开远离原点一段距离后再启动回零。
- 回零时,要查看回零状态,如果发现电机不动了,并已经运动到设定的位置,但是回零状态没有显示回零完成,需要检查一下零点搜索范围是否合理,原点开关是否异常。
- 使用 SmartHome 回零完成后不会自动清零位置,需要用户调用 GT_ZeroPos 把当前位置清零来确定零点。
一、回零控制原理:
1、回零信号
回零信号可采用限位传感器、home原点传感器、编码器或光栅尺Z(C)相信号。
- 限位传感器(Limit±输入):普通IO方式
- home传感器(Home输入):home捕获方式
- index信号(轴通道编码器Z相信号):index捕获方式()
限位信号采用普通IO触发方式,Home及Index信号使用FPGA捕获方式。
2、回零方式
通过限位、Home、Index三种信号组合共计7种回零方式:
- 限位回零
需要设置回零方向(触发正限位还是负限位)、反向脱离步长(轴第一次触发限位后反向离开距离),轴在触发正(负)限位后先反向移动反向脱离步长的距离再以低速回到限位。
- Home回零
需要设置回零方向(从轴的哪边寻找Home信号),轴在捕获到Home信号时会立即捕获当前编码器位置并停止,重新将捕获位置设为目标位置并低速移动到目标位置(因为速度较高寻找Home时,捕获到Home位置后可能电机并不能立即停下,所以会有这样一个过程,即再以低速返回捕获位置,若回零设置速度低,该过程不明显)。缺点:回零初始方向不太好设定,轴停止在Home信号左边和右边不好判断。
- Index回零:在电机单圈内寻找编码器Index信号,轴在捕获到Index信号时会立即捕获当前编码器位置并停止,重新将捕获位置设为目标位置并低速移动到目标位置(因为速度较高寻找Index时,捕获到Index位置后可能电机并不能立即停下,所以会有这样一个过程,即再以低速返回捕获位置,若回零设置速度低,该过程不明显)。
- 限位+Home回零: 轴先寻找限位再寻找Home信号。(最常见方式。)
- 限位+Index回零: 轴先寻找限位再寻找Index信号。(直线电机常见回零方式。)
- Home+Index回零:轴先寻找Home再寻找Index信号。
- 限位+Home+Index回零:轴先寻找限位再寻找Home再寻找Index信号。
二、回零程序
1、回零参数设置与启动
/*举例:线程内单轴回零*/
private void btn_homeStart_Click(object sender, EventArgs e)
{
Thread threadHome; //回零线程
short cardNo = 0; //卡号为0
short axis = 1; //回零轴
mc.THomePrm tHomePrm = new mc.THomePrm(); //回零参数
threadHome = new Thread(() =>
{
short sRtn = 0;
mc.THomeStatus pHomeStatus;//使用home回零或home+index回零,若轴停止在home点则需要先移开home点在开启回零。由实际情况确认。
sRtn = gts.mc.GT_ClrSts(cardNo, axis, axisNum);//回零前先清除状态
sRtn = gts.mc.GT_ZeroPos(cardNo, axis, 1);//清除规划和实际位置
sRtn = gts.mc.GT_GetHomePrm(cardNo, axis, out tHomePrm);//读取回零参数
tHomePrm.mode = 11; //限位加home回零方式 宏定义11
tHomePrm.searchHomeDistance = 0; //搜索Home距离,0表示最大距离搜索
tHomePrm.searchIndexDistance = 0; //搜索index距离,0表示最大距离搜索
tHomePrm.moveDir = 1; //回零方向 1为正 -1为负
tHomePrm.indexDir = 1; //搜索index方向 1为正 -1为负
tHomePrm.velHigh = 20; //寻找限位速度
tHomePrm.velLow = 5; //寻找home、index速度
tHomePrm.smoothTime = 10; //平滑时间,运动加减速平滑
tHomePrm.acc = 1; //加速度
tHomePrm.dec = 1; //减速度
tHomePrm.escapeStep = 10000; //限位回零后方式时第一次找到限位反向移动距离
tHomePrm.homeOffset = 0; //原点偏移 = 0
sRtn = gts.mc.GT_GoHome(cardNo, axis, ref tHomePrm);//启动SmartHome回原点
do
{
sRtn = mc.GT_GetHomeStatus(cardNo, axis, out pHomeStatus);//获取回原点状态
}
while (pHomeStatus.run == 1 & pHomeStatus.stage == 100); // 等待搜索原点停止run和stage来判断是否回零完成。
Thread.Sleep(1000); //等待电机完全停止,时间由电机调试效果确定也可采用到位判断
sRtn = gts.mc.GT_ZeroPos(cardNo, axis, 1); //回零完成手动清零设为原点
}) { IsBackground = true };
threadHome.Start();
}
2、回零状态检测判
private void timer1_Tick(object sender, EventArgs e)
{
mc.THomeStatus tHomeStatus = new mc.THomeStatus();
sRtn = mc.GT_GetHomeStatus(cardNo, axis, out tHomeStatus);
homeRunning = tHomeStatus.run;//回零状态:0已停止运动 1正在运动
homeStage = tHomeStatus.stage;//0-100 对应宏定义,请查阅固高手册可以查询回零过程,stage = 100表示回零成功。
homeError = tHomeStatus.error;//回零错误代码请查阅固高手册可以查询回零错误,0表示回零过程无错误
}
三、注意事项
1、回零前确认事项
- 先通过点位或JOG运动确认规划位置与实际位置是否一致且方向相同,若是使用步进电机请将.cfg配置文件中的脉冲计数源选择为计数器。
- 确认编码器或光栅尺带Z相信号才可以使用Index回零方式。
2、回零注意
- 限位加Index回零方式时回零方向与搜索Index方向应相反。(触发限位后不可再往该限位方向运动)。
- 回零前先调用 GT_ZeroPos 把规划位置和实际位置清零,防止规划位置和实际位置不一致造成回零不准确。
- 回零前,先确定规划位置和实际位置是否同向,即 GT_GetPrfPos 和
GT_GetEncPos(如果使用了当量变化,请参照相应指令)获取的位置值同正或同负。
- 回零前需要用户判断电机当前位置是否处于原点触发位置或限位触发位置,如果处于原点触发位置,应该先把电机移开远离原点一段距离后再启动回零。
- 回零时,要查看回零状态,如果发现电机不动了,并已经运动到设定的位置,但是回零状态没有显示回零完成,需要检查一下零点搜索范围是否合理,原点开关是否异常。
- 使用 SmartHome 回零完成后不会自动清零位置,需要用户调用 GT_ZeroPos 把当前位置清零来确定零点。
举报