4. 参数化齿轮建模与齿数变化批量仿真

任务定义

本案例创建一个参数化直齿圆柱齿轮模型,以齿数 z、模数 m、压力角 α、齿宽 b 为输入参数,自动生成渐开线齿廓。随后批量改变齿数(z = 18, 25, 32)与模数(m = 2, 3),生成 6 组不同齿轮副,对每组齿轮副执行啮合仿真,提取齿面接触应力峰值,对比分析齿数变化对接触应力的影响。

参数化齿轮几何模型

齿轮渐开线齿廓由基圆展开生成。对于齿数 z、模数 m、压力角 α 的标准直齿轮:分度圆直径 d = m·z,基圆直径 db = d·cos α,齿顶圆直径 da = d + 2m,齿根圆直径 df = d − 2.5m。渐开线上任一点的压力角 θ 满足:

r(θ) = r<sub>b</sub> / cos(θ),θ ∈ [0, θ<sub>max</sub>]

其中 θmax = arccos(rb/ra)。齿廓由基圆两侧对称渐开线构成,齿根处用圆弧过渡。以下 Python 代码生成单个齿轮的二维截面顶点坐标,并输出为 DXF 格式供仿真前处理使用。

import numpy as np
import math

def gear_profile(z, m, alpha_deg=20.0):
    """生成直齿轮渐开线齿廓顶点坐标(笛卡尔系,单位mm)"""
    alpha = math.radians(alpha_deg)
    r = m * z / 2.0                # 分度圆半径
    rb = r * math.cos(alpha)       # 基圆半径
    ra = r + m                     # 齿顶圆半径
    rf = r - 1.25 * m              # 齿根圆半径
    # 齿厚半角(分度圆上)
    inv_a = math.tan(alpha) - alpha
    half_thick = math.pi / (2*z) + inv_a
    # 渐开线展角范围
    theta_max = math.acos(rb / ra)
    n_pts = 30                     # 每侧渐开线采样点数
    thetas = np.linspace(0, theta_max, n_pts)
    # 右侧渐开线(从基圆到齿顶)
    right_side = []
    for th in thetas:
        rr = rb / math.cos(th)
        # 极角:齿中心线偏置 + 渐开线展开角
        phi = half_thick + th - math.atan2(math.sin(th), math.cos(th))  # 简化:实际为 th - inv
        # 标准渐开线极角公式
        phi = half_thick + th - (math.tan(th) - th) if th > 0 else half_thick
        x = rr * math.cos(phi)
        y = rr * math.sin(phi)
        right_side.append((x, y))
    # 左侧渐开线(镜像)
    left_side = [(-x, y) for (x, y) in reversed(right_side)]
    # 齿根圆弧(连接左右渐开线底部)
    root_pts = 8
    root_arc = []
    for i in range(root_pts + 1):
        ang = math.pi + (math.pi / root_pts) * i  # 从π到2π
        root_arc.append((rf * math.cos(ang), rf * math.sin(ang)))
    # 组装单个齿(从齿根左侧→渐开线→齿顶→右侧→齿根)
    tooth = left_side + [(ra*math.cos(0), ra*math.sin(0))] + right_side + root_arc
    # 旋转复制z个齿
    all_pts = []
    for k in range(z):
        rot = 2 * math.pi * k / z
        c, s = math.cos(rot), math.sin(rot)
        for (x, y) in tooth:
            all_pts.append((x*c - y*s, x*s + y*c))
    return np.array(all_pts)

# 示例:生成 z=20, m=2 的齿轮轮廓并保存
pts = gear_profile(20, 2.0)
with open('gear_z20_m2.dxf', 'w') as f:
    f.write('0\nSECTION\n2\nHEADER\n0\nENDSEC\n0\nSECTION\n2\nENTITIES\n')
    for (x, y) in pts:
        f.write(f'0\nLINE\n8\n0\n10\n{x:.6f}\n20\n{y:.6f}\n11\n{x:.6f}\n21\n{y:.6f}\n')
    f.write('0\nENDSEC\n0\nEOF\n')
print(f'生成齿轮 z=20, m=2,顶点数: {len(pts)}')

该代码输出每个齿的完整闭合轮廓点列。实际仿真前处理时,将相邻顶点用直线连接形成闭合截面,拉伸 b = 20 mm 获得三维实体。齿轮副装配时,主动轮与从动轮中心距 a = m(z1+z2)/2,从动轮旋转 180°/z2 以保证正确啮合相位。

批量仿真与接触应力分析

以下脚本对 6 组参数组合执行啮合仿真。每组仿真中,主动轮以恒定角速度 ω = 10 rad/s 旋转,从动轮施加 50 N·m 阻力矩。材料设为结构钢(E=210 GPa, ν=0.3),接触算法采用增广拉格朗日法。仿真持续 0.2 s(覆盖约 3 个齿啮合周期),提取齿面最大接触应力。

import subprocess, csv, os

# 参数组合:齿数对 (z1, z2),模数 m
combos = [
    (18, 18, 2.0), (25, 25, 2.0), (32, 32, 2.0),
    (18, 18, 3.0), (25, 25, 3.0), (32, 32, 3.0)
]

results = []
for z1, z2, m in combos:
    # 生成两个齿轮的几何文件
    pts1 = gear_profile(z1, m)
    pts2 = gear_profile(z2, m)
    # 此处调用有限元求解器(如 CalculiX/ANSYS 批处理)
    # 实际命令因求解器而异,以下为示意接口
    inp_file = f'gear_{z1}_{m}.inp'
    with open(inp_file, 'w') as f:
        f.write(f'*NODE\n')  # 实际需写入节点/单元/接触定义
        # ... 完整有限元模型由前处理脚本生成(略)
    # 运行求解(示意)
    # subprocess.run(['ccx', inp_file], check=True)
    # 读取结果文件中的最大接触应力
    # s_max = parse_result(f'gear_{z1}_{m}.dat')
    # results.append((z1, m, s_max))

# 由于未实际运行求解器,此处不输出伪造的应力数值
print('批量仿真任务已提交,共', len(combos), '组参数组合')
参数化齿轮批量仿真流程 参数输入 齿数 z = 18/25/32 模数 m = 2/3 压力角 α = 20° 几何生成 渐开线齿廓计算 DXF/INP 输出 三维拉伸 装配与啮合 中心距 a=m(z₁+z₂)/2 从动轮相位调整 接触对定义 仿真求解 ω=10 rad/s T=50 N·m t=0.2s 结果提取 齿面最大接触应力 σ_max 对比分析 σ_max 随 z、m 变化趋势 批量循环 ×6 组参数 (18,2) (25,2) (32,2) (18,3) (25,3) (32,3)

验证方法与判定标准

几何验证:运行 gear_profile() 生成 z=20, m=2 的轮廓,检查齿顶圆直径实测为 44 mm(= (20+2)×2),齿根圆直径 35 mm(= (20−2.5)×2),相邻齿距角 18°。将 DXF 导入 CAD 软件测量分度圆齿厚,理论值为 πm/2 = 3.1416 mm。

仿真验证:每组参数仿真完成后,提取接触应力云图中齿面节点的最大等效应力。判定标准:

  • 接触应力峰值出现在啮合线附近,且随齿数 z 增大而减小(齿数多则重合度大,载荷分布更均匀);
  • 模数 m 从 2 增至 3 时,接触应力显著下降(齿廓曲率半径增大,赫兹接触应力降低);
  • 所有模型求解收敛,无穿透或负体积错误。

将 6 组 σ_max 值绘制成以 z 为横轴、m 为分组的折线图,观察两条曲线均呈下降趋势,且 m=3 曲线整体低于 m=2 曲线,即验证参数化批量仿真流程正确。