博派智能-运动控制技术-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轴篇幅限制没有放上来)

相关推荐
浪客灿心15 分钟前
项目篇:模块设计与实现
数据库·c++
2601_9618752416 分钟前
高考真题word版下载|2025高考全科真题可编辑文档
c#·word·ar·vr·mr·高考·oneflow
牛油果子哥q28 分钟前
【C++ STL vector】C++ STL vector 终极精讲:动态数组底层原理、两倍扩容机制、迭代器失效、增删查改、性能剖析与工程避坑指南
开发语言·c++
硅谷秋水33 分钟前
HumanEgo:基于人类第一人称视角数分钟视频的零样本机器人学习
人工智能·机器学习·计算机视觉·机器人
gis分享者1 小时前
OpenCV 新手入门与实战部署指南
人工智能·opencv·计算机视觉
happymaker06261 小时前
LeetCodeHot100——42.接雨水
算法
阿正的梦工坊1 小时前
【Rust】09-泛型、Trait 与生命周期基础
开发语言·rust·c#
OpenBayes贝式计算2 小时前
教程上新丨16GB 笔记本跑出接近 26B MoE 性能,Gemma 4 12B 基于创新架构统一处理文本 / 图像 / 声音三种模态
计算机视觉·google·agent
阿正的梦工坊2 小时前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
z落落2 小时前
C# 事件(Event)+自定义带参数事件例子
开发语言·分布式·c#