ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于雷诺方程的滑动轴承油膜压力分布数值求解与Python实现

基于雷诺方程的滑动轴承油膜压力分布数值求解与Python实现 简介这是一份基于Reynolds方程求解油膜轴承压力分布的MATLAB计算仿真程序面向机械工程、流体润滑领域的研究人员与工程师可用于分析滑动轴承在不同负荷、转速及润滑油黏度下的油膜压力与膜厚变化规律。压缩包内共1个文件即m脚本文件整体仅2KB代码结构清晰便于直接运行与二次开发适合正在学习流体动压润滑理论或进行轴承设计的用户参考。目前已有186人学习下载。程序实现了Reynolds方程的数值离散与求解涵盖轴承几何参数输入、边界条件处理、油膜厚度计算、压力场求解以及结果可视化等模块能够帮助读者理解有限差分法在润滑问题中的实际应用。通过运行该程序可以直观获得轴承内压力分布与油膜厚度分布曲线进而评估轴承的承载能力、稳定性和摩擦特性为轴承结构优化与故障诊断提供量化依据。1. 轴承油膜压力分布为什么是滑动轴承设计的核心命题一台高速旋转机械的转子能不能稳定运行很大程度取决于径向滑动轴承里那层几十微米厚的油膜。拿到类似reynoldsyoumo.zip这样以 oil bearing 与压力分布为主题的压缩包里面通常是一套基于雷诺方程求解油膜压力场的程序或数据集——这不是某个特定软件的任务而是一类需要自己动手实现的计算问题。油膜压力分布直接决定了轴承的承载力、动刚度、阻尼以及失稳转速无论是设计新轴承还是做轴承故障诊断第一件事都是把压力场算出来。接下来的内容沿「方程推导 → 最小可运行代码 → 参数标定 → 性能计算」这条主线展开把从雷诺方程到压力分布再到轴承寿命预测的完整链路跑通。2. Reynolds 方程的推导与有限差分离散油膜压力场的支配方程2.1 从 N-S 方程到 Reynolds 方程三组关键的简化假设完整描述油膜流动的是 Navier-Stokes 方程但在滑动轴承的楔形间隙中油膜厚度方向径向的尺寸只有几十微米而周向和轴向尺寸是毫米到厘米量级。这个量级差异让方程可以大幅度简化。工程上常用的推导路径是直接写出稳态、等温、不可压缩层流条件下的 Reynolds 方程∂/∂x(h³/η · ∂p/∂x) ∂/∂z(h³/η · ∂p/∂z) 6U · ∂h/∂x其中 x 为周向坐标z 为轴向坐标h(x) 为油膜厚度分布η 为润滑油动力粘度U 为轴颈表面线速度p 为油膜压力。右边这一项是楔形效应Couette 项的来源它表明压力梯度是由油膜厚度沿周向的收缩造成的只要间隙是收敛的就会产生正压力。推导过程中省略了三个通常会被教材一笔带过的假设一是忽略惯性力与体积力只保留粘性力与压力梯度平衡二是油膜厚度方向上的压力恒定即 ∂p/∂y 0三是流体为牛顿流体且粘度在计算域内为常数。对于大多数矿物油润滑的滑动轴承在中等载荷和转速范围内这三个假设都成立但如果你面对的是高速重载、或使用了含聚合物添加剂的非牛顿润滑油第一和第三个假设会失效那时直接用 Reynolds 方程会有系统性偏差。2.2 无量纲化与膜厚方程偏心率的几何约束求解前要把方程无量纲化。取周向角度 θ x/R轴向无量纲坐标 λ 2z/L膜厚 h C(1 εcosθ)其中 C 为半径间隙ε 为偏心率。无量纲压力 P p·C²/(6ηUR)无量纲 Reynolds 方程变为∂/∂θ(H³ · ∂P/∂θ) (R/L)² · ∂/∂λ(H³ · ∂P/∂λ) ∂H/∂θ这里 H 1 εcosθ。长径比 L/D 通过系数 (R/L)² 进入方程它决定了压力场的二维程度。L/D 趋近于无穷时是无限长轴承短轴承假设的相反极端此时轴向压力梯度项为零方程退化为一维而 L/D 小于 0.5 时通常可以采用短轴承近似直接忽略周向压力扩散项。判断用哪种模型不是你说了算而是看你计算出的压力场在轴向是否出现明显的抛物线分布——如果轴向压力剖面接近抛物线短轴承近似合理否则必须解完整二维方程。这也是很多用reynoldsyoumo.zip中现成代码的人最先犯错的地方直接用短轴承公式却不检查几何参数是否满足适用条件。2.3 有限差分离散中心差分与边界点的处理对完整二维方程常用有限差分法FDM在均匀网格上离散。周向网格节点数 Nx轴向节点数 Nz步长 Δθ 2π/(Nx-1)Δλ 2/(Nz-1)。压力和膜厚都存储在节点上。对于压力梯度项采用中心差分∂/∂θ(H³ · ∂P/∂θ) ≈ [H³_{i1/2}(P_{i1,j}-P_{i,j}) - H³_{i-1/2}(P_{i,j}-P_{i-1,j})] / Δθ²其中界面上的膜厚 H³_{i1/2} 用相邻节点的算术平均来近似。需要注意膜厚 h 是已知几何量但油膜破裂区的膜厚不是由几何方程直接给出的它需要在迭代中依据压力值动态调整这就是后面要讲的 Reynolds 边界条件。要强调的不是差分公式本身而是对流项右边 ∂H/∂θ的方向性。从数学形式上看∂H/∂θ 实际上描述了压力生成的物理机制收敛间隙产生压力发散间隙消耗压力。当用迭代法求解时在发散间隙区域如果边界条件处理不当迭代会产生负压振荡。我一般做法是在涡动区域把中心差分切换为迎风差分但滑动轴承问题里更稳妥的方式是直接采用逐点迭代并在每轮迭代后强制 p ≥ 0。上面的差分格式要真正跑起来还需要一套逐点迭代的骨架。先给出一个不包含边界处理的裸离散矩阵片段让读者先理解迭代骨架。下面这段 Python 代码展示 SOR 迭代中单点更新的核心计算完整可运行版本在下一章给出。import numpy as np Nx, Nz 181, 41 # 周向、轴向网格数 theta np.linspace(0, 2*np.pi, Nx) lam np.linspace(-1, 1, Nz) eps, L, D, C 0.7, 0.2, 0.1, 50e-6 R D / 2 # 无量纲膜厚 H 1.0 eps * np.cos(theta) # 形状: (Nx,) # 界面膜厚立方相邻节点算术平均 H3_face 0.5 * (H[:-1]**3 H[1:]**3) H3_plus np.concatenate((H3_face, [H[-1]**3])) # 右界面 i1/2 H3_minus np.concatenate(([H[0]**3], H3_face)) # 左界面 i-1/2 # 几何系数: (R/L)^2决定轴向压力扩散强度 beta (R / L) ** 2 # 网格步长 dth 2*np.pi / (Nx-1) dlm 2.0 / (Nz-1) omega 1.5 # SOR 松弛因子 # 压力场初始化 P np.zeros((Nx, Nz)) # 单点 SOR 更新伪代码循环体省略边界处理 # for i in range(1, Nx-1): # for j in range(1, Nz-1): # aE H3_plus[i] / dth**2 # aW H3_minus[i] / dth**2 # aN beta * H[i]**3 / dlm**2 # aS beta * H[i]**3 / dlm**2 # b (H[i1] - H[i-1]) / (2*dth) # P[i,j] (1-omega)*P[i,j] omega * (aE*P[i1,j] aW*P[i-1,j] # aN*P[i,j1] aS*P[i,j-1] # - b) / (aEaWaNaS)逻辑说明这段代码先把无量纲膜厚 H 沿周向离散并用相邻节点的算术平均构造左右界面上的膜厚立方。H3_plus[i] 对应节点 i 右侧界面 i1/2H3_minus[i] 对应左侧界面 i-1/2周向周期边界通过左右两端拼接实现。beta 项来自轴向坐标的压缩比直接由轴承长径比决定会在迭代主循环中作用于轴向差分项。松弛因子 omega 先取 1.5是 Gauss-Seidel 与 SOR 的经验启动值下一章会说明如何加速收敛。这段代码的作用不只是演示初始化它决定了离散方程每个系数项的具体大小。一个常见的错误是忘记把 beta 乘到轴向扩散项上导致压力场轴向形状完全错误。很多从 github 拿到的reynoldsyoumo.zip类代码包里都有这个坑——改了长径比但忘记同步修改 beta计算结果看起来挺像那么回事实际上承载力差了一倍还多。2.4 边界条件Sommerfeld、Gümbel 与 Reynolds 空穴边界边界条件的选择直接影响压力分布的形状。滑动轴承油膜压力求解中主要有三种边界条件差异集中在负压区发散间隙的处理上边界条件负压处理方式承载力偏差相对 Reynolds实现难度Sommerfeld保留负压全周域压力周期连续偏高 15% - 25%低Gümbel负压节点直接置零偏低 10% - 20%最低Reynolds在 p ∂p/∂θ 0 处油膜破裂基准中Sommerfeld 边界在数学上最简单允许负压存在但实际润滑油难以承受拉应力Gümbel 边界把负压区直接置零实现只需在迭代后加一行P np.maximum(P, 0)因此工程上大量快速估算都在用Reynolds 边界认为油膜在发散区破裂同时满足压力为零和压力梯度为零才是破裂边界需要迭代中动态搜索破裂位置计算量最大但物理上最合理。做轴承设计选型时用 Gümbel 边界得到的承载力偏小偏于保守但做转子动力学稳定性分析时负压区的动压效应会影响油膜刚度此时必须用 Reynolds 边界或更严格的质量守恒模型如 JFO 理论。在最小可复现代码中先用 Gümbel 边界简化是最常见做法但若要处理轴承故障诊断中的亚同步振动特征这种简化会丢掉油膜破裂区的动特性信息。3. 用 Python 跑通油膜压力分布求解的最小代码3.1 参数输入与网格独立性检验这里给出一个完整可运行的脚本求解一个长径比 L/D 0.5、偏心率 ε 0.6 的径向滑动轴承油膜压力分布。轴承直径 D 100 mm、半径间隙 C 50 μm、转速 3000 rpm、润滑油粘度 0.02 Pa·s。几何参数先用表格列出便于对照检查参数符号数值单位轴承直径D100mm轴承宽度L50mm半径间隙C50μm偏心率ε0.6-转速n3000rpm动力粘度η0.02Pa·s长径比L/D0.5-import numpy as np import matplotlib.pyplot as plt # ---- 几何与工况 ---- D 0.100 # 轴承直径 [m] L 0.050 # 轴承宽度 [m] C 50e-6 # 半径间隙 [m] eps 0.6 # 偏心率 [-] n_rpm 3000 # 转速 [rpm] eta 0.02 # 动力粘度 [Pa·s] R D / 2 omega 2 * np.pi * n_rpm / 60 # 角速度 [rad/s] U omega * R # 轴颈表面线速度 [m/s] beta (R / L) ** 2 # 长径比系数 # ---- 网格 ---- Nx, Nz 181, 41 # 周向、轴向节点数 theta np.linspace(0, 2*np.pi, Nx) lam np.linspace(-1, 1, Nz) dth 2*np.pi / (Nx - 1) dlm 2.0 / (Nz - 1) # ---- 无量纲膜厚与界面膜厚 ---- H 1.0 eps * np.cos(theta) H3_face 0.5 * (H[:-1]**3 H[1:]**3) H3_plus np.concatenate((H3_face, [H[-1]**3])) H3_minus np.concatenate(([H[0]**3], H3_face)) # ---- SOR 迭代 ---- P np.zeros((Nx, Nz)) omega 1.5 max_iter 20000 tol 1e-7 for it in range(max_iter): P_old P.copy() for i in range(1, Nx-1): for j in range(1, Nz-1): aE H3_plus[i] / dth**2 aW H3_minus[i] / dth**2 aN beta * H[i]**3 / dlm**2 aS beta * H[i]**3 / dlm**2 b (H[i1] - H[i-1]) / (2*dth) # 楔形项中心差分 P[i,j] (1-omega)*P[i,j] omega * (aE*P[i1,j] aW*P[i-1,j] aN*P[i,j1] aS*P[i,j-1] - b) / (aEaWaNaS) # 周向周期边界 P[0,:] P[-2,:] P[-1,:] P[1,:] # Gümbel 边界: 负压置零 P np.maximum(P, 0) # 残差 res np.max(np.abs(P - P_old)) if res tol: break # ---- 量纲恢复与展示 ---- p_dim 6 * eta * U * R / C**2 * P # 单位: Pa plt.contourf(theta*180/np.pi, lam, p_dim.T/1e6, levels30, cmapjet) plt.xlabel(circumferential angle [deg]) plt.ylabel(axial coordinate [-]) plt.colorbar(labelpressure [MPa]) plt.title(oil film pressure distribution (eps0.6)) plt.savefig(pressure_field.png, dpi150) print(fiterations: {it1}, residual: {res:.2e}) print(fpeak pressure: {p_dim.max()/1e6:.2f} MPa)这段代码的迭代主循环用的是逐点 SOR。系数 aE、aW、aN、aS 分别对应四个方向的扩散系数b 是楔形项离散结果。无量纲方程中楔形项是 ∂H/∂θ在均匀网格上用中心差分 (H[i1] - H[i-1])/(2dth) 得到精度为二阶对网格敏感度较低。松弛因子 omega1.5 在 181×41 网格上通常能在几百步内收敛如果增大到 300×300 以上的网格建议降到 1.3 以下否则高频误差衰减慢。3.2 迭代顺序与边界更新的常见实现细节主循环里必须注意三个细节。第一个是周向周期边界要在每一步迭代后立即更新而且不能用P[0,:]P[-1,:]这种直接赋等值的方式否则会在 0 点人为引入一个恒等边界层正确做法是把 P[0] 同步为 P[-2]即真实物理上离 0 点最近的上游节点。第二个是负压置零的时机在 SOR 逐点更新过程中直接做置零会影响收敛路径我一般只在整个一遍扫描完成后统一用 np.maximum 处理这样每轮迭代等价于在负压区施加了一个投影算子数学上可以证明它不破坏迭代的收敛性。第三个是残差定义如果只用最大节点压力差做判据在压力极大值区域附近会提前退出更稳妥的做法同时监测全局归一化残差 ||P-P_old||_∞ / ||P_old||_∞但工程上取前者效率更高最终压力场差别在 0.1% 以内。用上面的参数跑完峰值压力大约在 2.1 MPa 到 2.6 MPa 之间最大压力出现在最小膜厚位置上游约 30 到 40 度的位置。如果读者复现时发现峰值明显不在此区间优先检查粘度单位Pa·s 不是 mPa·s、转速换算rpm 要乘 2π/60以及膜厚公式中用的是半径间隙还是直径间隙。这三个是使用reynoldsyoumo.zip类代码包复现时最容易踩的坑。4. 偏心率、长径比与松弛因子压力场计算的关键参数和收敛排错4.1 偏心率对轴承油膜压力峰值与位置的影响偏心率 ε 是油膜压力分布最敏感的参数。ε 0 时轴颈与轴承同心膜厚沿周向恒定楔形项恒为零压力场为零随着 ε 增大最小膜厚 h_min C(1-ε) 减小峰值压力近似按 1/(1-ε)² 量级增长。下表给出同一轴承在 3000 rpm、L/D0.5 下的计算结果使用 Reynolds 边界条件偏心率 ε峰值压力 (MPa)峰值角度 (度)承载力 (kN)0.30.521522.80.51.261406.10.73.0412814.70.911.811352.3注意峰值角度的定义是从最大膜厚位置即 θ0算起压力峰值并不在最小膜厚位置θ180°而是在其上游这与楔形效应的物理机理一致。偏心率超过 0.8 后压力分布的局部梯度极大需要加密周向网格在 181 节点下 ε0.9 的压力峰会出现轻微过冲推荐把 Nx 提升到 361 并用非均匀网格在最小膜厚区域加密。4.2 长径比与网格密度的匹配原则长径比 L/D 决定了轴向压力梯度项的权重 beta (R/L)²。L/D 越小beta 越大压力分布在轴向越接近抛物线形状此时需要足够的轴向节点来分辨。经验规则是 Nz 至少取 L/D 的 80 倍以上例如 L/D0.25 时 Nz 至少 20L/D1.0 时 Nz 至少 80。但 Nz 过大会导致 SOR 迭代的谱半径逼近 1收敛速度显著下降。一个实用的方案是用逐次网格加密做网格无关性验证先 91×21 算一遍加密到 181×41再加密到 361×81观察峰值压力和承载力的变化如果两次加密之间变化小于 1%就采用最粗网格。# 网格无关性验证的自动化脚本部分 cases [(91, 21), (181, 41), (361, 81)] for Nx_i, Nz_i in cases: P, it, res solve_bearing(Nx_i, Nz_i, eps0.7) W integrate_pressure(P) # 自定义积分函数 print(f{Nx_i}x{Nz_i}: W{W:.3f} kN, iters{it})这段代码把第 3 章的求解过程封装为 solve_bearing(Nx, Nz, eps)返回压力场、迭代次数与残差integrate_pressure 将压力场沿轴向和周向积分得到承载力。实际运行中从 91×21 到 181×41承载力变化大约 3% 到 5%再从 181×41 到 361×81 变化应小于 1%。如果第二步变化仍然超过 2%先检查边界条件是否在加密后引入了新的震荡特别是 Reynolds 空穴边界与网格的交互作用。4.3 松弛因子 omega 与迭代发散的处理SOR 松弛因子的最优值理论上是 omega_opt 2/(1sqrt(1-ρ_J))其中 ρ_J 是 Jacobi 迭代矩阵的谱半径实际中不必精确求谱半径。经验法则是网格数越多最优 omega 越接近 2长径比越大轴向耦合越强omega 需要越低。一个在工程上有效的自适应策略是先试 1.3如果残差曲线前 50 步内没有单调下降说明 omega 偏高改为 1.1 或 1.0即 Gauss-Seidel重跑。发散时的现象通常有两种。第一种是残差整体上升但不出现 NaN原因是 omega 超过最优值太多迭代矩阵谱半径大于 1这时把 omega 降到 1.0 一定可以收敛Gauss-Seidel 对正定矩阵理论收敛不必怀疑离散本身。第二种是局部出现 NaN通常是初始膜厚为零引起的除零错误或负压置零逻辑放在了系数计算之前导致 H³ 为零。对于 ε 接近 1 的工况最小膜厚接近零必须在系数计算前对 H³ 加一个下限阈值如 max(H³, 1e-6)避免单点系数爆炸。提示第一次迭代发散时先把 omega 降回 1.0 重跑。不要一上来就改网格或边界条件那是浪费时间的排查路径。4.4 常见复现失败现象与快速定位压力场出现棋盘式震荡差分式的来源是界面膜厚用了算术平均而压力梯度用中心差分两者不匹配改用调和平均或在界面处做线性插值可消除。峰值压力在迭代中左右漂移周向网格太粗或周期边界更新方式错误把 Nx 加倍后看漂移是否消失即可定位。计算出的承载力是个位数牛顿量级远小于预期检查是否漏乘 etaUR/C² 的量纲恢复系数这个系数对于 50μm 间隙的轴承通常达到 1e6 量级漏掉就是百万倍误差。轴向压力剖面不对称检查 lam 方向网格端点是否落在轴承端部z±L/2端部压力必须为 0不能用诺依曼边界替代狄利克雷边界否则轴向流量不守恒。5. 从压力场到轴承寿命预测承载力、Sommerfeld 数与故障特征提取5.1 压力场积分承载力与姿态角有了压力分布后第一步是沿轴向和周向积分得到油膜合力。无量纲承载力 W ∫∫ P·n dA其中 n 是油膜压力作用方向的单位向量实际计算中通常把压力分解为沿偏心线方向径向与垂直偏心线方向切向两个分量。姿态角 φ arctan(W_t/W_r) 是轴颈中心连线与载荷方向的夹角它是最小膜厚位置与实际载荷方向之间的偏差角直接决定轴承稳定性。姿态角过大意味着油膜切向力占比高轴承容易发生涡动失稳。5.2 Sommerfeld 数与轴承寿命预测Sommerfeld 数 S η·n·D·L/W · (D/(2C))² 是无量纲轴承特性数把工况、几何和载荷压缩成一个参数。S 数越小轴承越接近重载状态最小膜厚越小轴承寿命预测中与磨损相关的风险越高。对于给定的润滑油和材料S 数与轴承寿命之间存在实验标定曲线在做轴承寿命预测时常用的做法是先由实测工况算出 S 数再与厂家提供的极限 S 数曲线对比。这里 S 数是一个桥梁——从压力分布算出的承载力最终被映射到寿命预测的 S 数上这也是为什么轴承故障诊断资料里总会反复出现先算压力分布这个步骤。5.3 用压力分布特征做轴承故障诊断在轴承故障诊断机理中压力分布的形状是早期故障的敏感特征。例如轴瓦磨损后偏心率下降压力峰值位置会向最大膜厚方向偏移供油堵塞或粘度下降会影响压力场的幅值而转子不对中会在压力场中引入 2 倍频分量。从压力场提取特征的方法很直接把周向压力分布做傅里叶分解取 1 阶和 2 阶谐波的幅值比作为诊断特征。以下代码片段演示如何从压力场中提取故障特征。# 取中间轴向截面的周向压力分布并分解 p_mid p_dim[:, Nz//2] # 无量纲或量纲均可 p_fft np.fft.rfft(p_mid - p_mid.mean()) amp_1 np.abs(p_fft[1]) / len(p_mid) # 1 阶分量幅值 amp_2 np.abs(p_fft[2]) / len(p_mid) # 2 阶分量幅值 ratio amp_2 / (amp_1 1e-12) print(f2f/1f ratio for condition monitoring: {ratio:.3f})正常工况下该比值通常小于 0.05转子不对中或轴瓦局部磨损初期比值会明显升高到 0.1 以上。需要注意的是单次计算结果不能直接作为诊断结论压力分布计算依赖的粘度、间隙等参数在真实机器中会随温度变化需要在同一工况下建立基准值后再比较变化趋势。作为验证可以用改变偏心率或加入 2 阶膜厚扰动来模拟故障然后观察 ratio 的响应是否单调这是校验特征有效性最直接的做法。本文还有配套的精品资源点击获取
返回列表