news 2026/2/12 15:01:15

步进控制的光栅尺全闭环EtherCAT运动控制器ZMC432CL-V2快速入门:二维螺距补偿(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
步进控制的光栅尺全闭环EtherCAT运动控制器ZMC432CL-V2快速入门:二维螺距补偿(上)

今天,正运动小助手给大家分享一下步进控制的光栅尺全闭环EtherCAT运动控制器ZMC432CL-V2的二维螺距补偿的功能的验证。

01

产品简介

ZMC432CL-V2高性能多轴运动控制器是一款兼容EtherCAT总线和脉冲型的独立式运动控制器,具备高速实时反馈功能,支持脉冲全闭环控制,能够实现高精度、高响应速度的运动控制。高精度定位,有效消除机械传动误差,满足高精密加工场景应用要求。


ZMC432CL-V2硬件功能:

  • 丰富的运动控制功能:支持直线、圆弧、空间圆弧、螺旋插补等。

  • 硬件接口丰富:支持脉冲轴(带编码器反馈)和EtherCAT总线轴,具备24路输入和12路输出的通用IO,部分为高速IO,2路模拟量输出(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编程快速验证效果

假设工况1:X轴和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)


步骤五:
验证效果。(PS:x轴和Y轴的脉冲当量均设置的是100000)

根据以上数据启用二维螺距补偿功能后,我们可以计算出运动到点【1,1,1】时,X轴和Y轴理论上补偿的脉冲数分别是109999.9999个脉冲和45563.49186个脉冲,根据实际编码器的反馈值发现X轴和Y轴实际补偿的脉冲数分别是109999个脉冲和45563个脉冲,因为脉冲个数是整数,所以二维螺距补偿功能正常。

假设工况2:XY轴的螺距均有异常需要补偿,但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 i=0 to RowlNumY-1 '先按行填写该行的每一列的数据 FOR j=0 to ColNumX-1 '【实际测试发现运动到1mm处补偿的脉冲数不是0.1*units,是因为算法发现发0.1*units实际跑到不是0.1mm,发0.1111*units才跑0.1mm】 Table(TableId+2*(i*ColNumX+j)) = DisX*(j+1)*0.1*UNITS(AxisX) Table(TableId+2*(i*ColNumX+j)+1) = DisY*(i+1)*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)


步骤五:
验证效果。
(PS:x轴和Y轴的脉冲当量均设置的是100000)
根据以上数据启用二维螺距补偿功能后,我们可以计算出运动到点【1,1】时,X轴和Y轴理论上补偿的脉冲数分别是11111.11108个脉冲和11111.11108个脉冲,根据实际编码器的反馈值发现X轴和Y轴实际补偿的脉冲数分别是11110个脉冲和11110个脉冲,这里理论补偿值和实际补偿值误差在1个脉冲我们认为二维螺距补偿功能是正常的。

假设工况3:X轴和Y轴的丝杆螺距均有异常需要补偿,且X轴和Y轴的安装夹角是135度。

假设X轴的激光干涉仪数据如下:

'运动到1mm处,激光干涉仪打出来实际是0.9mm处,所以需要补偿的脉冲 = 0.1*units

'运动到2mm处,激光干涉仪打出来实际是1.8mm处,所以需要补偿的脉冲 = 0.2*units

'运动到3mm处,激光干涉仪打出来实际是2.7mm处,所以需要补偿的脉冲 = 0.3*units

'Y轴丝杆工况和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 i=0 to RowlNumY-1 '先按行填写该行的每一列的数据 FOR j=0 to ColNumX-1 '【工况三:XY轴螺距异常,XY的夹角是135度】 'X轴螺距有问题,实际是10000个脉冲跑0.5mm 'Y轴螺距也有问题,实际是10000个脉冲跑0.9mm IF i=0 and j=0 THEN Angle=135'XY轴的安装夹角 ENDIF LOCAL ActPosX,ActPosY '实际位置 'X轴补偿数据 ActPosX = 0.5*(j+1)+ (i+1)*0.9*(COS(Angle*PI/180)) Table(TableId+2*(i*ColNumX+j)) = DisX*((1+j)-ActPosX)*UNITS(AxisX) 'Y轴补偿数据 ActPosY = 0.9*(SIN(Angle*PI/180)) Table(TableId+2*(i*ColNumX+j)+1) = DisY*(1+i)*(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)


步骤五:
验证效果。
(PS:x轴和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 RunMode=0 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 RunMode=1 THEN '工况2 ?"X轴理论补偿值",POS1*0.1/0.9*UNITS(AxisX),'"和实际有差值,可能是脉冲当量的问题" ?"Y轴理论补偿值",POS2*0.1/0.9*UNITS(AxisY),'"和实际有差值,可能是脉冲当量的问题" ELSEIF RunMode=2 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 ENDSUB

08

二维螺距补偿功能现场实战

客户有一个激光切割机的机台需要使用二维螺距补偿指令来解决机台在不同位置受力不同机台形变不同导致的精度丢失问题。

步骤一:
以轴的MPOS坐标【0,0】作为二维补偿的开始补偿的位置。

步骤二:
以轴的MPOS坐标【40,40】作为第一个圆的圆心,然后以阵列的方式通过激光在板子是画出4行4列的16个圆,阵列X轴方向间距为40mm,Y轴方向间距为40mm。

步骤三:
通过视觉找出这16个圆的圆心,并把坐标填入到TABLE寄存器待处理。

startposx=0 '开始补偿点X坐标 startposy=0 '开始补偿点Y坐标 disonex=40 'X轴的补偿点间距 disoney=40 'Y轴的补偿点间距 maxpointx=4 'X轴方向补偿点列数 maxpointy=4 'Y轴方向补偿点行数 tableindex=1000 '存储补偿点数据的TABLE起始地址

步骤四:
通过视觉找出这16个圆的圆心,并把坐标填入到TABLE寄存器待处理。

步骤五:
计算各个补偿点的X和Y方向的脉冲补偿值=(理论位置-实际位置)*Units。

DIM i,j ' 更新二维螺距补偿表 For i=0 to maxpointy-1 For j=0 to maxpointx-1 TABLE(tableindex+2*(j+i*maxpointx)) = UNITS(0)*((40+40*j) - TABLE(tableindex+2*(j+i*maxpointx))) TABLE(tableindex+2*(j+i*maxpointx)+1) = UNITS(1)*((40+40*i) - TABLE(tableindex+2*(j+i*maxpointx)+1)) NEXT NEXT

步骤六:
调用二维螺距补偿指令启用二维螺距补偿功能。

DIM i,j ' 更新二维螺距补偿表 For i=0 to maxpointy-1 For j=0 to maxpointx-1 TABLE(tableindex+2*(j+i*maxpointx)) = UNITS(0)*((40+40*j) - TABLE(tableindex+2*(j+i*maxpointx))) TABLE(tableindex+2*(j+i*maxpointx)+1) = UNITS(1)*((40+40*i) - TABLE(tableindex+2*(j+i*maxpointx)+1)) NEXT NEXT

步骤七:
发送运动指令,读取编码器的原始值验证二维螺距补偿是否正常。

DIM i,j ' 更新二维螺距补偿表 For i=0 to maxpointy-1 For j=0 to maxpointx-1 TABLE(tableindex+2*(j+i*maxpointx)) = UNITS(0)*((40+40*j) - TABLE(tableindex+2*(j+i*maxpointx))) TABLE(tableindex+2*(j+i*maxpointx)+1) = UNITS(1)*((40+40*i) - TABLE(tableindex+2*(j+i*maxpointx)+1)) NEXT NEXT


步骤八:
测试的实际效果。

完整代码获取地址

本次,正运动技术步进控制的光栅尺全闭环EtherCAT运动控制器ZMC432CL-V2快速入门:二维螺距补偿(上),就分享到这里。

正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 6:13:53

mapbox进阶,使用geoserver矢量切片图层组服务(pbf)加载图层

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言 1.1 ☘️mapboxgl.Map 地图对象 1.2 ☘️mapboxgl.Map style属性 1.3 ☘️line线图层样式 1.4 ☘️Fill面图层…

作者头像 李华
网站建设 2026/2/9 2:27:59

实测拆解:Qwen3-Max-Thinking 到底能不能对标 GPT-5.2?

最近刷到通义千问刚发布的旗舰推理模型 Qwen3-Max-Thinking,看完它的测试报告我直接坐不住了 —— 这性能已经能对标 GPT-5.2、Claude Opus 4.5 这些顶流模型了?今天就带大家拆解这份测试报告,用大白话讲清楚它到底有多能打。 一、先搞懂&…

作者头像 李华
网站建设 2026/2/8 9:11:59

为什么企业应制定全面的服务器DDoS防护策略?

服务器DDoS防护策略的重要性DDoS攻击通过大量虚假流量淹没目标服务器,导致服务中断或资源耗尽。企业制定全面的防护策略可避免业务损失、数据泄露及声誉受损。业务连续性的保障DDoS攻击可能导致关键服务瘫痪,直接影响客户体验和收入。防护策略通过实时流…

作者头像 李华
网站建设 2026/2/7 16:24:47

Debian 9 (Stretch)仓库无法使用

背景:用镜像拉起的mysql5.6.44的容器,os是Debian GNU/Linux 9 (stretch) 这个错误表明系统仍在使用 Debian 9 (Stretch),但该版本已于 2022年6月30日 结束生命周期(EOL),官方仓库已下线。 解决方案 # 进入…

作者头像 李华
网站建设 2026/2/6 23:51:21

得物商品详情API接口在数据分析中的应用

得物商品详情 API 接口在数据分析领域的应用,核心是获取标准化的商品核心数据,并围绕电商业务场景(选品、竞品分析、价格监控、用户洞察等)构建数据驱动的决策体系。结合得物平台以潮流服饰、球鞋、美妆、奢品为主的品类特性&…

作者头像 李华
网站建设 2026/2/8 14:23:00

AI写论文哪个软件最好?实测5款工具后,虎贲等考AI凭硬实力封神

毕业季来临,“AI写论文哪个软件最好”成了无数学子的灵魂拷问。面对市面上五花八门的AI写作工具,有人踩坑“生成内容逻辑断层”,有人栽在“查重率飙至40%”,还有人被“虚构文献无法追溯”逼到返工。为了帮大家精准避坑&#xff0c…

作者头像 李华