第四节:电子凸轮原理——凸轮曲线定义、主从轴位置映射、凸轮表生成与加载
各位好,我是老张。今天咱们聊聊电子凸轮。说实话,我刚入行那会儿,一听到“凸轮”两个字,脑子里全是机械加工车间里那种铁疙瘩。后来做了几个项目才发现,电子凸轮这东西,说白了就是用软件模拟机械凸轮的运动规律。它比机械凸轮灵活太多了,改个曲线参数就行,不用重新车一个凸轮盘出来。
嗯,咱们这一节要讲四个核心点:凸轮曲线怎么定义、主从轴怎么映射、凸轮表怎么生成、以及怎么加载到驱动器里。我尽量用我踩过的坑来帮大家理解。
一、凸轮曲线的定义——不是随便画条线就行
电子凸轮的核心,就是一条曲线。这条曲线描述了从轴位置跟随主轴位置的关系。你想想看,主轴转一圈,从轴要走一个特定的轨迹,这个轨迹就是凸轮曲线。
我在项目里见过有人直接用直线段拼凑曲线,结果机器一跑起来,振动大得吓人。为什么?因为曲线不光滑,加速度突变,机械结构受不了。
常见的凸轮曲线类型有这么几种:
| 曲线类型 | 特点 | 适用场景 |
|---|---|---|
| 梯形曲线 | 速度有突变,加速度无限大 | 低速、对冲击不敏感的场合 |
| 修正梯形 | 加速度有限,但仍有拐点 | 中速包装机械 |
| 正弦曲线 | 速度、加速度连续,无冲击 | 高速、高精度场合 |
| 多项式曲线 | 可自定义阶数,灵活性高 | 特殊运动规律要求 |
我个人习惯,只要速度超过每分钟300转,一律用正弦曲线或者5次多项式。别问我为什么,问就是吃过亏。有一次调试一台高速贴标机,用的修正梯形,结果标签飞得到处都是。换成正弦曲线后,问题立马解决。
核心原则:凸轮曲线的二阶导数(加速度)必须连续。一阶导数(速度)可以有不连续点,但加速度绝对不能跳变。
二、主从轴位置映射——搞清楚谁跟着谁
电子凸轮里,主轴和从轴的关系不是简单的比例关系。比如主轴转一圈,从轴可能前进一段、后退一段、再停顿一段。这种映射关系,就是通过凸轮曲线来定义的。
我画了一张图,帮大家理解这个映射逻辑:
这张图里,横轴是主轴位置,纵轴是从轴位置。曲线上的每个点,都对应一个主轴位置和一个从轴位置。比如主轴走到200这个位置时,从轴应该在150这个位置。
这里有个容易搞混的地方:主轴位置不一定是角度,也可以是脉冲数、毫米、甚至时间。我见过有人把主轴设成时间轴,结果同步精度一塌糊涂。记住,主轴一定要用物理位置,不要用时间。
我的经验:主轴最好用编码器反馈的实时的位置,不要用指令位置。因为指令位置和实际位置之间有跟随误差,用指令位置做主轴,从轴会跟着抖。
三、凸轮表的生成——把曲线变成数据
曲线定义好了,怎么让驱动器知道这条曲线呢?答案是:把曲线离散化,生成一张表。这张表就是凸轮表。
凸轮表本质上是一个数组,数组的索引是主轴位置,数组的值是从轴位置。比如主轴每走1个脉冲,查一次表,得到从轴应该在哪。
生成凸轮表的步骤:
- 确定分辨率:主轴一圈分成多少份。我一般用3600份,也就是0.1度一份。分辨率太高了占用内存,太低了精度不够。
- 计算每个点的从轴位置:根据凸轮曲线公式,算出每个主轴位置对应的从轴位置。
- 平滑处理:检查相邻点的速度变化,如果变化太大,需要插值或者调整曲线参数。
- 格式转换:把数据转换成驱动器能识别的格式,通常是整数或者浮点数。
下面是一个简单的凸轮表生成代码示例,用Python写的:
# 生成正弦凸轮表
import numpy as np
# 参数设置
master_resolution = 3600 # 主轴一圈3600份
slave_stroke = 100 # 从轴行程100mm
phase_angle = 180 # 凸轮作用角度180度
# 生成凸轮表
cam_table = []
for i in range(master_resolution):
# 主轴位置归一化到0~1
master_pos = i / master_resolution
# 判断是否在作用区内
if master_pos <= phase_angle / 360:
# 归一化到0~1
t = master_pos * 360 / phase_angle
# 正弦曲线:从轴位置 = stroke * (1 - cos(pi * t)) / 2
slave_pos = slave_stroke * (1 - np.cos(np.pi * t)) / 2
else:
# 非作用区,从轴保持不动
slave_pos = slave_stroke
cam_table.append(slave_pos)
# 输出前10个点检查
print("前10个凸轮点:", cam_table[:10])
这段代码生成了一张正弦凸轮表。主轴在0到180度范围内,从轴从0走到100mm;180度到360度,从轴停在100mm不动。
注意:凸轮表的第一个点和最后一个点必须平滑衔接。如果曲线是周期性的,最后一个点的位置和速度必须等于第一个点。否则机器每转一圈就会产生一次冲击。
四、凸轮表的加载——把数据灌进驱动器
表生成了,怎么加载到驱动器里?不同品牌的驱动器方法不一样,但原理大同小异。
我常用的加载方式有三种:
- 直接写入:通过通讯总线(EtherCAT、CANopen等)把凸轮表数据写入驱动器的指定地址。这种方式灵活,但通讯时间较长。
- 文件导入:把凸轮表保存成CSV或TXT文件,通过驱动器的配置软件导入。适合批量生产,一次导入永久使用。
- 在线生成:有些高端驱动器支持在内部生成凸轮表,只需要传入曲线参数(类型、幅值、相位等)。这种方式最快,但灵活性稍差。
我曾经在一个项目里踩过坑:用直接写入方式加载凸轮表,结果通讯周期是1ms,凸轮表有3600个点,加载一次要3.6秒。机器启动时,主轴已经转了好几圈了,从轴还没跟上。后来改成文件导入,开机时一次性加载,问题解决。
加载完成后,一定要做两件事:
- 校验数据:读回凸轮表数据,和原始数据对比,确保传输没有错误。
- 试跑验证:让主轴低速转一圈,观察从轴运动是否平滑。我习惯用手轮慢慢摇主轴,同时看从轴位置反馈。
避坑指南:我曾经遇到过凸轮表加载成功,但机器一跑就报错。查了半天,发现是凸轮表的第一个点和最后一个点不连续,导致驱动器计算速度时出现无穷大。从那以后,我每次生成凸轮表都会检查首尾衔接。
好了,电子凸轮的核心内容就这些。从曲线定义到主从映射,再到表生成和加载,每一步都有讲究。你想想看,机械凸轮要改一个运动规律,得重新设计、加工、装配,至少一周时间。电子凸轮改几个参数,重新生成一张表,几分钟搞定。这就是数字化的力量。
下次调试的时候,如果遇到同步精度问题,不妨先从凸轮曲线入手检查一下。很多时候,问题就出在曲线不够平滑上。
公众号:蓝海资料掘金营,微信deep3321