电子凸轮核心概念:主轴与从轴、相位与周期、主从同步关系、电子凸轮表的定义

好,咱们今天来聊聊电子凸轮最核心的几个概念。说实话,我刚接触电子凸轮那会儿,也被这些术语绕得有点晕。但搞懂了它们,你再看凸轮控制,就跟看一张地图一样清晰。

主轴与从轴:谁说了算?

电子凸轮系统里,有两个关键角色:主轴从轴

主轴,你可以理解为“发令枪”。它负责产生位置信号,告诉整个系统“我现在走到哪了”。主轴可以是实际的物理轴,比如一个旋转的电机轴;也可以是虚拟的,比如PLC内部生成的一个位置计数器。

从轴,就是“跟着跑”的那个。它根据主轴的位置,按照预设的规律来运动。从轴的运动不是自由的,它必须严格跟随主轴的脚步。

核心关系:主轴是“因”,从轴是“果”。主轴动,从轴才动。主轴停,从轴也停。

我在一个包装机项目里遇到过一个问题:客户想让切刀跟着传送带走,但传送带速度老变。我一开始把传送带电机当主轴,切刀电机当从轴。结果传送带一加速,切刀就切偏了。后来我改成用编码器直接读传送带位置,把这个位置当主轴,切刀跟着这个位置走,问题就解决了。说白了,主轴信号要足够精准,从轴才能跟得稳。

相位与周期:凸轮的“节拍”

搞懂了主从关系,咱们再看两个时间相关的概念:相位周期

周期,就是主轴转一圈,或者走完一个完整行程的距离。比如主轴转360度,这就是一个周期。在电子凸轮里,周期通常用主轴的位置单位来表示,可以是度、脉冲数、毫米等等。

相位,就是在一个周期里,主轴当前走到了哪个位置。相位值从0到周期值之间变化。比如周期是360度,相位是90度,就表示主轴走了四分之一圈。

你想想看,有了周期和相位,我们就能精确描述主轴在任何时刻的位置状态。这就像钟表一样——周期是12小时,相位就是当前时针指向几点。

我的习惯:我一般把周期设成2的整数次幂,比如4096或8192个脉冲。这样在内部计算时,取模运算特别快,不容易丢精度。当然,如果你的控制器支持浮点,那就无所谓了。

主从同步关系:怎么“跟”才不丢步?

主从同步,说白了就是让从轴的位置和主轴的位置保持一个固定的函数关系。这个函数关系,就是电子凸轮表。

同步关系有两种基本形式:

  • 位置同步:从轴位置 = f(主轴位置)。比如主轴转一圈,从轴转两圈。
  • 速度同步:从轴速度 = k × 主轴速度。比如主轴速度是1000转/分,从轴速度是500转/分,k=0.5。

但实际应用中,往往不是简单的比例关系。比如一个飞剪机构,切刀需要在传送带运动到某个位置时,加速追上物料,同步切割,然后减速返回。这个过程中,从轴的速度和位置都在不断变化,但始终与主轴保持某种函数关系。

我曾经踩过的坑:有一次做高速贴标机,主轴速度从1000转/分突然降到500转/分。我用的凸轮表是按匀速设计的,结果从轴在减速过程中剧烈抖动,标签全贴歪了。后来我才意识到,凸轮表必须考虑主轴的加减速过程,不能只按稳态来设计。嗯,这里要注意,主从同步不是静态的,是动态的。

电子凸轮表的定义:一张“地图”搞定一切

好了,重头戏来了。电子凸轮表到底是什么?

电子凸轮表,本质上是一张查找表。它把主轴的位置(相位)映射到从轴的位置。这张表通常包含一系列的点,每个点由两个值组成:

  • 主轴位置(输入)
  • 从轴位置(输出)

控制器运行时,实时读取主轴位置,然后查这张表,找到对应的从轴位置,再控制从轴电机运动到那个位置。

举个例子,一个简单的凸轮表可能长这样:

主轴位置(度) 从轴位置(毫米)
0 0
90 50
180 100
270 50
360 0

这张表的意思是:主轴转到0度时,从轴在0毫米位置;主轴转到90度时,从轴走到50毫米;主轴转到180度时,从轴走到100毫米……以此类推。

但实际应用中,点与点之间是插值的。控制器不会只在这几个离散点上输出位置,而是通过线性插值或样条插值,计算出中间任意位置的值。所以,凸轮表里的点越多,曲线越平滑,运动也越柔和。

关键点:电子凸轮表不是死的。你可以动态切换不同的凸轮表,实现不同的运动曲线。比如一个工位需要快速运动,就换一张高速表;需要精确定位,就换一张低速高精度表。这就是电子凸轮比机械凸轮灵活的地方。

我个人习惯,在定义凸轮表时,至少保证每个周期有128个以上的点。点数太少,插值出来的曲线会有“棱角”,运动不平滑;点数太多,又占用控制器内存。128到256个点,是个不错的平衡点。

最后,用一段简单的伪代码来总结电子凸轮的工作流程:

// 电子凸轮主循环
while (系统运行) {
    // 1. 读取主轴当前位置
    master_pos = read_master_encoder();
    
    // 2. 计算主轴在当前周期内的相位
    phase = master_pos % CYCLE_LENGTH;
    
    // 3. 查凸轮表,得到从轴目标位置
    slave_target = cam_table_lookup(phase);
    
    // 4. 控制从轴运动到目标位置
    move_slave_to(slave_target);
    
    // 5. 等待下一个控制周期
    wait_for_next_cycle();
}

你看,核心逻辑就这么几行。但真正让系统跑得稳、跑得准的,是凸轮表的设计和插值算法的选择。这些咱们后面章节再细聊。