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

相关推荐
深度学习lover1 天前
<数据集>yolo 垃圾识别<目标检测>
人工智能·深度学习·yolo·目标检测·计算机视觉·垃圾识别
沫儿笙1 天前
焊接机器人二元混合气节气装置
机器人·自动化
我是无敌小恐龙1 天前
Java SE 零基础入门 Day05 类与对象核心详解(封装+构造方法+内存+变量)
java·开发语言·人工智能·python·机器学习·计算机视觉·数据挖掘
格林威1 天前
面阵相机 vs 线阵相机:堡盟与Basler选型差异全解析 +C# 实战演示
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
探物 AI1 天前
【感知·单目测距】单目摄像头测距原理与前向碰撞预警(FCWS)实现
算法·目标检测·计算机视觉
gloomyfish1 天前
【洞察微瑕】YOLO11+QWEN-VL实现墙体裂缝检测与文字报告生成
人工智能·opencv·算法·计算机视觉
weixin_413063211 天前
比较阅读理解opencv 和 LuminanceHDR中 色调映射Drago算法
opencv·算法·计算机视觉·hdr·色调映射
hoiii1871 天前
基于协方差矩阵的车辆检测(Matlab实现)
计算机视觉·matlab·矩阵
熵减纪元1 天前
人形机器人行业日报:机器人开始长“小脑”,首形科技把仿生感又往前推了一步
科技·机器人