第二章:运动控制基础

各位同学好,我是老张。搞激光控制系统这些年,我最大的体会就是——运动控制是整个系统的「腿」。你算法再牛,光路再准,运动轴跑偏了,一切白搭。今天咱们就聊聊运动控制里最核心的几个基础概念。

2.1 坐标系建立

先说说坐标系。激光加工嘛,总得知道「往哪走」。我个人习惯把工作台左上角设为原点,X轴向右,Y轴向下。当然,这没有硬性规定,你完全可以根据机械结构来定。

但有一点要注意:坐标系的方向必须和电机运动方向一致。我见过一个项目,工程师把X轴正方向设反了,结果每次回零都往反方向冲,差点撞坏限位。嗯,这种低级错误其实挺常见的。

坐标系建立原则:

  • 原点尽量选在机械行程的角落
  • X/Y轴方向与电机运动方向对应
  • Z轴(如果有)通常向上为正
  • 记录坐标系与机械原点的偏移量

你想想看,坐标系其实就是给机器一个「空间感」。没有它,你写的运动指令就是瞎指挥。

2.2 脉冲当量计算

这个知识点,说白了就是「一个脉冲能让电机走多远」。公式很简单:

脉冲当量 = 丝杠导程 / (电机每转脉冲数 × 驱动器细分数)

举个例子:丝杠导程5mm,电机每转2000个脉冲(步进电机常见值),驱动器设了8细分。那么:

脉冲当量 = 5 / (2000 × 8) = 0.0003125 mm/脉冲

也就是每个脉冲走0.3125微米。这个精度对于大多数激光加工来说足够了。

我的经验:脉冲当量算好后,一定要实测验证。我曾经在调试一台大幅面切割机时,算出来是0.001mm/脉冲,结果实际走100mm只走了98.7mm。后来发现是丝杠导程标称值和实际有偏差。所以,理论计算 + 实测校准才是王道。

为什么会这样?因为机械传动总有误差。丝杠的导程误差、联轴器的间隙、皮带的弹性形变……这些都会影响实际定位精度。所以别太迷信计算值,实测才是硬道理。

2.3 加减速曲线

说到加减速,我得先问一句:你见过电机直接全速启动吗?那声音,咔咔的,听着就心疼。电机和机械结构都受不了这种冲击。

所以我们需要加减速曲线。常用的有两种:梯形和S形。

2.3.1 梯形加减速

梯形曲线最简单,加速段和减速段都是恒加速度。实现起来也容易,适合对速度平稳性要求不高的场合。

// 梯形加减速伪代码
void trapezoidal_move(float target_pos, float max_vel, float accel) {
    // 计算加速段距离
    float accel_dist = max_vel * max_vel / (2 * accel);
    // 计算减速段距离
    float decel_dist = accel_dist;
    // 计算匀速段距离
    float const_dist = target_pos - accel_dist - decel_dist;
    
    if (const_dist < 0) {
        // 还没加速到最高速就要减速了
        // 这种情况叫「三角运动」
        handle_triangle_move(target_pos, max_vel, accel);
    }
}

梯形曲线的缺点很明显:加速度突变。在加速开始和结束的瞬间,加速度从0跳到最大值,或者从最大值跳到0。这种突变会产生冲击力,导致机械振动。

注意:梯形加减速不适合高精度定位场合。我在做一台精密打标机时,用梯形曲线,结果每次定位都有几十微米的过冲。换成S形曲线后,问题就解决了。

2.3.2 S形加减速

S形曲线,说白了就是让加速度也平滑变化。它用加加速度(Jerk)来控制加速度的变化率,这样运动就更柔和了。

// S形加减速的加速度变化
// 阶段1:加加速度为正,加速度从0增加到最大值
// 阶段2:加加速度为0,加速度保持最大值
// 阶段3:加加速度为负,加速度从最大值降到0
// 阶段4:匀速段
// 阶段5-7:减速段,与加速段对称

S形曲线虽然复杂一些,但效果确实好。我建议:凡是要求定位精度在0.1mm以内的,都用S形曲线。虽然计算量大一点,但现在的MCU性能完全扛得住。

2.4 回零与限位逻辑

回零操作,是每次开机后必须做的第一件事。为什么?因为控制系统不知道机械位置在哪。你想想看,断电后电机位置就丢了,不找零位怎么干活?

回零的常见方式有两种:

  • 近零位开关 + 编码器Z信号:先找开关,再找Z信号,精度高
  • 仅限位开关:碰到限位就认为是零位,精度一般

限位逻辑就更重要了。我把它分为三类:

限位类型 触发动作 恢复方式
软件限位 停止运动,报错 手动反向移动
硬件限位(光电开关) 急停,切断驱动使能 手动复位+清除报警
硬限位(机械挡块) 物理阻挡,可能损坏设备 维修

回零流程(我常用的):

  1. 以低速向负方向运动,寻找近零位开关
  2. 找到开关后,反向运动离开开关
  3. 再以更低速向正方向运动,寻找编码器Z信号
  4. 找到Z信号后,记录当前位置为零位
  5. 设置软件限位范围

我曾经遇到过一个坑:回零时速度太快,结果冲过了限位开关,直接撞到机械挡块上。那次维修花了两天时间。所以我的建议是:回零速度一定要慢,宁可多花两秒钟,也别冒险

知识体系总览

下面这张图,是我自己整理的本章知识结构。你可以把它当作一个「地图」,学完后再回来看,会更有感觉。

运动控制基础 坐标系建立 原点选择 方向对应 偏移量记录 脉冲当量计算 公式:导程/脉冲数 细分设置 实测校准 加减速曲线 梯形:恒加速度 S形:加加速度控制 回零与限位 近零位+Z信号 软件/硬件限位

好了,运动控制的基础就这些。记住:坐标系是方向,脉冲当量是精度,加减速是平稳性,回零限位是安全性。这四个东西搞明白了,后面的编程调试才能顺手。

最后说一句:别急着写代码,先把这些概念在脑子里过一遍。我见过太多人上来就写运动控制程序,结果连脉冲当量都没算对,折腾半天才发现是基础没打牢。磨刀不误砍柴工,对吧?


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