0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

正运动技术 来源:正运动技术 作者:正运动技术 2026-03-03 16:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今天,正运动小助手以QT(C++)为例,为大家介绍如何通过上位机编程来启用ZMC432CL-V2的二维螺距补偿功能。

更多关于ZMC432CL-V2运动控制器的详情点击→步进控制的光栅尺全闭环解决方案:32轴EtherCAT总线运动控制器ZMC432CL-V2查看。

01 产品简介

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

wKgZO2mmnzuAUVERAABPJndvDmY51.webp

ZMC432CL-V2硬件功能:

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

硬件接口丰富:支持脉冲轴(带编码器反馈)和EtherCAT总线轴,具备24路输入和12路输出的通用IO,部分为高速IO,2路模拟量输出(DA)。

EtherCAT刷新周期最快达250us,满足高速通信需求。

支持4通道硬件比较输出、硬件定时器、运动中精准输出,适用于多通道视觉飞拍等场合。

支持掉电检测、掉电存储,多种程序加密方式,能够有效防止系统故障,保护项目工程文件数据,并提高系统的可靠性。

通过纯国产IDE开发环境RTSys进行项目开发,可实时仿真、在线跟踪以及诊断与调试,简便易用,支持多种高级上位机语言联合编程进行二次开发。

ZMC432CL-V2产品介绍视频请点击→步进控制的光栅尺全闭环解决方案:32轴EtherCAT总线运动控制器ZMC432CL-V2

02 硬件接口

wKgZO2mmnzuAWsWUAABTvJvyVXI76.webp

wKgZPGmmnzyAbj0OAACrXniYJpw23.webp

03 硬件接线

1.数字量输入口IN接线

wKgZO2mmnzyAERNSAAAnVJnOqzA74.webp

图1 输入口通用接线图

wKgZPGmmnzyAPFNJAAAjwBmNTXs80.webp

图2 输入口单端编码器接线图

2.数字量输出口接线

wKgZO2mmnzyACqIkAAA37LzAzgI88.webp

图3 输出口通用接线图

wKgZPGmmnzyAXDONAABGUqbpY8g75.webp

图4 输出口单端脉冲轴接线图

04 控制器开发

1.PC开发

支持以下语言进行开发,我们所有的开发语言和所有控制器提供的都是同一套API接口。

wKgZO2mmnz2AWzvEAAAkWktq8aY77.webp

2.脱机开发

使用自主自研的IDE RTSys进行开发,支持Basic、梯形图开发。

wKgZPGmmnz2AA4ZrAABShA5urL438.webp

05 二维螺距补偿应用场景

wKgZO2mmnz2AI837AACWbq6vob840.webp

06 二维螺距补偿指令说明

/*************************************************************
Description:  //二维螺距补偿, 4系列特殊固件支持,该算法比较占CPU
Input:     //handle    句柄连接
Input:     //iaxisList   轴号列表
Input:     //iAxisNum   XY模式2个轴,XYY/XYX模式是3个轴
Input:     //iEnable    0- 关闭补偿,1- XY补偿 ,2- XYX补偿,3- XYY补偿
Input:     //StartPosX   起始补偿MPOS位置X,
Input:     //StartPosY   起始补偿MPOS位置Y,
Input:     //DisOneX    每个补偿点间距X,
Input:     //DisOneY    每个补偿点间距Y,
Input:     //maxpointX   补偿区间X方向总点数
Input:     //maxpointy   补偿区间Y方向总点数
Input:     //Tableindex  螺距补偿表存储的table位置,从StartPos下一个点开始存储,脉冲数单位, 每个点存储两个数据,表示X方向偏差值与Y方向偏差值. 先存储第一行(X方向), 再存储第二行.总共占用 maxpointx*maxpointy*2 个TABLE位置.
Input:     //pfDisancelist 区间补偿值列表
Output:     //
Return:     //错误码
*************************************************************/
int32 ZAux_Direct_Pitch2set(ZMC_HANDLE handle,int * iaxisList,int iAxisNum,int iEnable,float StartPosX,float StartPosY,float DisOneX ,float DisOneY ,uint32 maxpointX,uint32 maxpointY,uint32 Tableindex,float * pfDisancelist);

正运动二维螺距补偿指令使用的注意点:

1.必须先设置ATYPE,然后设置补偿;修改ATYPE时,必须先关闭补偿!

2.设置补偿时,轴要位于IDLE的停止状态!

3.开始补偿点的坐标填写的是轴的MPOS坐标!

4.带编码器反馈的轴类型,不同位置补多少个脉冲,是根据编码器位置确定脉冲补偿的个数的,所以一定要保证编码器的反馈是正确的!

5.机台断使能前,需先关掉二维螺距补偿功能,否则如果断使能的情况下机台有移动,会造成dpos跟mpos的数据对不上。

6.如下图假设开始补偿点是坐标系的原点,补偿间距分别是【DisX,DisY】补偿的点是【4*4】的话,螺距补偿表存储的点位数据就是以下【点1】到【点16】的位置下的补偿数据。

wKgZPGmmnz2AZ24FAABmcoxQUJo03.webp

07 上位机编程验证效果

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

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

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

wKgZO2mmnz6ARf6kAABPYkLq7zk55.webp

步骤三:
设置二维螺距补偿的【辅助参数】,并运动到【开始补偿点】的位置点击【教导编码器】,把当前编码器位置更新到【开始补偿点】的编码器原始值里面。

wKgZPGmmnz6Ac6DUAAD2lGMsoUQ79.webp

步骤四:
通过视觉找出这16个圆的圆心的实际坐标,并把坐标填入到Ui界面的表格里面。

wKgZO2mmnz-AVeKBAAFfYA3MnUI25.webp

步骤五:
运动到各个补偿点验证效果,具体补偿效果如下:

wKgZPGmmn0CANJ-4AAHJRjcBiLg82.webpwKgZO2mmn0CAesi3AAG3gDukmiE17.webpwKgZPGmmn0GAUVBPAAG-DEMZzYw19.webp


步骤六:
上位机编程详情。

①如何启用二维螺距补偿功能。

int TimeOut = 3000;
int TempI[AxisNum]={0,0};
int AxisList[AxisNum] = {AxisIdX,AxisIdY};
float PcTable[16*2];
//是否启用二维螺距补偿功能
if((0 == m_Enable)&&(ui->Enable->text() == "是"))
{
  //等待轴停止,轴停下来了才可以打开二维螺距补偿功能
  while (TimeOut>0) {
    ZAux_Direct_GetIfIdle(handle,MyAxisInfo[0].AxisId,&TempI[0]);
    ZAux_Direct_GetIfIdle(handle,MyAxisInfo[1].AxisId,&TempI[1]);
    if((TempI[0] != 0 ) &&(TempI[1] != 0))
    {
      break;
    }
    QThread::msleep(10);
    TimeOut = TimeOut -10;
  }
  if(TimeOut ==0)
  {
    qDebug()< <"等待轴停止时间超时!轴还未停止!";
        return;
    }
    int i=0,j=0;
    // 开始更新表格点位数据到PcTable数组
    for (int row = 0; row < ui- >TableData->rowCount(); row++) {
    QTableWidgetItem *xItem = ui->TableData->item(row, 1); // X列(索引1)
    QTableWidgetItem *yItem = ui->TableData->item(row, 2); // Y列(索引2)
    if (xItem && yItem) {
      // 直接读取表格显示的文本值
      QString xText = xItem->text(); // 如 "40.003800"
      QString yText = yItem->text(); // 如 "40.008700"
      // 转换为浮点数
      bool xOk, yOk;
      float xValue = xText.toFloat(&xOk);
      float yValue = yText.toFloat(&yOk);
      if (xOk && yOk) {
        // 按原逻辑存储到PcTable数组
        PcTable[i] = xValue;
        i = i + 1;
        PcTable[i] = yValue;
        i = i + 1;
      } else {
        qDebug() < < "错误: Row" < < row < < "数据转换失败"
                         < < "X text:" < < xText < < "Y text:" < < yText;
            }
        }
    }
   //开始更新补偿表的数据到TABLE数组
   for(i=0;iMaxPointY- >text().toUInt();i++) //行
 {
   for(j=0;jMaxPointX->text().toUInt();j++) //列
   {
     PcTable[2*(i*4+j)] = ((1+j)*ui->DisX->text().toFloat()+ui->StartMposX->text().toFloat()-PcTable[2*(i*4+j)])* MyAxisInfo[0].Units;
     PcTable[2*(i*4+j)+1] = ((1+i)*ui->DisY->text().toFloat()+ui->StartMposY->text().toFloat()-PcTable[2*(i*4+j)+1])* MyAxisInfo[1].Units ;
   }
 }
 //启用二维螺距补偿功能
 /*************************************************************
 Description:  //二维螺距补偿, 4系列(VERSION_BUILD > 230511)特殊固件支持. 比较占CPU, 标准固件不支持.
 Input:     //handle 句柄连接
 Input:     //AxisList	 轴号列表
 Input:     //iEnable 0- 关闭补偿, 1- XY补偿,2- XYX补偿,3- XYY补偿
 Input:     //StartMposX 起始补偿MPOS位置X,
  Input:     //StartMposY 起始补偿MPOS位置Y,
 Input:     //DisX	每个补偿点间距X,
 Input:     //DisY	每个补偿点间距Y,
 Input:     //MaxPointX 补偿区间总点数
 Input:     //MaxPointY 补偿区间总点数
 Input:     //TableStartId  螺距补偿表存储的table位置,从startpos下一个点开始存储,脉冲数单位, 每个点存储两个数据,表示X方向偏差值与Y方向偏差值. 先存储第一行(X方向), 再存储第二行.总共占用 maxpointx*maxpointy*2 个TABLE位置.
 Input:     //PcTable 区间补偿值列表
 *************************************************************/
 ZAux_Direct_Pitch2set(handle,AxisList,2,1,ui->StartMposX->text().toFloat(),ui->StartMposY->text().toFloat(),
            ui->DisX->text().toFloat() ,ui->DisY->text().toFloat(),
            ui->MaxPointX->text().toUInt(),ui->MaxPointY->text().toUInt(),
            ui->TableStartId->text().toUInt(),PcTable);  m_Enable=true;}

②定时器如何实时计算实际补偿数据到UI界面。

float TempDpos[AxisNum]={0,0};
float TempActuaPul[AxisNum]={0,0};
//理论上发的脉冲数
ZAux_Direct_GetDpos(handle,MyAxisInfo[0].AxisId,&TempDpos[0]);
TempDpos[0] = (TempDpos[0] - ui->StartMposX->text().toFloat() )*(MyAxisInfo[0].Units);
ZAux_Direct_GetDpos(handle,MyAxisInfo[1].AxisId,&TempDpos[1]);
TempDpos[1] = (TempDpos[1] - ui->StartMposY->text().toFloat() )*(MyAxisInfo[1].Units);
//实际上发的脉冲数
ZAux_Direct_GetEncoder(handle,MyAxisInfo[0].AxisId,&TempActuaPul[0]);
TempActuaPul[0] = (TempActuaPul[0] - ui->StrarEncoderX->text().toFloat());
ZAux_Direct_GetEncoder(handle,MyAxisInfo[1].AxisId,&TempActuaPul[1]);
TempActuaPul[1] = (TempActuaPul[1] - ui->StrarEncoderY->text().toFloat());
//实际上发的脉冲数 -理论上发的脉冲数 = 实际补偿的脉冲数 (除以脉冲当量后表示实际补偿的距离)
ui->CompenDataX->setText(QString("%1").arg((TempActuaPul[0]-TempDpos[0])/(MyAxisInfo[0].Units)));
ui->CompenDataY->setText(QString("%1").arg((TempActuaPul[1]-TempDpos[1])/(MyAxisInfo[1].Units)));

完整代码获取地址

wKgZO2mmn0GAan4sAAAyBJ5hOZg52.webp

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

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

wKgZO2mmn0GAWqGeAADemj7stp836.webp

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

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 运动控制器
    +关注

    关注

    2

    文章

    493

    浏览量

    26142
  • ethercat
    +关注

    关注

    20

    文章

    1577

    浏览量

    46051
  • 光栅尺
    +关注

    关注

    1

    文章

    76

    浏览量

    13767
  • 步进控制
    +关注

    关注

    0

    文章

    16

    浏览量

    7608
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    定位系统为步进电机+光栅尺闭环系统,位置补偿算法一般都采用哪些呢?

    如题,定位系统为步进电机+光栅尺闭环系统,麻烦问下各位大佬位置补偿算法一般都采用哪些呢?PID吗?重复精度需要提高到10几微米左右,求助
    发表于 01-09 08:01

    光栅尺是什么_光栅尺的工作原理

    光栅尺,也称为光栅尺位移传感光栅尺传感,是通过利用光栅的光学原理工作的测量反馈装置。
    发表于 12-12 18:51 4.6w次阅读
    <b class='flag-5'>光栅尺</b>是什么_<b class='flag-5'>光栅尺</b>的工作原理

    全国产EtherCAT运动控制边缘控制器-ZMC432H

    全国产EtherCAT运动控制边缘控制器ZMC432H是正运动的一款软硬件全国产自主可控,
    的头像 发表于 07-29 09:15 1908次阅读
    全国产<b class='flag-5'>EtherCAT</b><b class='flag-5'>运动</b><b class='flag-5'>控制</b>边缘<b class='flag-5'>控制器</b>-<b class='flag-5'>ZMC432</b>H

    全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口

    运动技术EtherCAT运动控制边缘控制器ZMC432H接口介绍。
    的头像 发表于 08-03 09:18 2448次阅读
    全国产<b class='flag-5'>EtherCAT</b><b class='flag-5'>运动</b><b class='flag-5'>控制</b>边缘<b class='flag-5'>控制器</b>(一):<b class='flag-5'>ZMC432</b>H硬件接口

    EtherCAT运动控制边缘控制器ZMC432H的轴参数配置和单轴运动控制

    全国产EtherCAT运动控制边缘控制器ZMC432H是正运动的一款软硬件全国产自主可控,
    的头像 发表于 10-16 09:49 2392次阅读
    <b class='flag-5'>EtherCAT</b><b class='flag-5'>运动</b><b class='flag-5'>控制</b>边缘<b class='flag-5'>控制器</b><b class='flag-5'>ZMC432</b>H的轴参数配置和单轴<b class='flag-5'>运动</b><b class='flag-5'>控制</b>

    全国产EtherCAT运动控制边缘控制器ZMC432H如何使用Python+QT实现连续轨迹加工

    今天,正运动小助手给大家分享一全国产EtherCAT运动控制边缘控制器
    的头像 发表于 11-06 16:03 2141次阅读
    全国产<b class='flag-5'>EtherCAT</b><b class='flag-5'>运动</b><b class='flag-5'>控制</b>边缘<b class='flag-5'>控制器</b><b class='flag-5'>ZMC432</b>H如何使用Python+QT实现连续轨迹加工

    步进控制光栅尺闭环解决方案:32轴EtherCAT总线运动控制器ZMC432CL-V2

    高精度光栅尺的脉冲闭环,改善步进系统的亚微米加工性能!
    的头像 发表于 11-27 14:37 1723次阅读
    <b class='flag-5'>步进</b><b class='flag-5'>控制</b>的<b class='flag-5'>光栅尺</b><b class='flag-5'>全</b><b class='flag-5'>闭环</b>解决方案:32轴<b class='flag-5'>EtherCAT</b>总线<b class='flag-5'>运动</b><b class='flag-5'>控制器</b><b class='flag-5'>ZMC432CL-V2</b>

    步进光栅尺闭环EtherCAT运动控制器ZMC432CL-V2):RTSys编程调试

    通过RTSys调试ZMC432CL-V2的脉冲闭环功能
    的头像 发表于 02-20 11:01 1322次阅读
    <b class='flag-5'>步进</b>的<b class='flag-5'>光栅尺</b><b class='flag-5'>全</b><b class='flag-5'>闭环</b><b class='flag-5'>EtherCAT</b><b class='flag-5'>运动</b><b class='flag-5'>控制器</b><b class='flag-5'>ZMC432CL-V2</b>(<b class='flag-5'>二</b>):RTSys编程调试

    步进光栅尺闭环EtherCAT运动控制器ZMC432CL-V2(四):LabVIEW编程调试

    通过LabVIEW调试ZMC432CL-V2的脉冲闭环功能
    的头像 发表于 05-20 15:55 862次阅读
    <b class='flag-5'>步进</b>的<b class='flag-5'>光栅尺</b><b class='flag-5'>全</b><b class='flag-5'>闭环</b><b class='flag-5'>EtherCAT</b><b class='flag-5'>运动</b><b class='flag-5'>控制器</b><b class='flag-5'>ZMC432CL-V2</b>(四):LabVIEW编程调试

    步进驱动为什么要采⽤外置光栅尺

    步进驱动系统加上外置光栅尺,最根本的原因是为了实现闭环控制,从而大幅提升系统的最终定位精度和运行的可靠性。 你可以把传统的步进系统想象成
    的头像 发表于 03-10 07:42 380次阅读
    <b class='flag-5'>步进</b>驱动为什么要采⽤外置<b class='flag-5'>光栅尺</b>?