一根弹簧的价值不在它长什么样,在于你能多快把它改成另一个样子。
一、开篇:弹簧是最典型的“重复劳动”
弹簧这东西,看着简单,画起来恶心。
一根普通的压缩弹簧,手画的路子是:画一条螺旋线 → 两端切平 → 加支撑圈 → 扫描线径。画一根十分钟,不算慢。
问题出在改的时候。
客户说“高度从 80 改成 100”,你得重新算圈数、重新画螺旋、重新切平。改完发现“线径也要从 2 改成 2.5”,刚才那套再来一遍。如果还是变径弹簧——大端直径和小端直径不一样——那螺旋线都不是等径的,手画基本等于重做。
一根弹簧,七个尺寸决定一切:
| 参数 | 含义 | 示例值 |
|---|---|---|
H | 弹簧高度 | 80 |
N | 弹簧圈数 | 10 |
D | 弹簧线径 | 2 |
D_0 | 弹簧大端直径 | 30 |
D_1 | 弹簧小端直径 | 20 |
N_0 | 弹簧大端支撑圈数 | 2 |
N_1 | 弹簧小端支撑圈数 | 3 |
七个数字,决定一根弹簧。 那为什么要用手画?这七个数字应该直接变成模型的输入。
这篇就是把这七个数字,变成一个改完自动重生成的参数化模型。
二、先想清楚:这根弹簧由哪三段组成
动手之前先拆几何。一根带支撑圈的变径弹簧,沿着高度方向其实是三段:
| 段 | 几何特征 | 半径 | 螺距 |
|---|---|---|---|
| 大端支撑圈 | 等半径密绕 | 恒定 D_0/2 | = 线径 D,圈与圈相贴 |
| 变径主体 | 半径线性过渡 | 从 D_0/2 到 D_1/2 | 由总高减去两端撑圈决定 |
| 小端支撑圈 | 等半径密绕 | 恒定 D_1/2 | = 线径 D,圈与圈相贴 |
支撑圈为什么螺距等于线径? 因为支撑圈是“并紧”的——弹簧两端要磨平当支撑面,那一小段是死圈,圈与圈挨着。挨着的最小间距就是线径本身。所以它的总高 = 圈数 × 线径。
拆成三段之后,每段都是一条可以用公式写出来的空间曲线。Creo 里正好有个功能叫「来自方程的曲线」。
三、第一步:用 Creo「程序」把参数暴露出来
Creo 有个被严重低估的功能:Pro/PROGRAM(中文界面里叫「程序」)。它不是写代码,是给模型开一个“参数入口”。
先用默认模板新建一个零件:

新建零件,用默认模板就行——我们要的是一个干净的坐标系。
然后在「工具」选项卡里找到「程序」:

工具 → 程序。它的官方说明是「查看模型参数和设计步骤,或对它们进行编辑」。
点进去,菜单管理器里选「编辑设计」:

程序 → 编辑设计。Creo 会打开一个 .pls 文本文件。
打开的 .pls 文件长这样,里面已经有 INPUT 和 END INPUT 两个空壳:

INPUT / END INPUT 之间就是留给你的参数声明区。
在这两行之间,把七个参数写进去:

七个参数,每个都带一句中文提示——以后改参数时,这些提示就是输入框的标题。
| |
保存、关闭,然后重新生成。Creo 会走进「得到输入」这一步:

程序 → 得到输入 → 输入。选「输入」,Creo 才会逐项弹框问你;选「当前值」则沿用上次的值。
选「输入」,它会按你声明的顺序,一个一个弹输入框:

输入框的标题就是你写在 .pls 里的中文提示,后面接数值。
到这一步,模型里的 H、N、D、D_0、D_1、N_0、N_1 就已经是可以外部驱动的变量了。接下来要做的,是让几何真的听它们的话。
四、第二步:三段柱坐标方程曲线
4.1 为什么用柱坐标
弹簧是绕着轴转的。用笛卡尔坐标 (x, y, z) 写螺旋线,你得写 cos、sin;用柱坐标 (r, theta, z),螺旋线就是三行大白话:
r—— 离轴多远(半径)theta—— 转到哪个角度z—— 爬到多高
Creo 的「来自方程的曲线」支持柱坐标,而且自带一个参数 t,范围 0 → 1。把 t 理解成“走完这条曲线的进度条”,所有公式就都好写了。
入口在「模型」选项卡的曲线下拉里:

曲线 → 来自方程的曲线。坐标系类型记得改成柱坐标。
4.2 大端支撑圈

大端支撑圈:半径恒定,角度扫 N_0 圈,高度升 D*N_0。
| |
逐行读:
r = D_0/2—— 半径恒定,就是大端半径。这是“等径”的含义。theta = t*360*N_0——t从 0 走到 1,角度扫过N_0个整圈。z = D*N_0*t—— 高度从 0 升到D*N_0。总高 ÷ 圈数 = D,也就是螺距等于线径,圈与圈正好相贴。
这三行就是“并紧的支撑圈”的完整数学描述。
4.3 变径主体
主体是最容易写错的一段。

主体:半径线性过渡,角度扫 N 圈,高度接在大端之上、给小端留出位置。
| |
r = (D_0 + (D_1-D_0)*t)/2——t=0时r = D_0/2,t=1时r = D_1/2,中间线性过渡。这就是“变径”。theta = t*N*360—— 主体扫N圈。z = D*N_0 + (H - D*N_0 - D*N_1)*t—— 起点接在大端顶部D*N_0,终点停在H - D*N_1,把最上面D*N_1的高度留给小端支撑圈。
⚠️ 这里我踩过一个坑,值得单独说。
我第一版写的是
r = D_0 + (D_1-D_0)*t——忘了除 2。大端那一段我用的是
D_0/2(半径),主体这里却直接拿直径当半径用了。结果主体比大端整整胖一倍,两段根本接不上。教训:凡是用
D开头的参数,先问一句“我现在要的是直径还是半径”。 后来改成(D_0 + (D_1-D_0)*t)/2,把整个表达式括起来再除 2,就不会漏。
4.4 小端支撑圈

前两段已经生成。注意模型树:曲线1、曲线2,现在要建曲线3。

小端:半径恒定 D_1/2,但起始角度要用 MOD 折算。
| |
前两行好懂,关键是 theta 里那个 MOD(N*360, 360)。
它是干什么的? 主体扫了 N 圈,累计角度是 N*360。小端必须从主体停下来的那个方位角接着转,否则会出现一个角度错位——曲线在接缝处“错位一格”。
- 如果
N是整数,比如N=10,那么MOD(3600,360) = 0,小端从 0° 开始,正好接上。 - 如果
N是10.5这种带半圈的,MOD(3780,360) = 180,小端就必须从 180° 起步。
MOD 把“累计转了多少度”折算回“现在停在哪个方位”。写参数化模型时,凡是涉及角度累积的地方,都要做这一步折算。
五、踩坑:三段曲线接缝不自然
三段曲线都建出来了,拼在一起一看——不对。

红圈里就是问题:两段曲线的接缝处有明显的折角,像被人掰了一下。
现象: 每段曲线单独看都是光滑的,但接缝处出现一个折角。
原因: 三段方程各自只保证了端点位置重合——数学上叫 C0 连续。但它们没有保证端点处的切线方向一致——C1 连续。
大端是等半径密绕,螺旋升角是固定的;主体半径在变,螺旋升角也在变。两段在接缝处的位置虽然对上了,但“前进方向”不一样,视觉上就是一个折角。
其实方程也能解决这个问题。 把半径改成 t² 缓入——r = D_0/2 + (D_1-D_0)/2*t²——接缝处的 dr/dθ 就等于 0,自然和大端的固定升角接上。
但我最后没走这条路:缓入段要多长得反复试,而且换一种弹簧(带锥度的、两端圈数不等的)就得重新推一遍公式。几何补线更省事,也更通用——它根本不关心方程长什么样。
解法走的是几何路线:建点 → 修剪 → 补线。
5.1 在接缝两侧各建一个基准点

基准 → 点,在曲线上建点。偏移 3.00,「实际值」模式——意思是离曲线端点 3mm。
在接缝两侧各建一个点,各自距离接缝 3mm。这两个点是后面补线的两个端点。
5.2 剪掉折角
用「修剪」把三段曲线各自在基准点处切断。模型树里会多出 修剪1~修剪4——两处接缝、每处剪两条,一共四刀。
剪完之后,原来带折角的那一小段就没了,留出一段空隙。
5.3 用「通过点的曲线」补上

曲线 → 通过点的曲线。补线用的是样条,不是直线。

点1、点2 选刚才那两个基准点,类型选「样条」。Creo 会让样条在端点处与相邻几何相切,接缝就顺了。

切线处理前:两处接缝各框出一对基准点,红框里那段带折角的曲线就是待替换的区间。

切线处理后,同一视角。接缝处的过渡顺了——差别很细微,要放大到接缝处才看得出来。
核心思路:与其和方程较劲,不如在折角处开一个 6mm 的口子,用一段样条把它缝上。 样条会在两个端点自动贴合相邻曲线,比硬凑公式省事得多。
六、拼接与扫描
两处接缝都用同样的方法处理完,再检查一下整条曲线的连续性:

整条路径拼完之后,用「移动」把它和大端对齐——绿色的是最终路径。
然后扫描成实体。扫描的截面是一个直径 D 的圆:

画截面圆的时候,Creo 会弹框问「是否添加此关系 - sd3 = D?」——选「是」。这一步把线径也绑到了参数上。
这个弹框是整件事的关键一步。 sd3 是截面圆的直径尺寸,把它和 D 关联之后,线径就跟着参数走了。少了这一步,前面七个参数白做。
七、验证:改一个参数
模型建完了,来验证它到底是不是活的。
重新生成 → 程序 → 得到输入 → 输入,然后把 D_0 和 D_1 改成一样的值:

INPUT SEL 里勾选 D_0 和 D_1,改成同一个值。

改完数字,整根弹簧自动重生成。两端并紧的支撑圈、中间张开的变径段,全部跟着参数走。

当 D_0 = D_1,变径段退化成等径段——同一套方程,自动覆盖了等径弹簧这种情况。
注意最后这张图的意义: D_0 = D_1 时,主体方程里的 (D_1-D_0) 变成 0,r 退化成常数。一套方程同时覆盖了变径弹簧和等径弹簧,不需要建两个模型。
这就是参数化的价值——不是省了画图的时间,是省了“每种规格建一个模型”的维护成本。
八、小结:这套方法还能用在哪
把这次的套路抽象出来:
| 步骤 | 做什么 | 关键点 |
|---|---|---|
| 1 | 拆几何 | 把复杂形状拆成几段能用公式描述的基本段 |
| 2 | 开参数 | 程序 → INPUT 段声明变量,中文提示写清楚 |
| 3 | 写方程 | 柱坐标 + t 进度条,注意直径/半径别搞混 |
| 4 | 修接缝 | 建点 → 修剪 → 通过点的样条补线 |
| 5 | 绑尺寸 | 扫描截面用关系 sd_n = 参数 绑定 |
| 6 | 验证 | 改参数重新生成,看极端情况会不会崩 |
这套方法不只能做弹簧。 凡是满足这两个条件的零件,都可以照搬:
- 形状能用参数方程描述(螺旋、渐开线、摆线、凸轮轮廓……)
- 尺寸之间有明确的数学关系(齿数决定分度圆、圈数决定高度……)
齿轮、蜗杆、波形弹簧、异形螺旋管——思路完全一样。
至于“三段曲线接缝”这个坑,其实是个通用规律:只要你是分段拼一条曲线,接缝处就一定会出现 C1 不连续。 与其在方程上死磕,不如老老实实建点、修剪、补样条。这是我在这件事上学到的最实用的一招。
源码模型:
000_free_spring.prt(Creo Parametric 9.0) 初始参数:H=80, N=10, D=2, D_0=30, D_1=20, N_0=2, N_1=3文件最终保存状态:D_0与D_1都已改成20—— 就是第七节那次验证的结果

湘公网安备43042402000045号