今天正运动小助手给大家分享一下步进控制的光栅尺全闭环EtherCAT运动控制器ZMC432CL-V2的二维螺距补偿的功能的验证。01产品简介ZMC432CL-V2高性能多轴运动控制器是一款兼容EtherCAT总线和脉冲型的独立式运动控制器具备高速实时反馈功能支持脉冲全闭环控制能够实现高精度、高响应速度的运动控制。高精度定位有效消除机械传动误差满足高精密加工场景应用要求。ZMC432CL-V2硬件功能丰富的运动控制功能支持直线、圆弧、空间圆弧、螺旋插补等。硬件接口丰富支持脉冲轴带编码器反馈和EtherCAT总线轴具备24路输入和12路输出的通用IO部分为高速IO2路模拟量输出(DA)。EtherCAT刷新周期最快达250us满足高速通信需求。支持4通道硬件比较输出、硬件定时器、运动中精准输出适用于多通道视觉飞拍等场合。支持掉电检测、掉电存储多种程序加密方式能够有效防止系统故障保护项目工程文件数据并提高系统的可靠性。通过纯国产IDE开发环境RTSys进行项目开发可实时仿真、在线跟踪以及诊断与调试简便易用支持多种高级上位机语言联合编程进行二次开发。02硬件接口03硬件接线1.数字量输入口IN接线图1 输入口通用接线图图2 输入口单端编码器接线图2.数字量输出口接线图3 输出口通用接线图图4 输出口单端脉冲轴接线图04控制器开发1.PC开发支持以下语言进行开发我们所有的开发语言和所有控制器提供的都是同一套API接口。2.脱机开发使用自主自研的IDE RTSys进行开发支持Basic、梯形图开发。05二维螺距补偿应用场景06二维螺距补偿指令说明正运动二维螺距补偿指令使用的注意点1.必须先设置ATYPE然后设置补偿修改ATYPE时必须先关闭补偿2.设置补偿时轴要位于IDLE的停止状态3.开始补偿点的坐标填写的是轴的MPOS坐标4.带编码器反馈的轴类型不同位置补多少个脉冲是根据编码器位置确定脉冲补偿的个数的所以一定要保证编码器的反馈是正确的5.机台断使能前需先关掉二维螺距补偿功能否则如果断使能的情况下机台有移动会造成dpos跟mpos的数据对不上。6.如下图假设开始补偿点是坐标系的原点补偿间距分别是【DisX,DisY】补偿的点是【4*4】的话螺距补偿表存储的点位数据就是以下【点1】到【点16】的位置下的补偿数据。07二维螺距算法通过Basic编程快速验证效果假设工况1X轴和Y轴的丝杆螺距正常但X轴和Y轴安装不垂直假设安装夹角是135度。步骤一规划开始补偿点补偿间距补偿的行数和列数。初始化二维螺距补偿的相关参数TableId 1000 补偿数据的Table起始点StartMposX 0 X轴开始补偿的位置StartMposY 0 Y轴开始补偿的位置DisX 0.5 X轴方向补偿的间距DisY 0.5 Y轴方向补偿的间距ColNumX 50 X轴方向补偿的点数RowlNumY 50 Y轴方向补偿的点数步骤二根据该工况的测试环境计算各个补偿点的X方向和Y方向的改补偿的脉冲数并更新到TABLE。开始2D螺距补偿 WAIT IDLE PITCH2SET(1,StartMposX ,StartMposY,,DisX,DisY,ColNumX,RowlNumY,TableId)步骤三调用二维螺距补偿指令启用二维螺距补偿功能。开始2D螺距补偿 WAIT IDLE PITCH2SET(1,StartMposX ,StartMposY,,DisX,DisY,ColNumX,RowlNumY,TableId)步骤四发送运动指令根据实际的编码器反馈来验证控制器实际上发的脉冲数是否正确。开始运动 MoveTest(1,1.1,RunMode) MoveTest(2,1.1,RunMode) MoveTest(2,2.1,RunMode)步骤五验证效果。PSx轴和Y轴的脉冲当量均设置的是100000根据以上数据启用二维螺距补偿功能后我们可以计算出运动到点【1,1,1】时X轴和Y轴理论上补偿的脉冲数分别是109999.9999个脉冲和45563.49186个脉冲根据实际编码器的反馈值发现X轴和Y轴实际补偿的脉冲数分别是109999个脉冲和45563个脉冲因为脉冲个数是整数所以二维螺距补偿功能正常。假设工况2XY轴的螺距均有异常需要补偿但X轴和Y轴安装是垂直的。初始化二维螺距补偿的相关参数 TableId 1000 补偿数据的Table起始点 StartMposX 0 X轴开始补偿的位置 StartMposY 0 Y轴开始补偿的位置 DisX 0.5 X轴方向补偿的间距 DisY 0.5 Y轴方向补偿的间距 ColNumX 50 X轴方向补偿的点数 RowlNumY 50 Y轴方向补偿的点数步骤一规划起始补偿点补偿间距补偿的行数和列数。初始化二维螺距补偿的相关参数 TableId 1000 补偿数据的Table起始点 StartMposX 0 X轴开始补偿的位置 StartMposY 0 Y轴开始补偿的位置 DisX 0.5 X轴方向补偿的间距 DisY 0.5 Y轴方向补偿的间距 ColNumX 50 X轴方向补偿的点数 RowlNumY 50 Y轴方向补偿的点数步骤二根据该工况的测试环境计算各个补偿点的X方向和Y方向的改补偿的脉冲数并更新到TABLE。假设X轴的激光干涉仪数据如下 运动到1mm处激光干涉仪实际是0.9mm处所以需要补偿的脉冲 0.1*units 运动到2mm处激光干涉仪实际是1.8mm处所以需要补偿的脉冲 0.2*units 运动到3mm处激光干涉仪实际是2.7mm处所以需要补偿的脉冲 0.3*units Y轴丝杆工况和X轴丝杆工况类似 更新该工况下二维补偿表的TABLE数据 FOR i0 to RowlNumY-1 先按行填写该行的每一列的数据 FOR j0 to ColNumX-1 【实际测试发现运动到1mm处补偿的脉冲数不是0.1*units,是因为算法发现发0.1*units实际跑到不是0.1mm,发0.1111*units才跑0.1mm】 Table(TableId2*(i*ColNumXj)) DisX*(j1)*0.1*UNITS(AxisX) Table(TableId2*(i*ColNumXj)1) DisY*(i1)*0.1*UNITS(AxisY) NEXT NEXT步骤三调用二维螺距补偿指令启用二维螺距补偿功能。开始运动 MoveTest(1,1,RunMode) MoveTest(2,1,RunMode) MoveTest(2,2,RunMode)步骤四发送运动指令根据实际的编码器反馈来验证控制器实际上发的脉冲数是否正确。开始运动 MoveTest(1,1,RunMode) MoveTest(2,1,RunMode) MoveTest(2,2,RunMode)步骤五验证效果。PSx轴和Y轴的脉冲当量均设置的是100000根据以上数据启用二维螺距补偿功能后我们可以计算出运动到点【1,1】时X轴和Y轴理论上补偿的脉冲数分别是11111.11108个脉冲和11111.11108个脉冲根据实际编码器的反馈值发现X轴和Y轴实际补偿的脉冲数分别是11110个脉冲和11110个脉冲这里理论补偿值和实际补偿值误差在1个脉冲我们认为二维螺距补偿功能是正常的。假设工况3X轴和Y轴的丝杆螺距均有异常需要补偿且X轴和Y轴的安装夹角是135度。假设X轴的激光干涉仪数据如下运动到1mm处激光干涉仪打出来实际是0.9mm处所以需要补偿的脉冲 0.1*units运动到2mm处激光干涉仪打出来实际是1.8mm处所以需要补偿的脉冲 0.2*units运动到3mm处激光干涉仪打出来实际是2.7mm处所以需要补偿的脉冲 0.3*unitsY轴丝杆工况和X轴丝杆工况类似步骤一规划起始补偿点补偿间距补偿的行数和列数。初始化二维螺距补偿的相关参数 TableId 1000 补偿数据的Table起始点 StartMposX 0 X轴开始补偿的位置 StartMposY 0 Y轴开始补偿的位置 DisX 0.5 X轴方向补偿的间距 DisY 0.5 Y轴方向补偿的间距 ColNumX 50 X轴方向补偿的点数 RowlNumY 50 Y轴方向补偿的点数步骤二根据该工况的测试环境计算各个补偿点的X方向和Y方向的改补偿的脉冲数并更新到TABLE。假设X轴的激光干涉仪数据如下 运动到1mm处激光干涉仪实际是0.9mm处所以需要补偿的脉冲 0.1*units 运动到2mm处激光干涉仪实际是1.8mm处所以需要补偿的脉冲 0.2*units运动到3mm处激光干涉仪实际是2.7mm处所以需要补偿的脉冲 0.3*units Y轴工况和X轴工况类似 更新该工况下二维补偿表的TABLE数据 FOR i0 to RowlNumY-1 先按行填写该行的每一列的数据 FOR j0 to ColNumX-1 【工况三XY轴螺距异常XY的夹角是135度】 X轴螺距有问题实际是10000个脉冲跑0.5mm Y轴螺距也有问题实际是10000个脉冲跑0.9mm IF i0 and j0 THEN Angle135XY轴的安装夹角 ENDIF LOCAL ActPosX,ActPosY 实际位置 X轴补偿数据 ActPosX 0.5*(j1) (i1)*0.9*(COS(Angle*PI/180)) Table(TableId2*(i*ColNumXj)) DisX*((1j)-ActPosX)*UNITS(AxisX) Y轴补偿数据 ActPosY 0.9*(SIN(Angle*PI/180)) Table(TableId2*(i*ColNumXj)1) DisY*(1i)*(1- ActPosY)*UNITS(AxisY) NEXT NEXT步骤三调用二维螺距补偿指令启用二维螺距补偿功能。开始2D螺距补偿 WAIT IDLE PITCH2SET(1,StartMposX ,StartMposY,DisX,DisY,ColNumX,RowlNumY,TableId)步骤四发送运动指令根据实际的编码器反馈来验证控制器实际上发的脉冲数是否正确。开始运动 MoveTest(1,1,RunMode) MoveTest(2,1,RunMode) MoveTest(2,2,RunMode)步骤五验证效果。PSx轴和Y轴的脉冲当量均设置的是100000根据以上数据启用二维螺距补偿功能后运动到点【1,1】时根据实际发的脉冲数推算出实际运动的位置是【0.99999,0.99999】和【1,1】的脉冲误差也是在一个脉冲以内所以二维螺距补偿功能正常。MoveTest函数的实现GLOBAL SUB MoveTest(Pos1,Pos2,RunMode) MOVEABS(Pos1,Pos2) DELAY(1500) ?运动前编码器数据,TempVarX,TempVarY ?运动后坐标【TOSTR(Pos1,4,1),TOSTR(Pos2,4,1)】当前XY轴的ENCODER:,ENCODER(AxisX),ENCODER(AxisY) ?X轴实际补偿值,ENCODER(AxisX)-TempVarX-DPOS(AxisX)*UNITS(AxisX) ?Y轴实际补偿值,ENCODER(AxisY)-TempVarY-DPOS(AxisY)*UNITS(AxisY) IF RunMode0 THEN 工况1 ?X轴理论补偿值,-POS2*(COS(Angle*pi/180)/SIN(Angle*pi/180))*UNITS(AxisX),和实际有差值可能是脉冲当量的问题 ?Y轴理论补偿值,POS2*(1/(SIN(Angle*pi/180)) -1)*UNITS(AxisY),和实际有差值可能是脉冲当量的问题 ELSEIF RunMode1 THEN 工况2 ?X轴理论补偿值,POS1*0.1/0.9*UNITS(AxisX),和实际有差值可能是脉冲当量的问题 ?Y轴理论补偿值,POS2*0.1/0.9*UNITS(AxisY),和实际有差值可能是脉冲当量的问题 ELSEIF RunMode2 THEN 工况3 ?X轴理论停止位,((ENCODER(AxisX)-TempVarX)*0.5 (ENCODER(AxisY)-TempVarY)*0.9*COS(Angle*pi/180))/UNITS(AxisX) ?Y轴理论停止位,((ENCODER(AxisY)-TempVarY)*0.9*SIN(Angle*pi/180))/UNITS(AxisX) ENDIF ENDSUB08二维螺距补偿功能现场实战客户有一个激光切割机的机台需要使用二维螺距补偿指令来解决机台在不同位置受力不同机台形变不同导致的精度丢失问题。步骤一以轴的MPOS坐标【0,0】作为二维补偿的开始补偿的位置。步骤二以轴的MPOS坐标【40,40】作为第一个圆的圆心然后以阵列的方式通过激光在板子是画出4行4列的16个圆阵列X轴方向间距为40mmY轴方向间距为40mm。步骤三通过视觉找出这16个圆的圆心并把坐标填入到TABLE寄存器待处理。startposx0 开始补偿点X坐标 startposy0 开始补偿点Y坐标 disonex40 X轴的补偿点间距 disoney40 Y轴的补偿点间距 maxpointx4 X轴方向补偿点列数 maxpointy4 Y轴方向补偿点行数 tableindex1000 存储补偿点数据的TABLE起始地址步骤四通过视觉找出这16个圆的圆心并把坐标填入到TABLE寄存器待处理。步骤五计算各个补偿点的X和Y方向的脉冲补偿值(理论位置-实际位置)*Units。DIM i,j 更新二维螺距补偿表 For i0 to maxpointy-1 For j0 to maxpointx-1 TABLE(tableindex2*(ji*maxpointx)) UNITS(0)*((4040*j) - TABLE(tableindex2*(ji*maxpointx))) TABLE(tableindex2*(ji*maxpointx)1) UNITS(1)*((4040*i) - TABLE(tableindex2*(ji*maxpointx)1)) NEXT NEXT步骤六调用二维螺距补偿指令启用二维螺距补偿功能。DIM i,j 更新二维螺距补偿表 For i0 to maxpointy-1 For j0 to maxpointx-1 TABLE(tableindex2*(ji*maxpointx)) UNITS(0)*((4040*j) - TABLE(tableindex2*(ji*maxpointx))) TABLE(tableindex2*(ji*maxpointx)1) UNITS(1)*((4040*i) - TABLE(tableindex2*(ji*maxpointx)1)) NEXT NEXT步骤七发送运动指令读取编码器的原始值验证二维螺距补偿是否正常。DIM i,j 更新二维螺距补偿表 For i0 to maxpointy-1 For j0 to maxpointx-1 TABLE(tableindex2*(ji*maxpointx)) UNITS(0)*((4040*j) - TABLE(tableindex2*(ji*maxpointx))) TABLE(tableindex2*(ji*maxpointx)1) UNITS(1)*((4040*i) - TABLE(tableindex2*(ji*maxpointx)1)) NEXT NEXT步骤八测试的实际效果。完整代码获取地址▼本次正运动技术步进控制的光栅尺全闭环EtherCAT运动控制器ZMC432CL-V2快速入门二维螺距补偿(上)就分享到这里。正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才在坚持自主创新的同时积极联合各大高校协同运动控制基础技术的研究是国内工控领域发展最快的企业之一也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。