3、电子凸轮曲线原理:凸轮曲线的数学模型、多项式曲线、S型曲线、修正正弦曲线、曲线生成算法

各位工程师朋友,咱们今天聊聊电子凸轮的核心——曲线。说白了,电子凸轮就是一条数学曲线在驱动轴上的映射。机械凸轮靠物理形状,电子凸轮靠数学公式。我个人觉得,理解曲线原理,才算真正入了电子凸轮的门。

3.1 凸轮曲线的数学模型

先看数学模型。电子凸轮的本质,是从主轴位置到从轴位置的一个映射关系:

从轴位置 = f(主轴位置)

这个 f 就是凸轮曲线。它必须满足几个基本条件:

  • 连续性:位置、速度、加速度都要连续。不连续就会产生冲击。
  • 边界条件:起点和终点的位置、速度要匹配。
  • 单调性:通常要求从轴位置随主轴位置单调变化,不能来回跑。

我在项目中遇到过一个问题:曲线在连接点处速度不连续,结果机器每转一圈就“咯噔”一下。后来查出来是曲线拼接时没处理好边界条件。嗯,这里要注意,边界条件不是可选项,是必选项。

3.2 多项式曲线

多项式曲线是最基础的一种。说白了就是用多项式来拟合运动规律。

常用的有:

  • 3次多项式:能保证位置和速度连续,但加速度不连续。
  • 5次多项式:位置、速度、加速度都连续,工程上够用了。
  • 7次多项式:再加一阶连续,适合高速高精度场合。

举个例子,5次多项式的标准形式:

s(t) = c0 + c1*t + c2*t² + c3*t³ + c4*t⁴ + c5*t⁵

系数 c0~c5 由边界条件决定。你想想看,6个未知数,正好需要6个边界条件(起点位置、速度、加速度,终点位置、速度、加速度)。

我的经验: 多项式曲线计算简单,但有个缺点——容易产生“过冲”。特别是高阶多项式,在边界处容易振荡。我一般只用5次多项式,7次以上很少用。

3.3 S型曲线

S型曲线,其实就是速度曲线呈S形。它把运动分成三段:加速段、匀速段、减速段。加速和减速过程又细分为加加速、匀加速、减加速三个阶段。

为什么叫S型?因为速度曲线看起来像字母S。它的核心思想是让加速度连续变化,避免冲击。

S型曲线的参数有:

  • 最大速度 Vmax
  • 最大加速度 Amax
  • 最大加加速度 Jmax
  • 总位移 S

我曾经调试一台高速贴片机,用梯形曲线时加速度突变,导致贴片头抖动。换成S型曲线后,抖动问题就解决了。说白了,S型曲线就是拿时间换平稳。

关键点: S型曲线有7段运动模式。如果距离太短,可能达不到最大速度,这时候就变成5段甚至3段模式。算法里要处理这些边界情况。

3.4 修正正弦曲线

修正正弦曲线,英文叫Modified Sine。它是在正弦曲线基础上改进的。为什么要修正?因为纯正弦曲线的加速度在起点和终点不为零,会产生冲击。

修正正弦的做法是:把正弦曲线分成三段,每段用不同的正弦函数拼接。这样就能保证加速度在起点和终点为零。

它的数学表达式比较复杂:

s(τ) = 
  0 ≤ τ ≤ 1/8:  (1/4) * sin(4πτ) / π
  1/8 ≤ τ ≤ 7/8:  (1/4) * (2 - sin(4πτ)) / π
  7/8 ≤ τ ≤ 1:  (1/4) * (4 + sin(4πτ)) / π

其中 τ 是归一化时间,从0到1。

修正正弦曲线有个特点:它的最大加速度和最大速度都比较小,适合对冲击敏感的场合。我在做包装机械时经常用这种曲线,因为包装材料怕振动。

注意: 修正正弦曲线的计算量比多项式大。在低端控制器上,要注意计算周期是否足够。我曾经在8位单片机上跑修正正弦,结果计算时间太长,导致控制周期不稳定。

3.5 曲线生成算法

曲线生成算法,就是把数学公式变成可执行的代码。我总结了一套通用流程:

  1. 参数输入:输入主轴行程、从轴行程、速度限制、加速度限制等。
  2. 类型选择:根据应用场景选择曲线类型(多项式、S型、修正正弦等)。
  3. 系数计算:根据边界条件计算曲线系数。
  4. 查表生成:把曲线离散化成查表数据,方便实时调用。
  5. 插值输出:运行时根据主轴位置查表插值,输出从轴位置。

下面是一个简单的5次多项式曲线生成代码:

// 5次多项式系数计算
void CalcQuinticCoeff(double startPos, double endPos, 
                      double startVel, double endVel,
                      double startAcc, double endAcc,
                      double* coeff) {
    double T = 1.0;  // 归一化时间
    double T2 = T*T, T3 = T2*T, T4 = T3*T, T5 = T4*T;
    
    // 解线性方程组
    coeff[0] = startPos;
    coeff[1] = startVel;
    coeff[2] = startAcc / 2.0;
    
    double dPos = endPos - startPos;
    double dVel = endVel - startVel;
    double dAcc = endAcc - startAcc;
    
    coeff[3] = (20*dPos - 8*dVel*T - 3*dAcc*T2) / (2*T3);
    coeff[4] = (-30*dPos + 14*dVel*T + 3*dAcc*T2) / (2*T4);
    coeff[5] = (12*dPos - 6*dVel*T - dAcc*T2) / (2*T5);
}
避坑指南: 我曾经在查表时用了线性插值,结果速度曲线出现锯齿。后来改成三次样条插值,问题就解决了。查表点数建议不少于1000点,精度要求高的场合用2000点以上。

3.6 知识体系总览

下面这张图是我画的电子凸轮曲线知识体系,帮你理清思路:

电子凸轮曲线知识体系 凸轮曲线原理 数学模型 多项式曲线 S型曲线 连续性条件 边界条件 单调性要求 3次多项式 5次多项式 7次多项式 7段运动模式 5段/3段模式 边界情况处理 曲线生成算法 参数输入 类型选择 系数计算 查表生成 插值输出

这张图把本章的知识点串起来了。从数学模型出发,分支出多项式曲线和S型曲线,最后汇聚到曲线生成算法。你想想看,掌握了这些,电子凸轮曲线这块就算拿下了。

好了,这一章就到这里。曲线原理是基础,下一章咱们会深入讲曲线拼接和优化,到时候再聊。


专注资料整理