博派智能-运动控制技术-RTCP-五轴联动

1、原理

RTCP,在高档五轴数控系统里,认为RTCP即是Rotated Tool Center Point,也就是我们常说的刀尖点跟随功能。在五轴加工中,追求刀尖点轨迹及刀具与工件间的姿态时,由于回转运动,产生刀尖点的附加运动。数控系统控制点往往与刀尖点不重合,因此数控系统要自动修正控制点,以保证刀尖点按指令既定轨迹运动。业内也有将此技术称为TCPM、TCPC或者RPCP等功能。其实这些称呼的功能定义都与RTCP类似,严格意义上来说,RTCP功能是用在双摆头结构上,是应用摆头旋转中心点来进行补偿。而类似于RPCP功能主要是应用在双转台形式的机床上,补偿的是由于工件旋转所造成的的直线轴坐标的变化。其实这些功能殊途同归,都是为了保持刀具中心点和刀具与工件表面的实际接触点不变。所以为了表述方便,本文统一此类技术为RTCP技术。

如果运动控制卡没有该功能,旋转轴变化时,刀尖末端加工位置将跟随改变,整个上位机程序开发将变得异常困难。

本文已博派智能PMC系列以太网运动控制卡(具体型号位PMC_GAS_8)为例进行功能和代码说明。该控制卡支持RTCP功能,通过脉冲+方向接口控制机床电机运动,最高脉冲频率打2Mhz。该控制卡跟电脑上位机接口是以太网,普通网口即可,台式机,笔记本都可以。语言方面,支持VC++/C#/QT/Python/VC/Delphi/VB等等,支持Linux系统。

如果你的伺服/步进是EtherCAT总线接口,可以考虑PMC_ECAT_GA2_N, 这款是对应的总线型EtherCAT控制器,支持EtherCAT总线,并且支持RTCP功能。

2、5轴机床常见结构一览。

下图是双摆头

下图是双转台

下图是一转一摆

2、具体代码

这里以博派智能的ETH_GAS系列网口运动控制卡为例说明,该运动控制卡有2-16路步进/伺服控制接口,每路接口都有编码器/脉冲/方向/报警/使能等信号,支持自动回零/点位/直线/圆弧插补/PT运动等功能,支持高速硬件捕获、比较输出/飞拍、PSO。高端款PMC系列甚至支持RTCP五轴联动,Delta/Scara/6轴机器人算法。

RTCP五轴联动相关函数一览表

|--------------------|---------------|
| API | 说明 |
| MC_RobotSetPrm | 设置五轴机床参数 |
| MC_RobotSetForward | 设置五轴机床进入关节运动 |
| MC_RobotSetInverse | 设置五轴机床进入坐标系运动 |

参数详细说明:

|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| int MC_RobotSetPrm(unsigned short RobotID,unsigned long ulRobotType,short nJogAxisCount,short *pJogAxisList,short nVirAxisCount,short* pVirAxisList,void *RobotParm) ||
| RobotID | 机床ID,通常为1 |
| ulRobotType | 机床类型 50008为XYZ+AC双转台(双摇篮)结构(也适用于XYZ+单转台(单摇篮)) 50011为XYZ+AC双摆头结构(也适用于XYZ+单摆头) 50013为XYZ+A摆头C转台结构 |
| nJogAxisCount | 机床关节轴数量 |
| pJogAxisList | 机床关节轴轴号列表 |
| nVirAxisCount | 机床虚拟轴数量 |
| pVirAxisList | 机床虚拟轴轴号列表 |
| RobotParm | 机床参数,类型不同,参数结构体不同 //50008 //XYZAC双摇篮参数 typedef struct _XYZAC_PRRA{ double dCX; //C轴旋转中心X坐标,单位毫米 double dCY; //C轴旋转中心Y坐标,单位毫米 double dAY; //A轴旋转中心Y坐标,单位毫米 double dAZ; //A轴旋转中心Z坐标,单位毫米 long lPlusePerCircle5; //各轴每圈脉冲数量 double dPitch5; //各轴螺距,单位毫米 }XYZAC_PARM; //50011 //XYZTATC双摆头参数 typedef struct _XYZTATC_PRRA{ double dDX; //C在零度时,旋转关节中心相对Z轴的距离X,单位毫米 double dDY; //C在零度时,旋转关节中心相对Z轴的距离Y,单位毫米 double dR; //末端旋转半径,单位毫米 double dOrgAngleC; //回零完成后,C轴角度,单位度,范围0~360 long lPlusePerCircle5; //各轴每圈脉冲数量 double dPitch5; //各轴螺距,单位毫米 }XYZTATC_PARM; //50013 //XYZTAC一摆头一转台参数 typedef struct _XYZTAC_PRRA{ double dCX; //C轴旋转中心X坐标,单位mm double dCY; //C轴旋转中心Y坐标,单位mm double dR; //末端旋转半径,单位mm long lPlusePerCircle5; //各轴每圈脉冲数量 double dPitch5; //各轴螺距 }XYZTAC_PARM; |
| int MC_RobotSetForward(unsigned short nRobotID) ||
| nRobotID | 机床ID,通常为1,调用该函数后,可以进行关节运动 |
| int MC_RobotSetInverse(unsigned short nRobotID) ||
| nRobotID | 机床ID,通常为1,调用该函数后,可以进行坐标系XYZ运动 |

例程代码:

//关节轴轴号

short nJogAxisList5;

nJogAxisList0 = 1;

nJogAxisList1 = 2;

nJogAxisList2 = 3;

nJogAxisList3 = 4;

nJogAxisList4 = 5;

//坐标系轴号

short nVirAxisList5;

nVirAxisList0 = 11;

nVirAxisList1 = 12;

nVirAxisList2 = 13;

nVirAxisList3 = 14;

nVirAxisList4 = 15;

//声明五轴机床参数结构体变量,设置机床参数

XYZTATC_PARM m_XYZTATC_PARM;

m_XYZTATC_PARM.dDX = 0;

m_XYZTATC_PARM.dDY = 0;

m_XYZTATC_PARM.dOrgAngleC = 0;

m_XYZTATC_PARM.dPitch0 = 10;

m_XYZTATC_PARM.dPitch1 = 10;

m_XYZTATC_PARM.dPitch2 = 10;

m_XYZTATC_PARM.dPitch3 = 10;

m_XYZTATC_PARM.dPitch4 = 10;

//刀长

m_XYZTATC_PARM.dR = 100;

m_XYZTATC_PARM.lPlusePerCircle0 = 10000;

m_XYZTATC_PARM.lPlusePerCircle1 = 10000;

m_XYZTATC_PARM.lPlusePerCircle2 = 10000;

m_XYZTATC_PARM.lPlusePerCircle3 = 10000;

m_XYZTATC_PARM.lPlusePerCircle4 = 10000;

//下发机床参数

iRes = g_MultiCard.MC_RobotSetPrm(1,50011,5,&nJogAxisList0,5,&nVirAxisList0,&m_XYZTATC_PARM);

博派智能ETH_GAS系列8轴运动控制卡接线示意图(4轴和16轴篇幅限制没有放上来)

博派智能ETH_GAS系列4轴运动控制卡应用示意图(8轴和16轴篇幅限制没有放上来)

相关推荐
代码山河1 天前
入门实战:用OpenCV实现图像的亮度与对比度调整
opencv·目标检测·计算机视觉·教程
hetao17338371 天前
2026-10-22~23 hetao1733837 的刷题记录
c++·算法
java_nnnn1 天前
LeetCode刷题滑动窗口(串联所有单词的子串+最小覆盖的子串)Java
算法·leetcode·职场和发展
王老师青少年编程1 天前
2025年6月GESP真题及题解(C++三级): 选择题和判断题(题解)
c++·真题·gesp·答案·csp·三级·信奥赛
Navigator_Z1 天前
LeetCode //C - 1301. Number of Paths with Max Score
c语言·算法·leetcode
卡卡~~1 天前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法
方芯半导体1 天前
2026工业机器人控制芯片赛道:竞争格局与关键选型指标深度解析
大数据·人工智能·机器人
企业数字化笔记1 天前
AI视频增强后画质怎么验收?插值基线、伪细节与帧间闪烁的检查方法
人工智能·算法·音视频
学逆向的1 天前
C 内存属性
c语言·开发语言·算法·网络安全