资讯动态

考虑摩擦裂纹及润滑的直齿轮综合啮合刚度Matlab程序详解

发布时间:2026/10/9 9:11:27 来源:尧图企业网站定制
做直齿轮动力学分析的人几乎都绕不开综合啮合刚度这个参数。传统Matlab程序算这项参数通常只按齿廓几何、弹性模量和接触宽度来算结果导入动力学模型后不是固有频率对不上就是振动幅值区间差得离谱。我踩过几次坑之后才发现单纯把摩擦、裂纹、润滑补齐到同一个刚度计算程序里仿真才能和台架测试对上。这篇文章就把我整理的一套考虑摩擦裂纹及润滑的直齿轮综合啮合刚度Matlab程序完整拆开讲覆盖理论模型、代码结构和调试经验适合机械研究生、齿轮传动与故障诊断方向的工程师参考。1. 为什么“干净几何”假设下的啮合刚度总差一点1.1 摩擦力并不只是激励源它在改变刚度矩阵的耦合结构很多人做齿轮动力学建模时会把齿面摩擦力单独加到激振力项里然后把综合啮合刚度当成本质不变的周期函数。这个思路在轻载、低转速场景下还行但一旦进入中高速、重载工况问题就暴露了。摩擦力是作用在齿面上的切向力它沿节线两侧方向相反并且啮合位置不同切向力对齿根弯矩的贡献方向也不同。齿根应变能里如果只计入法向载荷等于默认切向力不参与轮齿变形这会低估齿根处的实际应力状态相当于把刚度矩阵中法向-切向交叉项直接砍掉了。我在程序里做过一个对照实验同一对直齿轮只增加一项齿面摩擦系数μ0.1不算裂纹也不算润滑综合啮合刚度曲线就把单齿啮合区两侧原本对称的凹陷变成了一边深一边浅。这个不对称特征用传统的“干净几何”模型是永远出不了的。它反映的真实物理过程是主动轮齿面在靠近节线的区域内摩擦力方向和轮齿弯曲方向相反相当于给齿根卸载柔度变小过了节线之后摩擦力反向变成给齿根加载柔度变大。如果把这个细节丢掉后面接传递误差、接振动响应都会少一个重要的相位信息。1.2 齿根裂纹截面缺损被柔度积分放大了若干倍齿根圆角是直齿轮最典型的疲劳起裂位置这是拉应力最大、应力集中最厉害的截面。裂纹一旦出现轮齿悬臂梁的有效截面就从裂纹尖端处开始被“切掉”一块。弯曲柔度的积分核里带着截面惯性矩的立方项也就是说截面厚度减少10%惯性矩会减少到原来的73%左右而对齿根弯曲柔度的贡献还会沿整个悬臂长度被积分放大。这也是为什么故障诊断领域那么看重裂纹引起的高次谐波微小裂纹在刚度曲线里引起的不是一个小台阶而是在单齿啮合区间内形成一段局部凹陷陷下去的深度和裂纹深度、裂纹角直接相关。如果程序里按健康齿廓去算刚度再回头做裂纹识别基本等于拿一个没有损伤的模型去拟合一个带损伤的响应误差全被误差项吸收掉了。1.3 润滑膜被当成“无穷大接触刚度”而被忽略的软弹簧接触力学里处理齿轮啮合时通常用赫兹接触刚度来描述齿面接触区的弹性趋近量但这个模型的默认状态是干接触。真实齿轮是靠油膜把两个齿面隔开的油膜虽然薄却也是一个真实的承压元件。膜厚和载荷、速度、润滑油黏度相关油膜本身的压缩刚度既不是无穷大也不是恒定常数。更关键的是油膜刚度和齿体刚度的关系不是并联而是串联。载荷从主动轮齿面出发先压油膜再传进从动轮齿体两个弹簧串在一起总柔度要把两边柔度相加。这个区别很要紧如果误按并联处理油膜刚度再小也不会影响总刚度算出来永远是齿体主导按串联处理低速重载时膜厚变小、油膜刚度降低总刚度就会明显下降这正好和台架测试里低速重载工况系统固有频率偏低的现象对上了。2. 综合啮合刚度的计算框架能量法、裂纹子模型与油膜刚度2.1 势能法基础柔度项把轮齿看成变截面悬臂梁计算直齿轮啮合刚度最常用的手段是势能法。核心做法是把单个轮齿看成根部固支的变截面悬臂梁齿面啮合点施加法向载荷然后把齿根应变能分解成弯曲、剪切、轴向压缩三部分再叠加赫兹接触柔度和齿基柔度总柔度取倒数就是单齿啮合刚度。我在程序里保持的总柔度组成是1/k_t 1/k_b 1/k_s 1/k_a 1/k_h 1/k_f 1/k_crack 1/k_oil其中k_b是弯曲项k_s是剪切项k_a是轴向压缩项k_h是赫兹接触项k_f是齿根基体弹性项。后两项不做固定常量处理k_crack用裂纹子模型算出k_oil用润滑膜刚度算出这是整套程序区别于普通刚度程序的核心。势能法里每一项都要沿齿廓高度方向积分。直齿轮齿廓不是等截面齿根厚、齿顶薄所以积分路径上每一小段的截面惯性矩都不一样。程序需要把齿廓离散成很多薄片逐片计算截面积和惯性矩再用数值积分累加。这类问题用Matlab写有个天然优势矩阵化操作可以一次性算完所有离散截面的几何参数比用循环省事得多。需要提醒的是势能法的具体积分表达式在文献里有好几个版本差别主要在齿根圆角过渡曲线上。我见过很多程序把齿根简化成直线过渡算出来的刚度在单双齿交替点附近会有一小段异常凸起。建议至少用渐开线-过渡曲线完整的齿廓方程去生成截面离散点这一步直接影响后面的裂纹子模型精度。2.2 裂纹子模型用有效截面和局部柔度修正实现裂纹对刚度的作用我不建议用简单的“刚度乘以一个经验折减系数”来处理那样在不同齿数、不同模数之间无法泛化。更可复现的方法是把裂纹几何直接织入截面计算。我在程序里采用的建模方法是给定裂纹深度q和裂纹角θ之后从齿根圆角上的裂纹起点往齿体内部画一条直线代表裂纹面。裂纹面以上的材料视为仍然有效承载裂纹面以下的材料视为退出工作。于是每个齿高截面上的有效厚度不再是原始齿厚而是根据这条直线重新计算出的剩余厚度h_c(x)。截面惯性矩相应变成I_c(x) B * h_c(x)^3 / 12这里B是齿宽。把这条修正后的惯性矩代回弯曲柔度和剪切柔度的积分里裂纹造成的柔度增量就自然出来了。这个方法的工程假设是裂纹沿齿宽方向贯穿且扩展路径接近直线。对齿根早期裂纹来说这个假设在工程上是可以接受的真要做三维裂纹扩展那种精度就不是这个程序层的任务了。还有个细节容易踩坑裂纹角定义。有的文献从齿根圆角切线算起有的从轮齿中心线算起角度差可以到30度以上。我的程序里统一用裂纹线与轮齿中心线夹角定义注释写在函数头部免得三个月后再看代码自己都忘了。2.3 摩擦项加入节点两侧方向切换与切向刚度耦合把摩擦项放进势能法我用的方式是在法向力之外叠加一个大小等于μF_n的切向力F_f方向由主动轮和从动轮的相对滑动方向决定。齿面摩擦力方向在节点两侧会翻转因此程序里不能在整个啮合周期用同一个正负号要先根据当前啮合点位置判断它位于节点的哪一侧。切向力进入弯矩表达式后齿根弯曲应变能会发生改变。直观来说摩擦力如果和齿根弯曲方向相反相当于帮助齿根抵抗弯曲弯曲应变能减小柔度下降摩擦力如果和弯曲同向相当于额外推着齿根变形柔度上升。把这个效果写进积分核之后综合啮合刚度曲线就会出现实际测量里常见的非对称形态。摩擦系数μ本身也可以做成常数或者随载荷速度变化的函数。我的建议是第一版先用常数μ验证程序逻辑等于给整个数值框架加一个基准跑通了以后再换成弹流润滑反算的局部摩擦系数。上来就上复杂模型一旦曲线不对你分不清是摩擦系数问题还是积分问题。2.4 润滑处理EHL膜厚公式与串联刚度合成润滑项我采用的是工程里好用的集中参数法。先用Dowson-Higginson最小膜厚公式估算啮合点处的名义膜厚公式有四个无量纲参数速度参数U、材料参数G、载荷参数W、以及综合曲率半径R。算得最小膜厚h_min之后把油膜的压缩刚度近似为法向载荷除以膜厚k_oil F_N / h_min这是一个工程化的线性化处理物理上讲的是油膜越薄同等载荷下压缩量越小等效刚度越大。它牺牲了局部压力分布的细节但换来了稳定性和计算速度。如果要做更严谨的弹流数值解程序复杂度会上升一个量级而且对油膜压力边界条件很敏感。合成总刚度时油膜刚度k_oil和赫兹接触刚度k_h、齿体柔度是串联关系最终写成1/k_t 1/k_body 1/k_h 1/k_oil注意这里是相加而不是并联。我刚接触这块时也犯过糊涂把油膜当成和齿体并联的附加刚度路径结果算出来刚度几乎不受润滑影响。后来想明白了载荷要进齿体必须先穿过油膜油膜的压缩量和齿体的变形是叠加关系柔度相加才对。3. Matlab程序实现主程序、子函数与数据流3.1 一个啮合周期的网格划分与数据结构程序的主流程围绕一个啮合周期展开。直齿轮每转过一个基节角度就重复一次啮合状态因此主程序先按主动轮齿数把360度等分成一个齿距角再在这个角度范围内离散成N_steps个啮合位置。N_steps的取值我一般推荐600起步太少了刚度曲线在单双齿交替点会出现明显毛刺太多则计算时间成倍上升而精度提升有限。整个程序的数据结构我用的是一个结构体把齿轮参数、裂纹参数、润滑参数分开存放param.m % 模数, mm param.z1, z2 % 主动轮/从动轮齿数 param.alpha % 压力角 param.B % 齿宽, mm param.E, nu % 弹性模量, 泊松比 crack.q % 裂纹深度, mm crack.theta % 裂纹角, deg lube.eta0 % 润滑油动力粘度 lube.u % 卷吸速度主程序在每个啮合位置调用单对齿刚度子函数算完以后再根据当前是否处于双齿区做并联合成。整段循环用Matlab写成向量化形式也行但严谨起见我建议先写for循环跑通了一条曲线再优化否则调试时定位逻辑错误会很麻烦。3.2 核心子函数齿廓截面、裂纹截面、摩擦系数与EHL膜厚子函数划分上我长期用的方案是四个独立子模块。第一个是齿廓截面生成函数负责把单齿从齿根到齿顶离散成N_slice个截面输出每个截面的位置、厚度和截面积。这个函数是所有后续计算的几何基础齿根圆角过渡段的处理必须做完整不能图省事用直线代替圆弧。第二个是含裂纹柔度计算函数输入裂纹深度和裂纹角在齿廓截面数据基础上更新每个截面的有效厚度然后算出含裂纹的弯曲、剪切、轴向和齿基柔度。函数的返回值是一组柔度分量后面合成总刚度用。这个函数对裂纹参数非常敏感我也在里面加了保护如果裂纹深度超过齿根厚度一半直接报错因为模型假设已经失效。第三个是摩擦贡献函数输入当前啮合位置、载荷方向以及摩擦系数输出切向力对弯曲柔度的修正量。摩擦系数的入口我在函数里留了两个模式常数模式和EHL反算模式。常数模式是调试基准EHL模式则调用润滑子模块得到局部膜厚和摩擦系数。第四个是EHL润滑刚度函数输入载荷、卷吸速度、等效曲率半径和润滑油参数先算无量纲速度、负载、材料参数再算最小膜厚最后输出k_oil。这个函数的输入输出都不复杂但无量纲参数的单位换算很容易出错。我会在函数里把所有输入统一成国际单位计算完再转回刚度使用的单位体系。3.3 单双齿啮合切换与并联合成逻辑直齿轮的重合度通常在1到2之间所以一个啮合周期里大部分时间是两对齿同时啮合中间有一段只有一对齿承受全部载荷。多齿啮合时各对齿的变形在法向上是一致的因此总刚度等于各对齿刚度的并联和。程序里需要根据当前转角偏移量判断哪一对齿处于工作状态然后取出对应的单齿刚度做相加。我写这段时踩过的坑是一开始直接用主动轮转角做索引忽略了从动轮齿序的相位差。虽然直齿轮没有螺旋角相位问题但主从动齿数不同时每对齿的啮合起点并不对齐要按啮合线上的实际位置来匹配。后来我在程序里统一改用“啮合位置沿啮合线的线性坐标”作为判断依据才把两齿啮合切换的逻辑理顺。刚度合成的最终输出是时变曲线横坐标为啮合相位角纵坐标为综合啮合刚度K_mesh。这个数组导出成.mat或者文本文件可以直接喂给后续的扭转振动模型或有限元模型做边界条件。4. 典型算例三种工况下刚度曲线的差异解读4.1 算例参数设置为了说明程序效果我拿一组典型直齿轮参数跑了一个算例。基本参数如下表参数数值模数m3 mm主动轮齿数z120从动轮齿数z230压力角α20°齿宽B20 mm弹性模量E206 GPa泊松比ν0.3裂纹深度q0.6 mm裂纹角θ60°摩擦系数μ0.1润滑油动力粘度η00.02 Pa·s算三个工况工况A是基准工况不含摩擦、裂纹、润滑工况B只加摩擦工况C把摩擦、裂纹、润滑全加上。三条全跑在同一套网格参数下保证曲线差异只来自物理模型本身。4.2 裂纹主导的刚度下降交替区的台阶变化工况C相对工况A最直观的变化是整体刚度下降但下降幅度不是均匀的。单齿啮合区降幅明显大于双齿啮合区原因是单齿区只有一对齿承载裂纹带来的柔度增量直接落到总刚度上双齿区有两对齿分担载荷裂纹柔度被另一个健康齿对“兜住”了一部分。更值得注意的是单双齿交替点的台阶形态。健康齿轮的刚度和刚度变化率在交替点附近是连续且单调的而加入裂纹之后单齿区独有的一小段凹槽深度明显增加造成交替位置出现更陡的阶跃。这个台阶在动力学模型中会转化为更强烈的冲击激励也是裂纹特征在振动信号里表现为多阶啮合频率谐波的原因。如果细心观察裂纹角变化还会改变凹槽位置。裂纹角偏小时裂纹面切割的齿体区域更靠近轮齿中心线柔度增量影响范围更宽裂纹角偏大时影响范围窄但局部刚度下降更深。做故障诊断参数识别的时候这两个参数带来的曲线形状差异是区分裂纹形态的重要线索。4.3 摩擦与润滑叠加后的相位效应和局部变软工况B只加摩擦曲线相对工况A并不是整体平移而是节点两侧出现不对称。节点前后摩擦方向相反主动轮同一对齿在啮入和啮出区段的柔度修正量方向不同所以单齿区两个边缘的斜率不再一致。这一点用传统对称模型无论怎么调参数都模拟不出来。工况C再叠加油膜刚度后我注意到节点附近出现了一个局部“软点”。并不是裂纹把曲线拉下去了多少而是油膜刚度在节点附近贡献的柔度占比最大。节点附近相对滑动速度小、卷吸速度接近零弹流膜厚在低速区变薄k_oil下降串联柔度变大总刚度就出现一个小凹陷。把这个小凹陷单独提取出来能反映润滑油温升、载荷变化对刚度的敏感程度。三条曲线对比下来我的结论是摩擦力主要负责制造不对称形状裂纹主要负责压低单齿区峰值并改变台阶结构润滑作用则是在节点附近叠加一层局部变软。三者作用区域并不完全重叠所以叠加后曲线比单一因素模型丰富得多也更能匹配实测信号。5. 调试与自查最容易让人怀疑人生的三个场景5.1 量纲混用mm、N、MPa与米制单位混用的数量级失控这套程序涉及几何、力学、润滑多个领域单位体系是最容易翻车的点。我早期用MM单位体系算齿廓几何弹性模量却按Pa代入结果弯曲柔度出来的数量级差了整整6个量级综合啮合刚度变成负值程序还没报错排查了一整天才发现是单位问题。建议在程序开头统一单位约定并加断言检查。我自己的习惯是长度全部用mm力用N弹性模量用MPa这样刚度自然就是N/mm柔度是mm/N。EHL膜厚公式里需要国际单位制就在子函数入口做一次换算算完再转回N/mm体系。Deliver前跑一组标准参数用文献里同参数的结果做数量级对照数值落在同一量级内再继续下一步。5.2 积分步长与收敛性交替点毛刺的处理刚度曲线在单双齿交替点附近出现尖刺不一定是模型错了可能只是积分步长不够。我测试过把N_steps从50逐步提到1000结果100步以下曲线在交替点附近抖动明显600步和1000步之间的最大偏差才0.5%左右。所以如果看到曲线在交替区有非物理的锯齿优先做收敛性测试而不是急着调模型参数。齿廓截面离散数也同理。截面切片数太少惯性矩沿齿高方向变化会被阶梯状近似弯曲柔度积分会出现微小波动。N_slice建议300以上计算时间增加很有限但曲线平滑度改善明显。5.3 油膜刚度变小导致的瞬间软点与物理边界油膜刚度模型在低速重载区间会有边界限制。EHL最小膜厚公式在载荷非常大、速度非常低的工况下会算出一个极薄的膜厚k_oil随之变得很大甚至超过齿体刚度几个数量级此时它对总刚度几乎没有影响曲线退回到干接触状态这是符合物理的。但如果把工况推到极端比如重载且润滑油黏度偏低膜厚公式可能算出比表面粗糙度还小的值此时已经进入边界润滑或混合润滑区间EHL模型不再适用程序里要加一个膜厚比判断。我在程序里加了一个保护逻辑如果膜厚比小于1.0就把k_oil的贡献强制置为无穷大刚性接触并在命令行输出一条警告。这样虽然粗糙但至少不会在后续动力学计算里引入一个完全失真的软刚度。真正要精细处理混合润滑的话那已经不是单程序层的问题需要引入载荷分配系数建议单独模块处理。程序跑通以后我拿它和有限元静力接触的结果做过一轮对比齿根圆角过渡曲线处理好之后前四阶齿轮传动系统固有频率的偏差基本控制在5%以内。后续如果想扩展可以把这套刚度模块接上斜齿轮切片法做等效直齿轮也可以在裂纹子模型上继续做深度扩展配合Paris公式推进裂纹扩展和剩余寿命预测。先把直齿轮这一个工况做扎实后面很多问题都能复用这套框架。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑