☰
滚珠丝杠Adams仿真建模三大错误与修正方法
2026/10/3 10:35:03 网站建设 项目流程

说个让我印象很深的事:去年帮朋友调试一个滚珠丝杠进给机构的Adams模型,他卡了两个星期,要么一仿真就发散,要么结果里丝杠转了半天螺母纹丝不动。远程打开他的模型,我只看了不到十分钟就找到了问题——他把SolidWorks里带螺纹特征的丝杠和螺母原封不动导进去,然后用Solid-Solid接触把二十几颗滚珠全建了出来,接触刚度拍脑袋填了个数,约束也是一股脑堆上去。这类问题我见得太多,做滚珠丝杠仿真遇到困难,九成不是软件不行,而是建模这一步就把自己坑了。

这篇文章不谈虚的,直接拆解我这些年调试滚珠丝杠Adams模型时最常撞见的三个建模错误:接触模型与参数乱建、运动副规划过约束、预紧力与摩擦参数草率处理。每一个我都会讲清楚问题根源、排查思路、正确做法和验证方法,最后再用一个修正案例走完整条链路。适合正在做丝杠进给系统、直线驱动机构或者任何用滚珠丝杠做传动的多体动力学仿真的朋友。

1. 滚珠接触模型乱建:发散和穿透的源头在这一步就埋下了

1.1 先用哪套接触策略,决定了后面是跑得动还是跑不动

Adams里给滚珠丝杠建立接触关系,大致有三条路可以走:全套Solid-Solid接触、Point-Segment接触、以及用等效力元素替代滚珠群。我见过最多的错误,是零基础用户把三维模型直接导入,在每颗滚珠与丝杠滚道、螺母滚道之间全部建立Solid-Solid接触。听起来最接近物理实况,但跑起来之后就知道了:Solid-Solid每步都要计算两个三维实体之间的穿透体积和接触力,再加上丝杠和螺母模型里自带的圆角、螺旋沟槽网格,整个系统的自由度被撑到几十万,求解器每走一步都要做大量接触搜索,步长被压到微秒级别,结果是要么一晚上都跑不完,要么接触力尖峰直接让积分器发疯。

正确的思路是:能用简化接触表达的,绝不用全实体接触。滚珠丝杠的滚珠与滚道本质上是球体与凹圆弧沟槽的接触,接触点是一个很小的区域,受力方向基本指向沟槽法线方向。这种情况下,用Point-Segment接触来模拟滚珠与滚道的相互作用是工程上最常见的方案——把滚珠简化成质量点(Sphere),滚道简化成中心路径上的曲线段(Segment),接触力根据点和线之间的距离以及相对速度来计算,计算量比Solid-Solid小一两个数量级,而且数值稳定性好得多。

如果你的仿真目标不是研究滚珠本身的应力分布,而只是要得到系统的动力学响应——比如螺母位移、驱动力矩、振动特性——甚至可以把滚珠群整体替换为零质量或者小质量的SPRING力元,通过定义轴向刚度和阻尼来模拟滚珠群的传力特性。这个做法在整机动力学分析里尤其好用,整台机床进给系统的Adams模型里如果滚珠丝杠副用几根弹簧代表,仿真速度会快到你不敢相信。

选型原则我总结成一句话:研究滚珠应力用有限元,研究机构动力学用接触或者力元,千万别拿多体动力学去硬扛全实体接触。

1.2 接触参数不是拍脑袋填的:一个估算例子和一组经验值

第二个高频错误,是接触模型选对了,但参数乱填。很多人看到Adams的Impact接触参数框就头大,Stiffness、Force Exponent、Damping、Penetration Depth分别填多少,全是凭感觉,填完跑出来接触力几千牛,实际工况只有几百牛,他自己还浑然不觉。

接触刚度最好先用赫兹理论估算一个合理量级。拿常见的直径20mm、导程10mm的滚珠丝杠来说,滚珠直径一般取6mm左右,材料是轴承钢,弹性模量E=206GPa,泊松比ν=0.3。球面与凹槽面的点接触等效刚度计算公式是:

K = (4/3) × E* × sqrt(R*)

其中E是等效弹性模量,R是综合曲率半径。代入钢材参数:

E* = E / [2×(1-ν²)] ≈ 206000 / [2×(1-0.3²)] ≈ 113186 MPa

滚珠与滚道的接触点在凹槽中,综合曲率半径R的数量级和滚珠半径相当或者略小,取R≈0.5mm的话:

K ≈ (4/3) × 113186 × sqrt(0.5) ≈ 106700 N/mm

这个量级约在1e5 N/mm区间。注意这里有个很重要的细节:Adams里的Stiffness单位是力/长度(N/mm),而很多人填的接触刚度是从网上抄来的1e3甚至1e6,差了上百倍。刚度填小了,接触像软弹簧,滚珠会陷进滚道里,仿真结果穿模;刚度填大了,接触变成刚性墙,求解器步长被迫缩小,计算极慢,还容易出现接触振动。

在Adams中用Impact函数建模接触时,通常这样设置:

参数建议取值说明
Stiffness与赫兹估算值同量级,1e4~1e6 N/mm根据滚珠直径与材料换算,不能随意取
Force Exponent1.5金属球面接触赫兹理论的经验指数
Damping刚度的0.1%~1%太大容易造成接触回弹抖动
Penetration Depth0.01~0.05 mm越大接触越“软”,取太小容易发散

阻尼这块特别容易翻车。我见过有人把Damping填到和Stiffness一个数量级,接触一碰上去就被狠狠拽住,仿真结果里出现了夸张的反弹尖峰,看起来像弹珠而不是钢球。阻尼的本质是碰撞能量的耗散,对金属材料接触而言,取刚度的千分之一到百分之一就已经足够表现能量损失,绝大多数情况下取50~100 N·s/mm这个量级比较稳。

这里还要多嘴提醒一句:Damping和Penetration Depth是联动的。Adams的Impact接触中,阻尼力在穿透深度达到设定的Penetration Depth时才完全生效,如果穿透深度填得太小,而接触力已经很大,阻尼来不及起作用,接触就会表现出高频振荡。这也是很多人调了半天接触参数仍然发散的隐藏原因。

2. 运动副规划不当:系统动不动就过约束,我排查到半夜才发现问题

2.1 滚珠丝杠的运动学本质:一个被忽视的螺旋自由度

第二个让90%的人栽跟头的错误,是运动副规划。拿最常见的“丝杠转、螺母走”模型来说,很多人会顺手搭出这么一套:大地与丝杠之间加旋转副,螺母与大地之间加移动副,然后在丝杠与螺母之间再加一个圆柱副。逻辑上看起来没错,丝杠转,螺母平移,两者之间还得有轴向的相对滑动,所以加了圆柱副。但是这一套模型放进Adams里一跑,要么提示invalid joint,要么数值发飘,原因很简单:你多加了约束,过约束了。

要理清楚这个问题,得先把滚珠丝杠的运动本质盘明白。滚珠丝杠副的核心运动关系是:丝杠绕自身轴线旋转,螺母沿丝杠轴线方向平移,两者之间在螺旋升角的方向上存在耦合关系——丝杠转一圈,螺母往前走一个导程。假如用导程L、丝杠旋转角度φ来描述,螺母轴向位移s满足s = φ × L / (2π)。这不是一个独立的自由度关系,而是螺旋副(Screw)的约束方程。

问题在于,很多人不知道Adams里的Screw副有两个隐藏特性:第一,Screw副必须和一个旋转副或圆柱副配对使用,它本身不是独立可用的运动副;第二,Screw副一旦加入,系统会把“旋转导致移动”的自由度耦合关系锁死,此时再额外添加移动副或者圆柱副去限制螺母的轴向位置,自由度就被重复限制了。

正确的运动副规划应该这么做:大地与丝杠之间建旋转副,允许丝杠绕轴线自由旋转;丝杠与螺母之间建Screw副,规定导程值,让旋转与移动通过螺旋关系耦合;螺母与大地之间建移动副,限制螺母只能沿丝杠轴向滑动。这样整个系统是1个转动自由度驱动,螺母的轴向位移由螺旋副自动推出来,每个构件都被约束得恰到好处,不存在冗余自由度。

2.2 从报错到定位问题的三步排查:我怎么判断是过约束还是数值发散

这里分享一套我常用的排查链路。当模型跑不动,第一反应不要往积分器上甩锅,而是先做一个静态的自由度检查。Adams里默认可以在信息窗口里通过Model Verify直接看到机构的自由度数和冗余约束数。如果系统提示有冗余约束(Redundancy),那大概率是运动副叠加出了问题,在求解时会出现数值奇异。

排查的第一步,是把所有运动副“锁止”逐一排查:在Simulation Control里把驱动副外的其他运动副分别停用,跑一下静态平衡,看看哪种状态下模型能收敛,哪种状态报错。如果停用某个运动副之后模型忽然正常了,那恭喜,你找到了冲突源头。

第二步是看报错类型。Adams发散时常见的报错有:积分器步长趋近于零、接触力尖峰、Jacobi矩阵奇异。如果报错信息里出现singular或者redundant,九成是运动副规划问题;如果报错表现为步长持续缩小、但数值没有明确的奇异报错,那更像是接触刚度或阻尼参数问题。这两个方向解决路径完全不同,如果上来就调求解器反而会越调越乱。

第三步,也是很多人容易漏掉的,是检查支撑轴承处的约束。滚珠丝杠的两端支撑可能采用固定-固定、固定-支承、固定-自由等不同方式,支撑端的轴承会产生额外的转动或移动约束。有人建模时既在支撑端加了旋转副,又在丝杠端加了轴向定位约束,两个约束都限制轴向移动,于是过约束就出现了。对支撑端的处理,要严格按照轴承的实际自由度释放情况设置,不要想当然地“全锁死”。

提示:排查过约束时,在Adams的Joint Browser里把所有运动副列出来,逐一标注它消除了哪几个自由度,然后统计一下,同一自由度被消除两次以上的基本就是过约束嫌疑对象。这个方法虽然原始,但非常有效。

3. 预紧力与摩擦参数草率处理:结果看起来像模像样,实际完全不可信

3.1 预紧力有两种加进模型的方式,关键是要让初始状态受力平衡

第三个建模错误不在几何上,也不在运动副上,而在力参数上。滚珠丝杠为了消除反向间隙、提高轴向刚度,实际产品几乎都带预紧。常见的预紧方式有双螺母垫片预紧、两套滚珠错位预紧、增大滚珠直径预紧等等。仿真模型里如果完全忽略预紧,出来的结果有一个典型特征:反向换向时有明显的空行程,轴向刚度很低,系统固有频率偏低,和实验数据对不上。

在Adams里施加预紧力,大多数人第一反应是直接在螺母端加一个恒定的轴向力。这个方法能用,但不精确——真实预紧不是外力,而是通过弹性变形存储在各滚珠接触处的内力。如果你只是施加外力,系统在静平衡时还说得通,一旦丝杠开始驱动,预紧力的方向和传力路径都会发生改变,结果失真。

更贴近实际的做法有两种。一种是用Bushing力元连接双螺母模型,在Bushing的轴向刚度项中设一个初位移,相当于把两个螺母“顶开”到预紧状态,这时候Bushing产生的轴向力就等于预紧力。另一种做法更推荐:在接触参数里通过初始穿透量来反推预紧。前面算过接触刚度大约是1e5 N/mm,如果希望预紧力是800N,那么接触穿透量的初值可以按δ = F / K = 800 / 100000 = 0.008mm来设置。在Impact接触参数里填入这个初始穿透深度,Adams会在初始时刻自动计算出对应的法向接触力,这就把预紧力的物理机制真正仿真出来了。

初始穿透这个功能其实相当好用,我建议做滚珠丝杠仿真的人认真研究一下。它的好处是预紧力不是外挂的,而是通过真实的接触形变产生,丝杠转动时接触状态的变化会带动预紧力动态调整,和你实际测量到的丝杠副受力行为一致。

3.2 摩擦系数为什么不能照抄普通滑动副,以及怎么用效率反推

摩擦参数是第三个错误里最隐蔽的一个,因为它在绝大多数情况下不会导致发散报错,而是让仿真结果错得毫无知觉。我接手过的模型里,有人把滚珠丝杠副的摩擦系数填成了0.15,仿出来的结果是驱动电机扭矩大得离谱,传动效率连50%都不到,而实际滚珠丝杠传动效率普遍在90%以上。问题的根源就出在他把“滚珠的滚动摩擦”和“滑动摩擦”混为一谈了。

滚动丝杠副是滚动接触,摩擦系数通常在0.003~0.01之间,远比滑动的0.1~0.2小。仿真时如果把滚动接触的摩擦系数按滑动来填,系统等于在滚珠和滚道之间糊了一层“胶水”,滚珠滚动困难,丝杠自然带不动。这就是为什么很多人仿出来的丝杠效率只有60%,还以为是Adams的问题,其实是自己的参数偏离物理几十倍。

一个非常实用的自检方法是用效率反推。对导程为L的滚珠丝杠,电机输入扭矩T,螺母输出轴向力F,理论关系是:

T = F × L / (2π × η)

η是传动效率。反过来,如果你在Adams里加了驱动扭矩,仿真得到某个轴向力F,就可以用上面的公式反算出模型的等价效率η。如果算出来η远小于0.9,那基本可以断定摩擦参数偏大或者预紧状态不正确。我看到太多人闷头调仿真,从不做这种宏观层面的能量核算,结果在错误参数上做无用功。

在Adams的接触力设置中,预紧力的存在会影响摩擦力的计算。接触法向力越大,摩擦力也越大,而预紧力会增加法向力。所以带预紧的丝杠模型,空载状态下的阻力矩会明显高于无预紧模型,这正是真实滚珠丝杠的表现。如果你在仿真中设置了预紧,但空载阻力矩几乎为零,那就要检查接触摩擦开关是不是没有打开,或者摩擦系数设成了零。

4. 一个真实可复现的修正案例:从报错发散到正常收敛的全过程

4.1 原始模型为什么一跑就发散:三个问题叠加的典型状态

为了把上面三个错误串起来演示完整修正链路,我用一个典型的滚珠丝杠进给模型来复盘。模型参数:公称直径20mm,导程10mm,滚珠直径6mm,采用固定-支承的支撑方式,丝杠由Motion驱动,转速600rpm,螺母上带1000N的轴向负载。

原始模型的做法,就是我在开头说的那位朋友的做法:CAD模型直接导入,所有滚珠建模为实体球,丝杠与滚珠之间、滚珠与螺母之间全部用Solid-Solid接触,运动副方面丝杠与大地旋转副、螺母与大地移动副、丝杠与螺母之间又加了一个圆柱副,摩擦系数统一填0.15,预紧力没加。启动仿真后,Adams在第一步就出现步长骤降,求解器频繁重试,千分之几秒的仿真时长就要计算几个小时,最终在滚珠与滚道的接触点上出现穿透和发散。

逐项分析可以看到,这个模型三个错误全占齐了。实体接触模型让每颗滚珠的计算负担极大,运动副过约束让Jacobi矩阵接近奇异,摩擦系数设成滑动量级让系统阻力剧增。三个问题叠加在一起,发散几乎是必然的。

4.2 我按顺序做的四处修正,每一处的理由和效果

修正不是一锅端,而是按顺序逐项替换,这样才能分辨清楚每一处改动的影响。

第一处,替换接触策略。把所有实体滚珠的Solid-Solid接触删掉,重新建立Point-Segment接触。滚珠简化成六个自由度的小球体,在丝杠与螺母之间的螺旋滚道中心线路径上排列;滚道简化为接触线段。只保留必要的接触对数,原来是二十几对实体接触,现在变成二十几个点线接触,计算量明显降了一个量级。

第二处,重新规划运动副。删掉丝杠与螺母之间的多余圆柱副,换成Screw螺旋副,并正确设置导程10mm。保留大地与丝杠之间的旋转副、螺母与大地之间的移动副。系统自由度检查后,冗余约束从原来的多处变成了零。

第三处,按赫兹估算修正接触参数。对于6mm滚珠和钢质滚道,接触刚度按前面的估算取1e5 N/mm量级,Force Exponent取1.5,Damping取80 N·s/mm,Penetration Depth取0.02mm。同时把摩擦系数从0.15改到0.006,并在接触里开启库仑摩擦。

第四处,施加预紧。因为模型是单螺母结构,我这里用初始穿透量法,在接触参数中设置约0.008mm的初始穿透,让系统初始状态就有了约800N的等效预紧力。这样处理之后,模型在初始时刻就处于受力平衡状态,不会出现启动瞬间的冲击跳变。

4.3 修正后的验证结果:怎么看曲线才知道模型是可信的

修正完成后,仿真终于能顺畅跑完,但到此还没有结束。模型能不能用,要看几个关键验证点:

第二个验证点是运动学关系。丝杠转速600rpm,也就是每秒10转,导程10mm,理论轴向速度为100mm/s。仿真结果里读取螺母位移,斜率应该稳定在100mm/s。如果这个关系不对,说明Screw副或者运动副耦合出了问题,哪怕模型收敛了,结果也是错的。

第二个验证点是接触力与预紧的关系。空载运行时,各接触点的法向力应当在预紧力对应的初始值附近波动,而不会出现某一瞬间归零或者暴涨。如果接触力在跑动过程中大幅波动甚至归零,说明初始穿透参数设置不当或者接触阻尼值不合理。

第三个验证点是效率核算。在模型中测量电机端的驱动扭矩T,再测量螺母输出的轴向力F,代入效率和导程的关系式反过来算效率。修正后的模型算出来效率大约0.92~0.94,和真实滚珠丝杠的水平吻合。到这里,模型才算真正建立起来,而不是“仿真不发散就能交差”的状态。

第四个验证点也提一下:换向冲击。给丝杠施加一个正弦转速信号,让螺母来回运动,观察反向换向时的力曲线是否平滑连续、有没有因为间隙导致的突变。正确的带预紧模型,换向时接触力应当平滑过渡,不会出现明显冲击尖峰;如果换向时有力值跳变,就要检查预紧力是否没有真正参与接触传力,而是只当了一个普通外力。

最后说一个我在多次调试里总结的小习惯:做滚珠丝杠仿真,不要一上来就把目标定位在“跑通”上,先花时间把接触策略选清楚、运动副理顺、摩擦和预紧参数确认到位,这几件基础事做好,后面分析结果才值得讨论。尤其是接触刚度和摩擦系数,这两个参数直接影响效率、受力、振动特征,是整个模型里最值得花心思校准的环节。按照上面的链路排查一次,你会发现之前那些“莫名其妙”的发散问题,绝大多数在建模阶段就有迹可循。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询