运动控制基础:伺服系统、编码器、PLCopen标准简介

各位同学,欢迎来到第二章。

做电子凸轮,说白了就是让电机按照我们设定的曲线去跑。但电机凭什么听你的?它怎么知道自己跑到了哪个位置?你又怎么跟它沟通?

这一章,我们就来拆解这三个核心问题。我刚开始接触运动控制时,也花了不少时间才把这些基础概念串起来。你把这些搞懂了,后面写凸轮曲线心里才有底。

2.1 伺服系统:执行指令的“肌肉”

伺服系统,你可以把它想象成一台“听话的电机”。你给它一个位置指令,它就必须精确地跑到那个位置,并且停住。如果跑过了,它会自己退回来;如果没跑到,它会自己补上去。

这就是闭环控制的核心——有反馈。

伺服系统三件套:

  • 伺服驱动器:大脑,负责接收指令、计算偏差、输出电流。
  • 伺服电机:肌肉,负责转动。
  • 编码器:眼睛,负责告诉大脑“我现在在哪儿”。

我在调试一个包装机项目时,遇到过电机低速运行时一抖一抖的。查了半天,发现是驱动器的刚性参数设得太高,系统在“自激振荡”。说白了,就是反馈太灵敏,反而把自己晃晕了。降低增益后,立马平稳。

伺服系统的工作模式,通常有三种。做电子凸轮,我们最常用的是位置模式。

模式 控制对象 电子凸轮适用性
位置模式 位置(脉冲数或角度) 最常用,直接控制主轴与从轴的同步位置
速度模式 转速(rpm) 较少用,需额外位置环,精度不如位置模式
转矩模式 力矩(N·m) 几乎不用,电子凸轮主要控制位置关系

我的习惯: 只要做电子凸轮同步,一律用位置模式。速度模式虽然也能做,但位置环的响应带宽更高,同步误差更小。别给自己找麻烦。

2.2 编码器:系统的“眼睛”

编码器是伺服系统里最容易被忽视,但又最关键的部分。没有它,伺服就是开环的步进电机,丢步了你都不知道。

编码器分两大类:增量式和绝对值。

  • 增量式编码器:只输出脉冲。上电后不知道自己在哪,需要找原点(回零)。
  • 绝对值编码器:输出绝对位置。上电就知道自己在哪,不需要回零。

做电子凸轮,我个人强烈建议用绝对值编码器。为什么?

你想想看,一台设备几十个轴,如果每次开机都要全部回零,既浪费时间,又可能因为回零顺序出错导致撞机。绝对值编码器一上电,所有轴的位置都已知,直接进入同步状态。

我曾经踩过的坑: 在一个飞剪项目中,用了增量式编码器。每次断电后,切刀位置丢失。操作工忘了回零就启动,切刀直接撞上了送料辊。后来全部换成多圈绝对值编码器,再也没出过这事。多花几百块,省了几万块的维修费。

编码器的分辨率也很关键。常见的分辨率有:

类型 典型分辨率 适用场景
低精度 1000 ~ 2500 PPR 普通输送带、简单定位
中精度 17 bit (~131072 PPR) 电子凸轮、飞剪、追剪
高精度 23 bit 及以上 高精度印刷、半导体设备

做电子凸轮,17 bit 是起步。分辨率太低,曲线会“阶梯化”,运动不平滑。

2.3 PLCopen 标准:统一“语言”

以前做运动控制,各家 PLC 的指令都不一样。三菱用 ABS,西门子用 MC_MoveAbsolute,倍福用 FB_MoveAbsolute。换个品牌,代码几乎要重写。

PLCopen 就是为了解决这个问题而生的。它定义了一套标准的运动控制功能块(Function Block),让代码在不同平台间可以移植。

PLCopen 把运动控制分成了几个部分。我们做电子凸轮,主要关注Part 1和Part 4。

  • Part 1:通用运动控制 —— 单轴运动、点动、回零等。
  • Part 2:轴组控制 —— 多轴插补、机器人控制。
  • Part 4:电子凸轮与同步 —— 这才是我们的核心。

PLCopen Part 4 核心功能块:

  • MC_CamIn:激活电子凸轮耦合,让从轴跟随主轴。
  • MC_CamOut:解除电子凸轮耦合。
  • MC_CamTableSelect:选择要使用的凸轮表。

举个例子,用 PLCopen 标准写一段激活电子凸轮的代码,大概是这样的:

// 激活电子凸轮耦合
MC_CamIn_0.Execute := TRUE;          // 启动指令
MC_CamIn_0.Master := Axis_Main;      // 主轴
MC_CamIn_0.Slave  := Axis_Slave;     // 从轴
MC_CamIn_0.CamTable := CamTable_1;   // 凸轮表ID
MC_CamIn_0.MasterStartPos := 0;      // 主轴起始位置
MC_CamIn_0.SlaveStartPos := 0;       // 从轴起始位置
MC_CamIn_0.MasterScaling := 1.0;     // 主轴缩放系数
MC_CamIn_0.SlaveScaling := 1.0;      // 从轴缩放系数
MC_CamIn_0.StartMode := MC_CAM_START_MODE_IMMEDIATE; // 立即启动

MC_CamIn_0();  // 调用功能块

IF MC_CamIn_0.Done THEN
    // 耦合成功,从轴开始跟随主轴
END_IF

你看,不管你是用倍福、欧姆龙还是贝加莱,只要支持 PLCopen,这段代码的结构几乎一模一样。这就是标准化的力量。

我的建议: 哪怕你用的 PLC 不支持 PLCopen 标准,也建议按照它的思路来封装自己的功能块。把 CamIn、CamOut、CamTableSelect 这些接口固定下来。以后换平台,改底层驱动就行,上层逻辑不用动。

2.4 知识体系总览

为了让你更直观地理解这三者的关系,我画了一张图。

运动控制基础:三大核心要素 伺服系统 编码器 PLCopen标准 驱动 反馈 指令 电子凸轮应用 三者关系说明 • 伺服系统:执行机构,负责把电信号转化为机械运动 • 编码器:测量机构,实时反馈位置/速度给伺服驱动器 • PLCopen:编程标准,统一了运动控制的指令接口 • 三者结合,才能实现精确、可移植的电子凸轮控制

这张图很清楚地展示了:伺服系统是“手”,编码器是“眼”,PLCopen 是“语言”。三者缺一不可。

嗯,这一章的内容就到这里。你把这些基础概念吃透了,后面讲凸轮曲线生成、主从同步、飞剪追剪的时候,就不会觉得云里雾里了。