运动控制电子凸轮(Electronic Cam)设计:从运动需求到 Trio FLEXLINK 凸轮曲线公式推导
高速包装、旋转刀、飞剪等设备中,从轴需要在指定位置加速、减速、超前、滞后且全程平滑,这就是电子凸轮设计问题。本文以 Trio Motion Controller + FLEXLINK/CamGen + 旋转刀为例,从运动需求出发,讲解 Base Move 基础同步 + Excitation Move 凸轮补偿的结构,并完整推导 OffsetSinSpeedConstCurve 曲线中 c1/c2/c3/k2/k3 的数学公式:由位移连续、速度连续与总位移约束联立求解;最后给出产品长度 100~400mm 动态变化时的参数化电子凸轮算法(SmoothStep 平滑过渡 + FLEXLINK 自动生成曲线)。
在高速包装、旋转刀、飞剪、印刷、贴标、灌装以及连续送料设备中,经常会遇到这样一种运动控制需求:
从轴需要跟随主轴运动,但又不能始终保持简单的 1:1 电子齿轮关系,而是需要在指定位置加速、减速、超前、滞后,并且整个过程必须平滑。
这种问题就是典型的电子凸轮(Electronic Cam)设计问题。
传统机械设备通过凸轮机构实现这种运动关系,而现代伺服系统可以通过软件实时计算"主轴位置 → 从轴位置"的映射关系,实现机械凸轮的电子化。
本文以 Trio Motion Controller + FLEXLINK/CamGen + 旋转刀为例,从运动需求、数学模型、速度曲线、位置曲线,到最终公式推导,完整介绍电子凸轮的设计方法。
一、什么是电子凸轮?
电子凸轮可以理解为:
Y = f(X)
其中:
- X:主轴位置
- Y:从轴位置
主轴可以是:
- 输送带
- 送料辊
- 编码器
- 伺服电机
- 生产线虚拟主轴
从轴可以是:
- 旋转刀
- 飞剪刀
- 压合机构
- 打标机构
- 机械手
- 送料机构
例如:
主轴位置 X
│
▼
┌───────────────┐
│ Electronic Cam │
│ Y = f(X) │
└───────────────┘
│
▼
从轴位置 Y
因此,电子凸轮的核心并不是"控制电机转速",而是:
建立主轴位置与从轴位置之间的数学关系。
速度、加速度实际上都是由位置曲线进一步求导得到的。
二、为什么不能简单使用电子齿轮?
假设输送带速度为 V_M,旋转刀需要始终保持 V_S = V_M,这时使用电子齿轮即可。
例如:
主轴:100 mm
从轴:100 mm
即:
Y/X = 1
但是旋转刀实际工作时通常并不是这样。
例如:
旋转刀
↓
┌────────┐
│ │
────┴────────┴───── 传送带
刀具可能需要:
- 前段快速加速;
- 中间区域与产品同步;
- 完成切割;
- 后段快速减速;
- 回到下一次切割位置。
因此从轴的速度必须动态变化:
速度
↑
│ ┌──────────┐
│ / \
│______/ \________
│
└──────────────────────────────→ 主轴位置
这就是电子凸轮。
三、旋转刀电子凸轮的典型工艺要求
以一个连续输送的旋转刀系统为例。
假设:
旋转刀:
0° → 360°
其中:
90° → 270°
是刀具与产品同步工作的区域。
也就是说:
90°~270° 这 180° 范围是有效同步区。
假设产品跟踪长度为 L,产品长度可以动态变化:
100 ≤ L ≤ 400
工艺要求:
L = 100 mm,整个有效区域都可以高速同步:
100 mm
┌──────────────────────────────┐
│ 高速同步 │
└──────────────────────────────┘
L = 150 mm,要求:
高速同步:50 mm
低速调整:100 mm
L = 200 mm,要求:
高速同步:50 mm
低速调整:150 mm
L = 400 mm,要求:
高速同步:50 mm
低速调整:350 mm
同时:
100~400 mm 之间不能出现速度突变,需要平滑过渡。
这就构成了一个动态电子凸轮问题。
四、电子凸轮应该从"位置"开始设计
很多人在设计运动曲线时,第一反应是直接设计速度:
速度 → 加速 → 匀速 → 减速
实际上更推荐从 Y = f(X) 开始。
因为:
V = dY/dX
而加速度则可以继续通过求导得到。
所以:
位置曲线
↓ 一阶导
速度曲线
↓ 二阶导
加速度曲线
因此电子凸轮设计的核心是:
首先保证位置连续,再保证速度连续,最后根据需要保证加速度和 Jerk 连续。
五、Trio FLEXLINK 的基本思想
Trio 提供的 FLEXLINK() 正适合这种应用。
基本格式:
FLEXLINK(
base_dist, 基础运动距离
excite_dist, 凸轮补偿距离
link_dist, 主轴联动总距离
base_in, 凸轮开始前的预留
base_out, 凸轮结束后的预留
excite_acc, 凸轮加速比例
excite_dec, 凸轮减速比例
link_axis, 从轴
options, 曲线类型选项
start_pos 起始位置
)
它将运动分成两个部分:
最终运动 = Base Move + Excitation Move
也就是:
基础同步运动
+
凸轮补偿运动
六、Base Move:基础同步运动
Base Move 可以理解成一个电子齿轮。
例如:
base_dist = 100
link_dist = 100
表示:
主轴运动 100 → 从轴运动 100
也就是:
Y_base = X
如果:
base_dist = 270
link_dist = 360
则基础运动比例:
K = 270/360 = 0.75
即:
Y_base = 0.75X
七、Excitation Move:凸轮补偿
Excitation 是在基础运动上增加一个平滑变化量。
例如:
base_dist = 270
excite_dist = 90
那么最终:
Y = 270 + 90 = 360
因此:
Base Excitation Total
270 + 90 = 360
这正是旋转刀非常有用的结构。
八、CamGen 中的典型曲线
Trio CamGen 可以生成类似 OffsetSinSpeedConstCurve 的曲线。
它实际上由五段组成:
0 x1 x2 x3 x4 1
│--------│------│---------│------│--------│
Idle 加速 匀速 减速 Idle
例如:
x1 = 0.30
x2 = 0.42
x3 = 0.58
x4 = 0.70
对应:
0~30% 不进行 Excitation
30~42% SIN 加速
42~58% 匀速
58~70% SIN 减速
70~100% 保持 Excitation 终值
因此整个曲线非常适合高速运动机构。
九、为什么采用 SIN 曲线?
假设速度采用:
v = c(1 − cosθ)
其中:
0 ≤ θ ≤ π
那么:
起点:v = 0
终点:v = 2c
速度会平滑地从 0 增加到最大值。
积分后得到位置:
y = (c/k)(θ − sinθ)
其中:
k = π/(x2 − x1)
这就是 CamGen 中使用的核心公式之一。
十、CamGen 常数是如何计算出来的?
这是电子凸轮设计中非常重要的一部分。
例如:
x1 = 0.30
x2 = 0.42
x3 = 0.58
x4 = 0.70
basedist = 270
excitedist = 90
CamGen 生成:
c1 = 160.7
c2 = 321.4
c3 = 160.7
k2 = -115.7
k3 = 51.43
这些数字并不是经验参数。
它们是由位移连续 + 速度连续 + 总位移约束推导出来的。
十一、第一段 SIN 曲线
程序:
factor = PI / (x2 - x1)
theta = (x - x1) * factor
y = c1 / factor * (theta - sin(theta))
其中:
factor = π/(x2 − x1)
当前例子:
x2 − x1 = 0.42 − 0.30 = 0.12
因此:
factor = π/0.12
约为:
26.18
十二、为什么 c2 = 2c1?
SIN 加速段结束时:
θ = π
速度公式:
v = c1(1 − cosθ)
所以:
v = c1(1 − cosπ)
因为:
cosπ = −1
所以:
v = 2c1
而中间匀速段速度就是 c2。
为了保证速度连续:
c2 = 2c1
因此:
c2 = 2 × c1
十三、c1 如何计算?
第一段 SIN 位移:
y1 = c1(x2 − x1)
最后一段减速位移:
y3 = c3(x4 − x3)
如果加速和减速对称:
c3 = c1
总 Excitation 距离为 E。
因此:
E = c1(x2 − x1) + c2(x3 − x2) + c3(x4 − x3)
如果:
x2 − x1 = x4 − x3 = A
且:
c2 = 2c1
则:
E = c1·A + 2c1·B + c1·A
即:
E = 2c1(A + B)
所以:
c1 = E / [2(A + B)]
对于当前参数:
A = 0.12,B = 0.16,E = 90
因此:
c1 = 90 / [2 × (0.12 + 0.16)]
得到:
c1 = 160.714
于是:
c2 = 321.428
c3 = 160.714
与 CamGen 生成的:
c1 = 160.7
c2 = 321.4
c3 = 160.7
完全一致。
十四、k2 如何计算?
匀速段公式:
y = c2·x + k2
因此需要保证:
SIN 曲线
↓
匀速直线
连接点位置连续。
在 x = x2 处:
c2·x2 + k2 = c1(x2 − x1)
所以:
k2 = c1(x2 − x1) − c2·x2
代入:
k2 = 160.714 × 0.12 − 321.428 × 0.42
得到:
k2 = −115.714
也就是:
k2 = -115.7
十五、k3 如何计算?
减速段:
y = c3 / factor * (theta - sin(theta)) + k3
在减速开始位置 x = x3 处,必须与匀速段相等。
因此:
c3(x4 − x3) + k3 = c2·x3 + k2
得到:
k3 = c2·x3 + k2 − c3(x4 − x3)
代入当前参数:
k3 = 321.428 × 0.58 − 115.714 − 160.714 × 0.12
得到:
k3 = 51.428
即:
k3 = 51.43
至此,CamGen 中的所有关键常数都可以自己推导出来。
十六、最终 CamGen 公式
因此整个 Excitation 曲线可以写成:
y(x) =
0 0 ≤ x < x1
(c1/k)(θ − sinθ) x1 ≤ x < x2
c2·x + k2 x2 ≤ x < x3
(c3/k)(θ − sinθ) + k3 x3 ≤ x < x4
E x4 ≤ x ≤ 1
其中:
加速段:θ = (x − x1)·k,k = π/(x2 − x1)
减速段:θ = π + (x − x3)·k
最终 Trio 表中的位置:
Y(x) = x × BaseDistance + y(x)
这就是完整的电子凸轮位置函数。
十七、对应到旋转刀
对于旋转刀:
0° 360°
│-----------------│
可以把一个完整刀轴周期定义为:
0% 100%
│-----------------│
例如:
0~30% Base 同步
30~42% 加速
42~58% 高速同步
58~70% 减速
70~100% Base 同步
最终得到平滑的刀轴速度:
刀轴速度
┌─────────────┐
/ \
______/ \______
而不是:
┌─────────────┐
_______/ \_______
↑ ↑
突然加速 突然减速
后者会造成:
- 电机冲击;
- 机械振动;
- 伺服跟随误差增加;
- 产品切割位置波动;
- 高速情况下产生机械噪声。
十八、为什么需要"速度连续"?
电子凸轮最基本的要求之一就是:
V_left = V_right
例如:
SIN 加速
↓
●──────── 匀速
连接点不能出现速度突变:
速度
│ /
│ /
│ /
│____●────────
↑
突变
正确情况应该是:
速度
│ ________
│ /
│ /
│___/
这样伺服电机不会突然改变速度。
十九、进一步要求:加速度连续
如果设备速度非常高,仅仅保证速度连续还不够。
还需要:
A_left = A_right
进一步可以考虑 Jerk(加加速度):
J = dA/dt
因此常见曲线可以分为:
| 曲线 | 平滑程度 | 应用 |
|---|---|---|
| 线性 Ramp | ★★ | 低速机构 |
| 5次多项式 | ★★★★ | 高速机械 |
| 7次多项式 | ★★★★★ | 高动态 |
| 9次多项式 | ★★★★★ | 高精度高速 |
| SIN | ★★★★ | 通用电子凸轮 |
Trio FLEXLINK 的 options 中就提供了这些曲线类型。
二十、FLEXLINK 参数与电子凸轮的关系
可以把 FLEXLINK 理解成:
FLEXLINK
│
┌───────────┴───────────┐
↓ ↓
Base Move Excitation
│ │
基础同步 凸轮补偿
│ │
└───────────┬───────────┘
↓
从轴最终位置
几个核心参数:
- BaseDistance(基础同步距离):base_dist
- ExcitationDistance(凸轮补偿距离):excite_dist
- Total Link Distance(主轴一个运动周期):link_dist
- Base In(凸轮开始之前的预留):base_in
- Base Out(凸轮结束之后的预留):base_out
- Excite Acc / Dec(凸轮加速、减速比例):excite_acc / excite_dec
二十一、旋转刀项目中的设计思路
针对前面的 100~400 mm 动态跟踪长度,可以建立如下算法。
首先输入产品跟踪长度 L,然后计算高速同步区域 HighLen(L)。
例如:
L = 100 → HighLen = 100
L = 150 → HighLen = 50
L = 200 → HighLen = 50
L = 300 → HighLen = 50
L = 400 → HighLen = 50
但是不能简单写成:
if L <= 100:
HighLen = 100
else:
HighLen = 50
因为在 L = 100 → 101 时会产生巨大跳变。
所以应该使用平滑函数。
例如 SmoothStep:
S(t) = 3t² − 2t³
定义:
t = (L − 100)/50
限制:
0 ≤ t ≤ 1
然后:
HighLen = 50 + 50(1 − S(t))
这样:
L = 100 → HighLen = 100
L = 150 → HighLen = 50
中间自动平滑变化。
二十二、进一步计算高速区角度
旋转刀有效同步区:
180°
因此:
θ_H = 180° × HighLen / L
例如:
L = 100:
θ_H = 180°,整个 90°~270° 都是高速同步。
L = 200:
θ_H = 180 × 50/200 = 45°
即高速区域可以设计为 90°~135°。
然后 135°~270° 进行平滑低速调整。
L = 400:
θ_H = 180 × 50/400 = 22.5°
高速区进一步缩短。
二十三、最终形成动态电子凸轮
整个系统可以设计成:
产品跟踪长度 L
│
▼
┌─────────────────┐
│ HighLen 计算 │
│ 100~400mm │
└────────┬────────┘
│
▼
高速区角度计算
│
▼
┌──────────────────┐
│ 电子凸轮参数生成 │
│ x1 x2 x3 x4 │
│ c1 c2 c3 │
│ k2 k3 │
└────────┬─────────┘
│
▼
FLEXLINK/CAM
│
▼
Trio 运动控制器
│
▼
旋转刀伺服
这样就不需要针对 100/150/200/250/300/350/400 mm 分别制作七套凸轮表。
而是:
输入产品长度 → 自动计算凸轮参数 → 自动生成运动曲线。
二十四、工程设计时最重要的几个原则
-
先设计位置,再设计速度
核心是 Y = f(X),而不是直接控制 V = f(X)。 -
保证位移连续
Y_left = Y_right -
保证速度连续
V_left = V_right -
高速设备最好保证加速度连续
A_left = A_right -
尽量控制 Jerk
高速旋转刀尤其需要考虑 J = dA/dt。 -
不要让产品长度变化导致凸轮参数突变
应该 100mm → 120mm → 150mm → 200mm 连续调整,而不是 100mm 一套 Cam、101mm 又另一套 Cam。
二十五、总结
电子凸轮本质上是一个数学映射:
Y = f(X)
通过这个映射,可以让从轴按照主轴的位置自动改变运动速度。
Trio 的 FLEXLINK() 则进一步将运动拆分成:
FinalMove = BaseMove + ExcitationMove
其中:
- Base Move 负责基础同步;
- Excitation Move 负责提前、滞后和动态补偿;
- SIN / 5次 / 7次 / 9次多项式负责平滑运动;
- CamGen 则可以将这些数学关系自动转换成凸轮表或公式。
对于旋转刀、飞剪、连续送料等设备,真正值得设计的不是一张固定的 CAMTABLE,而是一套:
"产品长度 → 高速跟踪区 → 凸轮参数 → 位置曲线 → 速度/加速度曲线 → Trio FLEXLINK"
的参数化电子凸轮算法。
这样当产品从 100 mm 改成 150 mm、200 mm 甚至 400 mm 时,系统都可以实时重新计算凸轮,而不需要重新手工制作凸轮表。
最终目标不是让电机"按照某个速度运行",而是让旋转刀的每一个角度,都与传送带的每一个位置建立确定、连续、可计算的运动关系。
