4. MC_Home详解:回零模式、时序图与调试技巧

大家好,我是老张。今天咱们聊聊回零——也就是MC_Home这个指令。

说实话,回零这个功能,看着简单,坑却不少。我见过太多工程师,程序写得很漂亮,一上电回零就出问题。要么撞限位,要么回不准,要么干脆回不了。

为什么会这样?

说白了,很多人没搞明白回零的几种模式,也没理解时序图背后的逻辑。今天我就把这些东西掰开了讲清楚。

4.1 回零的本质

回零,就是让轴找到一个绝对参考点。这个点,是所有绝对定位的基准。

你想想看,伺服电机编码器是增量的,断电后位置就丢了。下次上电,控制器不知道轴在哪。所以必须通过回零,让轴找到那个“家”。

我个人习惯把回零分成两大类:

  • 绝对回零:轴会朝一个固定方向找原点信号
  • 相对回零:轴在当前基础上偏移一段距离作为零点

嗯,这里要注意,PLCopen标准里还有“限位回零”这种特殊模式,后面我会细说。

4.2 回零模式详解

PLCopen标准定义了多种回零模式。我挑最常用的几种讲。

4.2.1 绝对回零(Mode 0)

这是最标准的回零方式。轴会按照设定的方向、速度去找原点传感器。

时序大概是这样的:

  1. 轴以高速朝原点方向运动
  2. 碰到原点传感器后,减速停止
  3. 反向低速离开传感器
  4. 再次低速接近传感器,在传感器边沿处停止
  5. 当前位置设为零点

我在项目中遇到过一个问题:传感器信号抖动,导致回零位置每次都不一样。后来加了滤波时间,问题就解决了。

关键参数:

  • HomePosition:回零完成后,当前位置被映射成的坐标值
  • HomeSwitch:原点传感器信号
  • HomeVelocity:高速搜索速度
  • HomeAcceleration:加减速度

4.2.2 相对回零(Mode 1)

这种模式不找传感器。轴直接以当前位置为基准,移动一段设定距离后,把那个点设为零点。

说白了,就是“假装”那里是原点。

什么时候用?

  • 系统没有原点传感器
  • 轴已经在已知位置,只需要微调零点
  • 调试阶段临时用一下

注意:相对回零没有物理参考,断电后位置信息会丢失。下次上电必须重新回零。

4.2.3 限位回零(Mode 2)

这种模式比较特殊。轴先朝一个方向运动,直到撞上硬限位或软限位,然后反向找原点。

我建议在以下场景使用:

  • 设备没有原点传感器,但有行程限位
  • 原点传感器故障时的应急方案
  • 某些特殊机械结构,比如旋转台

我曾经在一个包装机上用过限位回零。当时原点传感器坏了,客户又急着生产。我临时改了参数,用限位当原点,撑了三天直到新传感器到货。

4.3 回零时序图

下面这张图,是我自己画的回零时序图。你看一眼就能明白整个过程。

MC_Home 回零时序图(绝对回零模式) t 高速搜索 减速 低速反向 低速接近 停止 原点传感器 传感器信号 ON 零点位置 阶段1:高速搜索 阶段2:减速停止 阶段3:低速反向 阶段4:低速接近

你看,整个过程分四个阶段:

  • 阶段1:轴以高速冲向传感器,节省时间
  • 阶段2:碰到传感器后减速,防止过冲
  • 阶段3:反向低速离开,消除回程间隙
  • 阶段4:再次低速接近,在传感器边沿精确定位

为什么要搞这么复杂?

因为机械有惯性,有间隙。如果直接高速撞传感器然后停止,每次停止位置都不一样。通过两次低速逼近,可以消除大部分误差。

4.4 配置参数详解

下面这个表,是我整理的回零相关参数。你调试的时候对着看就行。

参数名称 数据类型 说明 我的建议
HomePosition REAL 回零完成后,当前位置被映射成的坐标值 通常设为0,除非有特殊需求
HomeSwitch BOOL 原点传感器输入信号 注意信号滤波,防止抖动
HomeVelocity REAL 高速搜索速度,单位mm/s或deg/s 设为额定速度的30%-50%
HomeAcceleration REAL 加减速度 不要太大,否则容易过冲
HomeDirection INT 回零方向:0=正方向,1=负方向 根据机械结构确定
HomeOffset REAL 回零完成后,再偏移一段距离 用于调整零点位置

调试小技巧:

我一般先把HomeVelocity设得很低,比如10mm/s。确认传感器信号正常、方向正确后,再逐步提高速度。这样可以避免撞坏机械。

4.5 调试技巧与避坑指南

调试回零,说难不难,说简单也不简单。我总结了几条经验:

4.5.1 先确认传感器

我曾经遇到过一个问题:回零时轴一直冲,不停。查了半天,发现是传感器线松了。所以调试第一步,先用手动模式移动轴,确认传感器信号能正常触发。

4.5.2 注意回零方向

HomeDirection这个参数,一定要和机械结构匹配。如果方向设反了,轴会朝远离传感器的方向跑,永远回不了零。

4.5.3 加减速度要合理

HomeAcceleration设得太小,回零时间会很长。设得太大,轴会过冲,导致回零位置不准。我一般先设一个中间值,然后根据实际效果微调。

4.5.4 处理传感器抖动

有些传感器信号不稳定,会在边沿处反复跳变。这会导致回零位置每次都不一样。解决办法:

  • 硬件上:加RC滤波电路
  • 软件上:在PLC中设置数字滤波时间
  • 参数上:增加回零时的低速逼近次数

重要提醒:

回零完成后,一定要检查Done信号。如果Done没有置位,说明回零失败。这时候不要执行后续的绝对定位指令,否则轴会乱跑。

4.5.5 多轴同步回零

如果你有多个轴需要同步回零,比如龙门结构,我建议:

  • 先让所有轴独立回零
  • 确认每个轴都回零成功后,再执行同步操作
  • 不要试图让两个轴同时回零,容易出问题

4.6 代码示例

下面是一个简单的MC_Home调用示例。我用的是结构化文本(ST)语言。

// 回零指令调用
MC_Home_Instance(
    Axis := Axis_1,          // 轴引用
    Execute := bHomeStart,   // 上升沿触发
    Position := 0.0,         // 回零后位置
    HomeMode := 0,           // 绝对回零模式
    HomeSwitch := bHomeSensor, // 原点传感器
    HomeVelocity := 50.0,    // 高速搜索速度 mm/s
    HomeAcceleration := 500.0, // 加减速度 mm/s²
    HomeDirection := 0,      // 正方向回零
    HomeOffset := 0.0,       // 无偏移
    Done => bHomeDone,       // 回零完成
    Busy => bHomeBusy,       // 回零进行中
    Error => bHomeError,     // 错误标志
    ErrorID => wHomeErrorID  // 错误代码
);

// 错误处理
IF bHomeError THEN
    // 记录错误代码
    sErrorMsg := '回零失败,错误代码:' + INT_TO_STRING(wHomeErrorID);
    // 复位错误
    bHomeStart := FALSE;
END_IF

这段代码很简单,但有几个细节要注意:

  • Execute是上升沿触发,不要一直给TRUE
  • 回零过程中,不要给其他运动指令
  • 错误处理一定要做,否则轴卡住了你都不知道

4.7 总结

回零这件事,说白了就是让轴找到回家的路。模式选对了,参数调好了,时序理解了,基本就不会出大问题。

我个人习惯是:调试时先低速、先手动、先确认传感器。等一切正常了,再上高速。这样虽然慢一点,但安全。

嗯,今天就讲到这里。回零这块内容不少,但只要你动手调一次,就全明白了。


公众号:蓝海资料掘金营,微信deep3321