博派智能-运动控制技术-PSO(位置同步输出)

1、原理

PSO也叫位置同步输出。可以在轴运动中,精确控制指定间距输出指定宽度的脉冲,普通的PWM是以时间为周期,输出指定宽度的脉冲,二者有本质不同,左图为普通PWM功能的脉冲示意图,右图为PSO功能模式下,脉冲示意图。可见PSO功能的输出脉冲,在轨迹分布上更加均匀。

如果运动控制卡没有该功能,难以实现轨迹加工中的等间距脉冲输出,特定场合功能受限。

该功能常用于喷射点胶,激光焊机等应用场合。

2、具体代码

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

PSO相关函数一览表

|-------------|-----------------------|
| API | 说明 |
| MC_CmpPluse | 设置PSO输出IO立即输出指定电平或者脉冲 |
| MC_BufPSO | 缓冲区指令,开启PSO |

参数详细说明:

|-------------|---|---|---|
| int MC_CmpPluse(short nChannelMask, short nPluseType1, short nPluseType2, short nTime1,short nTime2, short nTimeFlag1, short nTimeFlag2) ||||
| nChannel || bit0表示通道1,bit1表示通道2 ||
| nPluseType1 || 通道1输出类型,0低电平1高电平2脉冲 ||
| nPluseType2 || 通道2输出类型,0低电平1高电平2脉冲 ||
| nTime1 || 通道1脉冲持续时间 ||
| nTime2 || 通道2脉冲持续时间 ||
| nTimeFlag1 || 比较器1的脉冲时间单位,0:us,1:ms ||
| nTimeFlag2 || 比较器2的脉冲时间单位,0:us,1:ms ||
| 示例代码: int iRes = 0; //下面代码控制PSO端口输出高电平(手动测试用)。 //第1个参数为1代表通道1 //第2个参数为1,代表立即输出高电平 //第3个参数预留,固定为1,无意义 //第4个参数代表脉冲时间,这里因为是输出高电平,并非脉冲,所以无意义 //第5个参数为预留,跟第4个参数相同即可 //第6个参数为时间单位,0代表微秒,1代表毫秒(这里因为是输出高电平,所以参数6无意义) //第7个参数为预留,与第6个参数相同即可 iRes = MC_CmpPluse(1,1,1,100,100,0,0); //下面代码控制PSO端口输出低电平(手动测试用)。 //第1个参数为1代表通道1 //第2个参数为0,代表立即输出低电平 //第3个参数预留,固定为1,无意义 //第4个参数代表脉冲时间,这里因为是输出高电平,并非脉冲,所以无意义 //第5个参数为预留,跟第4个参数相同即可 //第6个参数为时间单位,0代表微秒,1代表毫秒(这里因为是输出高电平,所以参数6无意义) //第7个参数为预留,与第6个参数相同即可 iRes = MC_CmpPluse(1,0,1,100,100,0,0); //下面代码控制PSO端口输出一个200ms的脉冲(手动测试用)。 //第1个参数为1代表通道1 //第2个参数为0,代表立即输出低电平 //第3个参数预留,固定为1,无意义 //第4个参数代表脉冲时间,这里因为是输出高电平,并非脉冲,所以无意义 //第5个参数为预留,跟第4个参数相同即可 //第6个参数为时间单位,0代表微秒,1代表毫秒 //第7个参数为预留,与第6个参数相同即可 iRes = MC_CmpPluse(1,2,1,200,200,1,1); ||||
| Int MC_BufPSO(short nCrdNum,short nPSONum,short nEnableFlag,short nMode,unsigned long ulMask,double dPitch,unsigned long ulTime,short nFirstFlag,short nFifoIndex,long lUserSegNum) ||| |
| nCrdNum | 坐标系号,从1开始 || |
| nPSONum | PSO端口号,从1开始 || |
| nEnableFlag | 0关闭PSO,1开启PSO || |
| nMode | 固定0 || |
| ulMask | 坐标系中,参与PSO功能的轴掩码,有的旋转轴不参与PSO || |
| dPitch | PSO间距,单位脉冲 || |
| ulTime | PSO持续时间,单位us || |
| nFirstFlag | 起始点是否输出,1输出,0不输出 || |
| nFifoIndex | 固定0 || |
| lUserSegNum | 用户自定义段号 || |

例程代码:

g_MultiCard.MC_LnXYZ(1,0,0,0,20,1,0,0,0);

/*

函数名: MC_BufPSO(short nCrdNum,short nPSOMask,short nEnableFlag,short nMode,unsigned long ulMask,double dPitch,unsigned long ulTime,short nFirstFlag,short nFifoIndex,long lUserSegNum)

函数说明: 缓存区指令,开启PSO

参数说明: nCrdNum坐标系号,取值范围:[1,CRDSYS_MAX_COUNT]

nPSOMask:PSO掩码

nEnableFlag 0关闭,1开启

nMode: 无意义,固定0

ulMask: 坐标系中,参数PSO的轴,有的旋转轴,不参与

dPitch:PSO间距,单位脉冲

ulTime:PSO持续时间,单位us

nFirstFlag:起始点是否输出,1输出,0不输出

nFifoIndex:固定0

lUserSegNum:用户自定义段号

返回值: 0成功,其他失败

注意事项:

*/

g_MultiCard.MC_BufPSO(1,1,1,0,0X03,1000,20,1,0,0);

//直线插补

g_MultiCard.MC_LnXYZ(1,iLength,0,0,dVel,dAcc,0,0,0);

g_MultiCard.MC_LnXYZ(1,iLength,iLength,0,dVel,dAcc,0,0,0);

g_MultiCard.MC_LnXYZ(1,0,iLength,0,dVel,dAcc,0,0,0);

g_MultiCard.MC_LnXYZ(1,0,0,0,dVel,dAcc,0,0,0);

g_MultiCard.MC_CrdData(1,0,0);

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

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

相关推荐
EDPJ10 小时前
当图像与文本 “各说各话” —— CLIP 中的模态鸿沟与对象偏向
深度学习·计算机视觉
蒸汽求职11 小时前
机器人软件工程(Robotics SDE):特斯拉Optimus落地引发的嵌入式C++与感知算法人才抢夺战
大数据·c++·算法·职场和发展·机器人·求职招聘·ai-native
charlee4411 小时前
最小二乘问题详解17:SFM仿真数据生成
c++·计算机视觉·sfm·数字摄影测量·无人机航测
Fleshy数模12 小时前
OpenCV 实时人脸检测实战:从视频文件到人脸框标注
人工智能·opencv·计算机视觉
Omics Pro14 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉
KOYUELEC光与电子努力加油15 小时前
JAE日本航空端子推出支持自走式机器人的自主充电功能浮动式连接器“DW15系列“方案与应用
服务器·人工智能·机器人·无人机
feasibility.18 小时前
DreamZero技术解析:当世界模型成为机器人“物理大脑”
论文阅读·人工智能·机器人·零样本·具身智能·vla·世界模型
泰恒20 小时前
计算机视觉如何入门?
人工智能·深度学习·机器学习·计算机视觉
maxmaxma21 小时前
ROS2机器人少年创客营:Python第三课
开发语言·python·机器人·ros2