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

相关推荐
韩师傅5 天前
海天线算法的前世今生
python·计算机视觉
韩师傅5 天前
当你的甲方设备过烂,要如何快速出效果?
python·计算机视觉
韩师傅5 天前
当你的甲方吐槽天空不够蓝,你应该如何应对
python·计算机视觉
兵慌码乱12 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
小小杨树14 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
zzzzzz31016 天前
假如我是掘金管理员,我先给评论区装个'代码审查'系统
python·程序员·机器人
通信小呆呆16 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick16 天前
自动对焦学习-3
人工智能·学习·计算机视觉