3、运动控制核心算法:点位运动、插补与速度规划

各位工程师朋友,这一章咱们来啃运动控制的“硬骨头”——核心算法。说实话,我刚入行那会儿,觉得算法就是数学公式堆砌,离实际应用很远。后来被项目“教育”了几次才明白:不懂算法,选型就是瞎蒙,调试就是撞大运。

这一章我会把点位运动、直线圆弧插补、速度规划,还有电子齿轮凸轮这几个核心概念,用我自己的理解讲清楚。你想想看,电机转起来容易,但要让它精准地走到指定位置、走出特定轨迹、走得又快又稳,靠的就是这些算法。

核心观点:运动控制算法决定了设备的“精度上限”和“效率天花板”。选型时,算法支持能力比硬件参数更关键。

运动控制核心算法知识体系 运动控制核心算法 点位运动 PTP 插补算法 速度规划 电子齿轮/凸轮 绝对/相对定位 直线插补 圆弧插补 梯形曲线 电子齿轮 回零/寻参 2D/3D联动 速度前瞻 S型曲线 电子凸轮 选型关键:确认控制卡支持的插补类型、速度规划阶数、 电子凸轮表容量以及最小插补周期。

3.1 点位运动(PTP)原理

点位运动,英文叫 Point to Point,简称 PTP。说白了就是:电机从A点走到B点,中间路径不关心,只关心起点和终点准不准。

我遇到过不少刚入行的工程师,觉得PTP太简单,不就是发个脉冲嘛。其实不然。PTP的核心在于“怎么走”——是直接全速冲过去?还是先加速再匀速最后减速?这直接决定了设备会不会抖动、会不会过冲。

PTP有两种基本模式:

  • 绝对定位:以原点为参考,告诉电机“走到坐标1000的位置”。每次指令都是相对于原点。
  • 相对定位:以当前位置为参考,告诉电机“再往前走500个脉冲”。每次指令都是相对于当前位置。

我的习惯:做多工位设备时,我一般用绝对定位。因为一旦原点丢失,所有位置都乱套。相对定位适合单步调试或手动微调场景。

3.2 直线插补与圆弧插补

插补,这个词听起来高大上,其实意思就是“在已知点之间,用算法算出中间点”。你想想看,控制器不可能每纳秒都给你发指令,它只能隔一段时间发一个位置点。中间那些点怎么补?这就是插补算法干的事。

3.2.1 直线插补

直线插补,就是让两个或三个轴联动,走出一条直线。比如XY平台要从(0,0)走到(100,50),两个轴必须按比例同步运动——X轴走2个单位,Y轴走1个单位。

常用的算法是DDA(数字微分分析器)和逐点比较法。我个人更倾向于DDA,因为它实现简单,而且容易扩展到多轴。

// 直线插补核心逻辑(伪代码)
void LineInterpolate(int x1, int y1, int x2, int y2) {
    int dx = x2 - x1;
    int dy = y2 - y1;
    int steps = max(abs(dx), abs(dy));
    float x_inc = dx / (float)steps;
    float y_inc = dy / (float)steps;
    float x = x1, y = y1;
    for(int i = 0; i <= steps; i++) {
        OutputPosition(round(x), round(y));
        x += x_inc;
        y += y_inc;
    }
}

3.2.2 圆弧插补

圆弧插补比直线复杂一些。它需要指定圆心、半径、起始角和终止角。算法上常用的是时间分割法——把圆弧分成很多小段,每段用直线逼近。

我记得有一次做激光切割项目,客户要求切一个直径200mm的圆,误差不能超过0.02mm。当时用的控制卡插补周期是1ms,算下来每段弧长只有0.1mm左右,精度完全够。但如果插补周期是4ms的老卡,那就得掂量掂量了。

插补类型 轴数 典型应用 精度影响因素
直线插补 2~4轴 点胶、焊接、搬运 插补周期、脉冲当量
圆弧插补 2轴 切割、打磨、轮廓加工 插补周期、半径大小
螺旋插补 3轴 螺纹加工、3D打印 线性轴与旋转轴同步

避坑指南:我曾经选过一款低端控制卡,标称支持圆弧插补,但实际跑起来在象限切换点有明显停顿。后来才发现它的插补算法没做速度前瞻处理。所以选型时一定要问清楚:插补周期是多少?有没有速度前瞻?

3.3 速度规划:梯形曲线与S型曲线

速度规划,说白了就是决定电机怎么加速、怎么减速。你想想,如果电机一启动就是全速,那冲击力得多大?机械结构受得了吗?

3.3.1 梯形速度曲线

梯形曲线是最简单的:匀加速→匀速→匀减速。三段式,像梯形一样。优点是计算量小,实现简单。缺点是加加速度(Jerk)在拐点处突变,会有冲击。

梯形曲线的参数就三个:最大速度、加速度、减速度。我一般用在要求不高的场合,比如简单的传送带、物料搬运。

3.3.2 S型速度曲线

S型曲线比梯形多了一个“加加速度”控制。它把加速段又分成了“加加速→匀加速→减加速”三段,减速段同理。整个速度曲线呈S形,平滑无突变。

什么时候用S型?高速高精度场合,比如数控机床、芯片封装。我做过一个芯片贴装项目,要求每分钟贴装30000颗,运动冲击稍大就会导致芯片偏移。那时候必须上S型曲线,而且还得调Jerk参数。

特性 梯形曲线 S型曲线
计算复杂度 低 中高
运动平滑性 一般 优秀
启停冲击 有 无
适用场景 低速、短距离 高速、高精度
控制卡要求 低 较高

选型建议:如果控制卡只支持梯形曲线,那做高速高精度项目基本没戏。至少得支持S型曲线,最好还能自定义Jerk参数。我见过一些高端卡,支持7段S型甚至更复杂的多项式规划。

3.4 电子齿轮与电子凸轮

这两个概念,很多人容易搞混。我简单说一下:电子齿轮是“比例跟随”,电子凸轮是“函数跟随”。

3.4.1 电子齿轮

电子齿轮,就是让从轴跟随主轴,按固定比例运动。比如主轴转一圈,从轴转两圈。这个比例就是电子齿轮比。

实际应用中,电子齿轮比可以是分数。比如主轴转3圈,从轴转2圈,比例就是3:2。控制卡内部通过脉冲计数和分频来实现。

我做过一个印刷机项目,需要主辊和压辊保持严格同步。当时用的就是电子齿轮,比例设成1:1.2。调试时发现一个问题:齿轮比不是整数时,长时间运行会有累积误差。后来加了定期回零才解决。

3.4.2 电子凸轮

电子凸轮比电子齿轮灵活得多。它不是固定比例,而是定义了一个“主轴位置→从轴位置”的映射表。主轴走到某个角度,从轴就走到对应的位置。这个映射关系可以任意定义,比如正弦、摆线、自定义曲线。

电子凸轮的核心是凸轮表。一张表里存了主轴位置和对应的从轴位置。控制卡在运行时查表插值,实现复杂的同步运动。

// 电子凸轮表示例(主轴角度 → 从轴位置)
// 主轴角度(°)  从轴位置(mm)
// 0             0
// 60            10
// 120           25
// 180           30
// 240           25
// 300           10
// 360           0

我的经验:电子凸轮表的分辨率很关键。表越密,运动越平滑,但占用内存也越大。一般1024点/周期够用,高精度场合用4096点。选型时注意控制卡的凸轮表容量上限。

电子凸轮的应用场景很多:包装机械的横封切刀、纺织机械的综框运动、飞剪定长切割……说白了,凡是需要主轴和从轴之间有复杂函数关系的,都可以用电子凸轮。

曾经踩过的坑:有一次做飞剪项目,电子凸轮表在高速运行时出现抖动。排查了很久,发现是控制卡的插补周期太长(4ms),导致查表插值跟不上主轴速度。后来换了1ms周期的卡,问题解决。所以选型时,电子凸轮的最小执行周期一定要问清楚。