基于势能原理的圆柱齿轮时变啮合刚度计算程序
计算圆柱齿轮的时变啮合刚度。该程序基于势能原理(包括弯曲能、剪切能和轴向压缩能)和赫兹接触理论。
1. 主程序:齿轮啮合刚度计算
%% 基于势能原理的圆柱齿轮时变啮合刚度计算程序
% 作者: MATLAB助手
% 功能: 计算圆柱齿轮副的时变啮合刚度
% 原理: 基于势能法(弯曲、剪切、轴向压缩能)和赫兹接触理论
% 参考: Tian X., 齿轮系统动力学 - 振动、冲击、噪声
clear; clc; close all;
%% 1. 齿轮参数输入
fprintf('========== 圆柱齿轮啮合刚度计算程序 ==========\n');
% 齿轮1参数(小齿轮)
gear1.modulus = 2; % 模数 m (mm)
gear1.teeth = 30; % 齿数 z1
gear1.pressure_angle = 20; % 压力角 α (度)
gear1.face_width = 20; % 齿宽 b (mm)
gear1.youngs_modulus = 2.06e5; % 弹性模量 E (MPa)
gear1.poisson_ratio = 0.3; % 泊松比 ν
gear1.addendum_coefficient = 1; % 齿顶高系数 ha*
gear1.clearance_coefficient = 0.25; % 顶隙系数 c*
gear1.shift_coefficient = 0; % 变位系数 x
% 齿轮2参数(大齿轮)
gear2.modulus = 2; % 模数 m (mm)
gear2.teeth = 50; % 齿数 z2
gear2.pressure_angle = 20; % 压力角 α (度)
gear2.face_width = 20; % 齿宽 b (mm)
gear2.youngs_modulus = 2.06e5; % 弹性模量 E (MPa)
gear2.poisson_ratio = 0.3; % 泊松比 ν
gear2.addendum_coefficient = 1; % 齿顶高系数 ha*
gear2.clearance_coefficient = 0.25; % 顶隙系数 c*
gear2.shift_coefficient = 0; % 变位系数 x
% 材料参数(假设两齿轮材料相同)
material.E = gear1.youngs_modulus; % MPa
material.v = gear1.poisson_ratio; % 泊松比
fprintf('齿轮参数:\n');
fprintf(' 模数 m = %.1f mm\n', gear1.modulus);
fprintf(' 齿数: z1 = %d, z2 = %d\n', gear1.teeth, gear2.teeth);
fprintf(' 压力角 α = %.1f°\n', gear1.pressure_angle);
fprintf(' 齿宽 b = %.1f mm\n', gear1.face_width);
fprintf(' 弹性模量 E = %.2e MPa\n', material.E);
fprintf(' 泊松比 ν = %.2f\n', material.v);
%% 2. 计算齿轮基本几何参数
fprintf('\n2. 计算齿轮几何参数...\n');
% 转换为弧度
alpha = deg2rad(gear1.pressure_angle); % 压力角(弧度)
% 分度圆直径
d1 = gear1.modulus * gear1.teeth; % 齿轮1分度圆直径(mm)
d2 = gear2.modulus * gear2.teeth; % 齿轮2分度圆直径(mm)
% 基圆直径
db1 = d1 * cos(alpha); % 齿轮1基圆直径(mm)
db2 = d2 * cos(alpha); % 齿轮2基圆直径(mm)
% 齿顶圆直径
da1 = d1 + 2 * gear1.modulus * (gear1.addendum_coefficient + gear1.shift_coefficient); % 齿轮1齿顶圆直径(mm)
da2 = d2 + 2 * gear2.modulus * (gear2.addendum_coefficient + gear2.shift_coefficient); % 齿轮2齿顶圆直径(mm)
% 齿根圆直径
df1 = d1 - 2 * gear1.modulus * (gear1.addendum_coefficient + gear1.clearance_coefficient - gear1.shift_coefficient); % 齿轮1齿根圆直径(mm)
df2 = d2 - 2 * gear2.modulus * (gear2.addendum_coefficient + gear2.clearance_coefficient - gear2.shift_coefficient); % 齿轮2齿根圆直径(mm)
% 中心距
a = (d1 + d2) / 2; % 标准中心距(mm)
% 啮合线长度
g_alpha = sqrt(da1^2 - db1^2) / (2 * cos(alpha)) + sqrt(da2^2 - db2^2) / (2 * cos(alpha)) - a * sin(alpha);
pb = pi * gear1.modulus * cos(alpha); % 基圆齿距
% 重合度
epsilon_alpha = g_alpha / (pi * gear1.modulus * cos(alpha));
fprintf(' 分度圆直径: d1 = %.2f mm, d2 = %.2f mm\n', d1, d2);
fprintf(' 基圆直径: db1 = %.2f mm, db2 = %.2f mm\n', db1, db2);
fprintf(' 齿顶圆直径: da1 = %.2f mm, da2 = %.2f mm\n', da1, da2);
fprintf(' 齿根圆直径: df1 = %.2f mm, df2 = %.2f mm\n', df1, df2);
fprintf(' 中心距: a = %.2f mm\n', a);
fprintf(' 啮合线长度: g_α = %.4f mm\n', g_alpha);
fprintf(' 基圆齿距: pb = %.4f mm\n', pb);
fprintf(' 端面重合度: ε_α = %.4f\n', epsilon_alpha);
%% 3. 定义计算参数
fprintf('\n3. 设置计算参数...\n');
% 啮合点采样
n_points = 100; % 沿啮合线的采样点数
theta_range = linspace(0, 2*pi, n_points); % 一个啮合周期的角度采样
% 轮齿离散化参数
n_slices = 50; % 每个齿的离散切片数
fprintf(' 啮合周期采样点数: %d\n', n_points);
fprintf(' 轮齿离散切片数: %d\n', n_slices);
%% 4. 计算单个轮齿的刚度(基于势能原理)
fprintf('\n4. 计算单个轮齿刚度(势能法)...\n');
% 计算齿轮1的单个齿刚度
fprintf(' 计算齿轮1单齿刚度...\n');
single_tooth_stiffness_1 = zeros(n_points, 1);
for i = 1:n_points
% 当前啮合点位置(从齿根到齿顶)
contact_position = (i-1)/(n_points-1); % 0:齿根, 1:齿顶
% 计算齿轮1在当前接触点的单齿刚度
single_tooth_stiffness_1(i) = calculate_single_tooth_stiffness(...
gear1, material, contact_position, n_slices);
end
% 计算齿轮2的单个齿刚度
fprintf(' 计算齿轮2单齿刚度...\n');
single_tooth_stiffness_2 = zeros(n_points, 1);
for i = 1:n_points
% 当前啮合点位置(从齿根到齿顶)
contact_position = (i-1)/(n_points-1); % 0:齿根, 1:齿顶
% 计算齿轮2在当前接触点的单齿刚度
single_tooth_stiffness_2(i) = calculate_single_tooth_stiffness(...
gear2, material, contact_position, n_slices);
end
fprintf(' 齿轮1单齿刚度范围: %.2e ~ %.2e N/mm\n', ...
min(single_tooth_stiffness_1), max(single_tooth_stiffness_1));
fprintf(' 齿轮2单齿刚度范围: %.2e ~ %.2e N/mm\n', ...
min(single_tooth_stiffness_2), max(single_tooth_stiffness_2));
%% 5. 计算赫兹接触刚度
fprintf('\n5. 计算赫兹接触刚度...\n');
% 计算综合曲率半径
rho1 = db1/2 * tan(alpha); % 齿轮1在啮合点的近似曲率半径
rho2 = db2/2 * tan(alpha); % 齿轮2在啮合点的近似曲率半径
rho_eq = (rho1 * rho2) / (rho1 + rho2); % 等效曲率半径
% 赫兹接触刚度公式: k_h = (π * E * b) / [4 * (1 - ν^2)]
hertz_stiffness = (pi * material.E * gear1.face_width) / (4 * (1 - material.v^2));
fprintf(' 齿轮1曲率半径: ρ1 = %.4f mm\n', rho1);
fprintf(' 齿轮2曲率半径: ρ2 = %.4f mm\n', rho2);
fprintf(' 等效曲率半径: ρ_eq = %.4f mm\n', rho_eq);
fprintf(' 赫兹接触刚度: k_h = %.4e N/mm\n', hertz_stiffness);
%% 6. 计算单齿对啮合刚度
fprintf('\n6. 计算单齿对啮合刚度...\n');
% 串联刚度:1/k_mesh = 1/k_gear1 + 1/k_gear2 + 1/k_hertz
single_pair_stiffness = zeros(n_points, 1);
for i = 1:n_points
k1 = single_tooth_stiffness_1(i);
k2 = single_tooth_stiffness_2(i);
kh = hertz_stiffness;
% 串联刚度计算
single_pair_stiffness(i) = 1 / (1/k1 + 1/k2 + 1/kh);
end
fprintf(' 单齿对啮合刚度范围: %.2e ~ %.2e N/mm\n', ...
min(single_pair_stiffness), max(single_pair_stiffness));
%% 7. 计算多齿对啮合刚度(考虑重合度)
fprintf('\n7. 计算时变啮合刚度(考虑重合度)...\n');
% 计算啮合刚度随时间(或转角)的变化
time_mesh_stiffness = zeros(n_points, 1);
contact_ratio = zeros(n_points, 1);
% 计算每个位置的接触齿对数
for i = 1:n_points
% 当前啮合点位置(0到1,表示从啮入到啮出)
pos_ratio = (i-1)/(n_points-1);
% 根据重合度确定接触齿对数
if epsilon_alpha < 2
% 单双齿交替啮合区
if pos_ratio < (epsilon_alpha - 1)
% 双齿啮合区
contact_ratio(i) = 2;
% 找到相邻齿的刚度(相位差一个基节)
j = mod(i + round(n_points * pb/g_alpha) - 1, n_points) + 1;
time_mesh_stiffness(i) = single_pair_stiffness(i) + single_pair_stiffness(j);
elseif pos_ratio > 1 - (epsilon_alpha - 1)
% 双齿啮合区
contact_ratio(i) = 2;
j = mod(i - round(n_points * pb/g_alpha) - 1, n_points) + 1;
time_mesh_stiffness(i) = single_pair_stiffness(i) + single_pair_stiffness(j);
else
% 单齿啮合区
contact_ratio(i) = 1;
time_mesh_stiffness(i) = single_pair_stiffness(i);
end
else
% 重合度大于2的情况(较少见)
contact_ratio(i) = floor(epsilon_alpha);
time_mesh_stiffness(i) = contact_ratio(i) * single_pair_stiffness(i);
end
end
fprintf(' 时变啮合刚度范围: %.2e ~ %.2e N/mm\n', ...
min(time_mesh_stiffness), max(time_mesh_stiffness));
fprintf(' 平均啮合刚度: %.2e N/mm\n', mean(time_mesh_stiffness));
fprintf(' 刚度波动幅度: %.2f%%\n', ...
100*(max(time_mesh_stiffness)-min(time_mesh_stiffness))/mean(time_mesh_stiffness));
%% 8. 计算平均啮合刚度(解析法验证)
fprintf('\n8. 计算平均啮合刚度(ISO标准方法)...\n');
% ISO 6336-1:2006方法计算平均啮合刚度
% 刚度修正系数
c_gamma = 0.8; % 对于直齿轮
c_beta = 1; % 对于直齿轮
% 理论刚度
c_th = c_gamma * c_beta / (0.04723 + 0.15551/gear1.teeth + 0.25791/gear2.teeth - 0.00635*gear1.pressure_angle - 0.11654*gear1.shift_coefficient/gear1.teeth - 0.00193*gear2.shift_coefficient - 0.24188*gear2.shift_coefficient/gear2.teeth + 0.00529*gear1.shift_coefficient^2 + 0.00182*gear2.shift_coefficient^2);
% 考虑齿宽和模数的刚度
k_iso = material.E * gear1.face_width * c_th; % N/mm
fprintf(' ISO标准平均啮合刚度: %.2e N/mm\n', k_iso);
fprintf(' 势能法平均啮合刚度: %.2e N/mm\n', mean(time_mesh_stiffness));
fprintf(' 两种方法差异: %.2f%%\n', ...
100*abs(mean(time_mesh_stiffness)-k_iso)/k_iso);
%% 9. 可视化结果
fprintf('\n9. 生成可视化图表...\n');
figure('Position', [100, 100, 1200, 800]);
% 9.1 单齿刚度对比
subplot(2, 3, 1);
x_ratio = linspace(0, 1, n_points);
plot(x_ratio, single_tooth_stiffness_1/1e3, 'b-', 'LineWidth', 2);
hold on;
plot(x_ratio, single_tooth_stiffness_2/1e3, 'r--', 'LineWidth', 2);
xlabel('啮合点位置 (0:齿根, 1:齿顶)');
ylabel('单齿刚度 (N/μm)');
title('单齿刚度变化');
legend(['齿轮1 (z=' num2str(gear1.teeth) ')'], ['齿轮2 (z=' num2str(gear2.teeth) ')'], 'Location', 'best');
grid on;
% 9.2 单齿对啮合刚度
subplot(2, 3, 2);
plot(x_ratio, single_pair_stiffness/1e3, 'g-', 'LineWidth', 2);
xlabel('啮合点位置 (0:齿根, 1:齿顶)');
ylabel('单齿对啮合刚度 (N/μm)');
title('单齿对啮合刚度变化');
grid on;
% 9.3 时变啮合刚度
subplot(2, 3, 3);
yyaxis left;
plot(x_ratio, time_mesh_stiffness/1e3, 'k-', 'LineWidth', 2);
ylabel('总啮合刚度 (N/μm)');
yyaxis right;
plot(x_ratio, contact_ratio, 'm:', 'LineWidth', 1.5);
ylabel('接触齿对数');
xlabel('啮合点位置 (0:齿根, 1:齿顶)');
title('时变啮合刚度与接触齿对数');
legend('总啮合刚度', '接触齿对数', 'Location', 'best');
grid on;
% 9.4 刚度分量对比
subplot(2, 3, 4);
stiffness_components = zeros(n_points, 3);
for i = 1:n_points
k1 = single_tooth_stiffness_1(i);
k2 = single_tooth_stiffness_2(i);
kh = hertz_stiffness;
k_total = 1/(1/k1 + 1/k2 + 1/kh);
stiffness_components(i, 1) = 1/(1/k1) * (k_total/(1/k1 + 1/k2 + 1/kh));
stiffness_components(i, 2) = 1/(1/k2) * (k_total/(1/k1 + 1/k2 + 1/kh));
stiffness_components(i, 3) = 1/(1/kh) * (k_total/(1/k1 + 1/k2 + 1/kh));
end
area(x_ratio, stiffness_components/1e3);
xlabel('啮合点位置 (0:齿根, 1:齿顶)');
ylabel('刚度分量 (N/μm)');
title('啮合刚度分量分解');
legend('齿轮1变形', '齿轮2变形', '赫兹接触', 'Location', 'best');
grid on;
% 9.5 轮齿几何和受力分析
subplot(2, 3, 5);
% 绘制齿廓示意图
theta = linspace(0, 2*pi/gear1.teeth, 100);
r_base = db1/2;
r_tip = da1/2;
r_root = df1/2;
% 渐开线齿廓(简化)
inv_angle = @(phi) tan(phi) - phi; % 渐开线函数
phi_range = linspace(0, acos(r_base/(r_tip)), 50);
x_tooth = r_base * (cos(phi_range) + phi_range .* sin(phi_range));
y_tooth = r_base * (sin(phi_range) - phi_range .* cos(phi_range));
% 旋转到正确位置
rotation_angle = pi/(2*gear1.teeth) - inv_angle(alpha);
R = [cos(rotation_angle), -sin(rotation_angle);
sin(rotation_angle), cos(rotation_angle)];
tooth_points = R * [x_tooth; y_tooth];
plot(tooth_points(1,:), tooth_points(2,:), 'b-', 'LineWidth', 2);
hold on;
% 绘制基圆、分度圆、齿顶圆
theta_circle = linspace(0, 2*pi, 100);
plot(r_base*cos(theta_circle), r_base*sin(theta_circle), 'k--');
plot((d1/2)*cos(theta_circle), (d1/2)*sin(theta_circle), 'g--');
plot(r_tip*cos(theta_circle), r_tip*sin(theta_circle), 'r--');
axis equal;
xlabel('x (mm)');
ylabel('y (mm)');
title('轮齿几何示意图');
legend('齿廓', '基圆', '分度圆', '齿顶圆', 'Location', 'best');
grid on;
% 9.6 刚度统计分布
subplot(2, 3, 6);
histogram(time_mesh_stiffness/1e3, 20, 'FaceColor', 'c', 'EdgeColor', 'k');
xlabel('啮合刚度 (N/μm)');
ylabel('频率');
title('啮合刚度分布直方图');
grid on;
% 添加统计信息
avg_stiffness = mean(time_mesh_stiffness/1e3);
std_stiffness = std(time_mesh_stiffness/1e3);
text(0.05, 0.95, sprintf('平均值: %.1f', avg_stiffness), 'Units', 'normalized', 'FontSize', 10);
text(0.05, 0.90, sprintf('标准差: %.1f', std_stiffness), 'Units', 'normalized', 'FontSize', 10);
text(0.05, 0.85, sprintf('最小值: %.1f', min(time_mesh_stiffness/1e3)), 'Units', 'normalized', 'FontSize', 10);
text(0.05, 0.80, sprintf('最大值: %.1f', max(time_mesh_stiffness/1e3)), 'Units', 'normalized', 'FontSize', 10);
sgtitle(['圆柱齿轮啮合刚度分析 (z1=' num2str(gear1.teeth) ', z2=' num2str(gear2.teeth) ...
', m=' num2str(gear1.modulus) 'mm, ε_α=' sprintf('%.3f', epsilon_alpha) ')'], ...
'FontSize', 14, 'FontWeight', 'bold');
%% 10. 保存结果
fprintf('\n10. 保存计算结果...\n');
% 保存刚度数据
stiffness_results.epsilon_alpha = epsilon_alpha;
stiffness_results.single_tooth_stiffness_1 = single_tooth_stiffness_1;
stiffness_results.single_tooth_stiffness_2 = single_tooth_stiffness_2;
stiffness_results.hertz_stiffness = hertz_stiffness;
stiffness_results.single_pair_stiffness = single_pair_stiffness;
stiffness_results.time_mesh_stiffness = time_mesh_stiffness;
stiffness_results.contact_ratio = contact_ratio;
stiffness_results.avg_stiffness = mean(time_mesh_stiffness);
stiffness_results.iso_stiffness = k_iso;
% 保存齿轮参数
gear_params.gear1 = gear1;
gear_params.gear2 = gear2;
gear_params.material = material;
gear_params.geometry.d1 = d1;
gear_params.geometry.d2 = d2;
gear_params.geometry.db1 = db1;
gear_params.geometry.db2 = db2;
gear_params.geometry.da1 = da1;
gear_params.geometry.da2 = da2;
gear_params.geometry.df1 = df1;
gear_params.geometry.df2 = df2;
gear_params.geometry.a = a;
gear_params.geometry.g_alpha = g_alpha;
gear_params.geometry.pb = pb;
save('gear_mesh_stiffness_results.mat', 'stiffness_results', 'gear_params');
fprintf(' 结果已保存到 gear_mesh_stiffness_results.mat\n');
% 生成报告文件
generate_report(gear_params, stiffness_results);
fprintf('\n========== 计算完成 ==========\n');
2. 关键函数:单齿刚度计算(势能法)
function k_tooth = calculate_single_tooth_stiffness(gear, material, contact_position, n_slices)
% 基于势能法计算单个轮齿的刚度
% 输入:
% gear - 齿轮结构体
% material - 材料属性结构体
% contact_position - 接触点位置 (0:齿根, 1:齿顶)
% n_slices - 离散切片数
% 输出:
% k_tooth - 单齿刚度 (N/mm)
% 齿轮参数
m = gear.modulus; % 模数 (mm)
z = gear.teeth; % 齿数
alpha = deg2rad(gear.pressure_angle); % 压力角 (弧度)
b = gear.face_width; % 齿宽 (mm)
E = material.E; % 弹性模量 (MPa)
v = material.v; % 泊松比
% 计算齿轮几何
d = m * z; % 分度圆直径 (mm)
db = d * cos(alpha); % 基圆直径 (mm)
da = d + 2 * m; % 齿顶圆直径 (简化) (mm)
df = d - 2 * 1.25 * m; % 齿根圆直径 (简化) (mm)
% 计算接触点到轮齿对称线的距离
% 接触点半径
r_contact = df/2 + contact_position * (da/2 - df/2);
% 计算接触点处的压力角
alpha_contact = acos(db / (2 * r_contact));
% 计算力臂 (接触点到齿根危险截面的距离)
% 齿根危险截面位置 (30°切线法简化)
% 实际应用中可以使用更精确的方法
h_f = 1.25 * m; % 齿根高
r_root = df/2; % 齿根圆半径
% 离散化轮齿截面
y_positions = linspace(r_root, r_contact, n_slices); % 从齿根到接触点
dy = (r_contact - r_root) / (n_slices - 1); % 切片厚度
% 初始化能量积分
U_bending = 0; % 弯曲能
U_shear = 0; % 剪切能
U_axial = 0; % 轴向压缩能
% 单位载荷
F = 1; % 单位力 (N)
% 对每个切片计算能量
for i = 1:n_slices
% 当前切片位置
y = y_positions(i);
% 计算当前截面的几何参数
% 1. 计算齿厚 (简化方法)
% 在半径为y处的圆周齿厚
s_y = calculate_tooth_thickness(y, gear);
% 2. 计算截面面积和惯性矩
A = b * s_y; % 截面面积 (mm²)
% 惯性矩 (矩形截面)
I = (b * s_y^3) / 12; % 截面惯性矩 (mm⁴)
% 3. 计算弯矩、剪力和轴力
% 力臂: 从当前截面到接触点的距离
moment_arm = r_contact - y;
% 载荷分解:
% 法向力Fn分解为切向力Ft和径向力Fr
% 在接触点处,载荷分解为:
F_t = F * cos(alpha_contact); % 切向力
F_r = F * sin(alpha_contact); % 径向力
% 当前截面处的弯矩
M = F_t * moment_arm;
% 当前截面处的剪力 (切向分量)
V = F_t;
% 当前截面处的轴力 (径向分量)
N = F_r;
% 4. 计算能量密度并积分
% 弯曲能密度
if I > 0
dU_bending = (M^2) / (2 * E * I) * dy;
U_bending = U_bending + dU_bending;
end
% 剪切能密度 (考虑剪切形状系数)
k_shear = 1.2; % 矩形截面的剪切形状系数
dU_shear = (k_shear * V^2) / (2 * G(E, v) * A) * dy;
U_shear = U_shear + dU_shear;
% 轴向压缩能密度
dU_axial = (N^2) / (2 * E * A) * dy;
U_axial = U_axial + dU_axial;
end
% 总势能
U_total = U_bending + U_shear + U_axial;
% 单齿刚度 (基于能量法: k = F²/(2U),其中F=1)
if U_total > 0
k_tooth = 1 / (2 * U_total);
else
k_tooth = 1e10; % 极大值,避免除零
end
% 确保刚度为正
k_tooth = max(k_tooth, 1e-6);
end
function s = calculate_tooth_thickness(r, gear)
% 计算在半径r处的齿厚
% 简化方法: 线性插值
m = gear.modulus;
z = gear.teeth;
alpha = deg2rad(gear.pressure_angle);
% 分度圆齿厚
s_pitch = pi * m / 2;
% 分度圆半径
r_pitch = m * z / 2;
% 基圆半径
r_base = r_pitch * cos(alpha);
% 齿顶圆半径
r_tip = r_pitch + m;
% 齿根圆半径
r_root = r_pitch - 1.25 * m;
% 如果半径小于基圆半径,使用基圆处齿厚
if r < r_base
s = s_pitch * r / r_pitch - 2 * r * (inv(alpha) - inv(acos(r_base/r)));
else
% 渐开线部分: 使用渐开线函数计算
alpha_r = acos(r_base / r);
s = 2 * r * (s_pitch/(2*r_pitch) + inv(alpha) - inv(alpha_r));
end
% 确保齿厚不为负
s = max(s, 0.1 * m);
end
function G = G(E, v)
% 计算剪切模量
G = E / (2 * (1 + v));
end
function inv_phi = inv(phi)
% 渐开线函数 inv(φ) = tan(φ) - φ
inv_phi = tan(phi) - phi;
end
3. 辅助函数:生成报告
function generate_report(gear_params, stiffness_results)
% 生成计算结果报告
fprintf('\n========== 计算结果报告 ==========\n');
fprintf('齿轮参数:\n');
fprintf(' 齿轮1: z1=%d, m=%.2fmm, α=%.1f°, b=%.1fmm\n', ...
gear_params.gear1.teeth, gear_params.gear1.modulus, ...
gear_params.gear1.pressure_angle, gear_params.gear1.face_width);
fprintf(' 齿轮2: z2=%d, m=%.2fmm, α=%.1f°, b=%.1fmm\n', ...
gear_params.gear2.teeth, gear_params.gear2.modulus, ...
gear_params.gear2.pressure_angle, gear_params.gear2.face_width);
fprintf('\n几何参数:\n');
fprintf(' 分度圆直径: d1=%.2fmm, d2=%.2fmm\n', ...
gear_params.geometry.d1, gear_params.geometry.d2);
fprintf(' 基圆直径: db1=%.2fmm, db2=%.2fmm\n', ...
gear_params.geometry.db1, gear_params.geometry.db2);
fprintf(' 齿顶圆直径: da1=%.2fmm, da2=%.2fmm\n', ...
gear_params.geometry.da1, gear_params.geometry.da2);
fprintf(' 中心距: a=%.2fmm\n', gear_params.geometry.a);
fprintf(' 啮合线长度: g_α=%.4fmm\n', gear_params.geometry.g_alpha);
fprintf(' 基圆齿距: pb=%.4fmm\n', gear_params.geometry.pb);
fprintf(' 端面重合度: ε_α=%.4f\n', stiffness_results.epsilon_alpha);
fprintf('\n刚度计算结果:\n');
fprintf(' 赫兹接触刚度: %.4e N/mm\n', stiffness_results.hertz_stiffness);
fprintf(' 齿轮1单齿刚度范围: %.2e ~ %.2e N/mm\n', ...
min(stiffness_results.single_tooth_stiffness_1), ...
max(stiffness_results.single_tooth_stiffness_1));
fprintf(' 齿轮2单齿刚度范围: %.2e ~ %.2e N/mm\n', ...
min(stiffness_results.single_tooth_stiffness_2), ...
max(stiffness_results.single_tooth_stiffness_2));
fprintf(' 单齿对啮合刚度范围: %.2e ~ %.2e N/mm\n', ...
min(stiffness_results.single_pair_stiffness), ...
max(stiffness_results.single_pair_stiffness));
fprintf(' 时变啮合刚度范围: %.2e ~ %.2e N/mm\n', ...
min(stiffness_results.time_mesh_stiffness), ...
max(stiffness_results.time_mesh_stiffness));
fprintf(' 平均啮合刚度: %.2e N/mm\n', stiffness_results.avg_stiffness);
fprintf(' ISO标准平均刚度: %.2e N/mm\n', stiffness_results.iso_stiffness);
fprintf(' 刚度波动幅度: %.2f%%\n', ...
100*(max(stiffness_results.time_mesh_stiffness) - ...
min(stiffness_results.time_mesh_stiffness)) / stiffness_results.avg_stiffness);
fprintf('\n啮合特性:\n');
avg_contact_ratio = mean(stiffness_results.contact_ratio);
fprintf(' 平均接触齿对数: %.2f\n', avg_contact_ratio);
fprintf(' 单齿啮合比例: %.1f%%\n', ...
100*sum(stiffness_results.contact_ratio == 1)/length(stiffness_results.contact_ratio));
fprintf(' 双齿啮合比例: %.1f%%\n', ...
100*sum(stiffness_results.contact_ratio == 2)/length(stiffness_results.contact_ratio));
% 保存报告到文件
report_filename = 'gear_stiffness_report.txt';
fid = fopen(report_filename, 'w');
if fid ~= -1
fprintf(fid, '圆柱齿轮啮合刚度分析报告\n');
fprintf(fid, '生成时间: %s\n\n', datestr(now));
fprintf(fid, '1. 齿轮参数\n');
fprintf(fid, ' 齿轮1: z1=%d, m=%.2fmm, α=%.1f°, b=%.1fmm\n', ...
gear_params.gear1.teeth, gear_params.gear1.modulus, ...
gear_params.gear1.pressure_angle, gear_params.gear1.face_width);
fprintf(fid, ' 齿轮2: z2=%d, m=%.2fmm, α=%.1f°, b=%.1fmm\n\n', ...
gear_params.gear2.teeth, gear_params.gear2.modulus, ...
gear_params.gear2.pressure_angle, gear_params.gear2.face_width);
fprintf(fid, '2. 几何参数\n');
fprintf(fid, ' 分度圆直径: d1=%.2fmm, d2=%.2fmm\n', ...
gear_params.geometry.d1, gear_params.geometry.d2);
fprintf(fid, ' 基圆直径: db1=%.2fmm, db2=%.2fmm\n', ...
gear_params.geometry.db1, gear_params.geometry.db2);
fprintf(fid, ' 端面重合度: ε_α=%.4f\n\n', stiffness_results.epsilon_alpha);
fprintf(fid, '3. 刚度计算结果\n');
fprintf(fid, ' 赫兹接触刚度: %.4e N/mm\n', stiffness_results.hertz_stiffness);
fprintf(fid, ' 平均啮合刚度: %.4e N/mm\n', stiffness_results.avg_stiffness);
fprintf(fid, ' 刚度波动幅度: %.2f%%\n\n', ...
100*(max(stiffness_results.time_mesh_stiffness) - ...
min(stiffness_results.time_mesh_stiffness)) / stiffness_results.avg_stiffness);
fprintf(fid, '4. 啮合特性\n');
fprintf(fid, ' 平均接触齿对数: %.2f\n', avg_contact_ratio);
fclose(fid);
fprintf(' 报告已保存到 %s\n', report_filename);
else
fprintf(' 无法创建报告文件\n');
end
end
4. 简化版本(快速计算)
%% 圆柱齿轮啮合刚度简化计算程序
% 快速计算平均啮合刚度和时变刚度
clear; clc; close all;
% 1. 输入基本参数
m = 2; % 模数 (mm)
z1 = 30; % 小齿轮齿数
z2 = 50; % 大齿轮齿数
alpha = 20; % 压力角 (度)
b = 20; % 齿宽 (mm)
E = 2.06e5; % 弹性模量 (MPa)
v = 0.3; % 泊松比
% 2. 计算重合度
d1 = m * z1;
d2 = m * z2;
db1 = d1 * cosd(alpha);
db2 = d2 * cosd(alpha);
da1 = d1 + 2 * m;
da2 = d2 + 2 * m;
a = (d1 + d2) / 2;
g_alpha = sqrt(da1^2 - db1^2)/(2*cosd(alpha)) + sqrt(da2^2 - db2^2)/(2*cosd(alpha)) - a*sind(alpha);
pb = pi * m * cosd(alpha);
epsilon_alpha = g_alpha / pb;
% 3. 计算赫兹接触刚度
k_h = (pi * E * b) / (4 * (1 - v^2));
% 4. 计算单齿刚度(简化公式)
% 经验公式: 单齿刚度与模数、齿宽、材料有关
k_single1 = 0.8 * E * b; % 齿轮1单齿刚度 (N/mm)
k_single2 = 0.8 * E * b; % 齿轮2单齿刚度 (N/mm)
% 5. 计算单齿对啮合刚度
k_pair = 1 / (1/k_single1 + 1/k_single2 + 1/k_h);
% 6. 计算时变刚度
n_points = 100;
pos = linspace(0, 1, n_points);
k_mesh = zeros(n_points, 1);
for i = 1:n_points
if epsilon_alpha < 2
if pos(i) < (epsilon_alpha - 1) || pos(i) > (2 - epsilon_alpha)
k_mesh(i) = 2 * k_pair; % 双齿啮合
else
k_mesh(i) = k_pair; % 单齿啮合
end
else
k_mesh(i) = floor(epsilon_alpha) * k_pair;
end
end
% 7. 显示结果
fprintf('齿轮参数: m=%dmm, z1=%d, z2=%d, α=%d°, b=%dmm\n', m, z1, z2, alpha, b);
fprintf('重合度: ε_α = %.3f\n', epsilon_alpha);
fprintf('赫兹接触刚度: k_h = %.2e N/mm\n', k_h);
fprintf('单齿对啮合刚度: k_pair = %.2e N/mm\n', k_pair);
fprintf('平均啮合刚度: k_avg = %.2e N/mm\n', mean(k_mesh));
fprintf('刚度波动: %.1f%%\n', 100*(max(k_mesh)-min(k_mesh))/mean(k_mesh));
% 8. 绘图
figure;
plot(pos, k_mesh/1e3, 'b-', 'LineWidth', 2);
xlabel('啮合位置 (0:啮入, 1:啮出)');
ylabel('啮合刚度 (N/μm)');
title(sprintf('圆柱齿轮时变啮合刚度 (z1=%d, z2=%d, ε_α=%.3f)', z1, z2, epsilon_alpha));
grid on;
参考代码 基于势能原理计算圆柱齿轮啮合刚度的程序 www.3dddown.com/cnb/50789.html
5. 使用说明
5.1 程序特点
- 基于势能原理:考虑弯曲、剪切和轴向压缩变形能
- 考虑赫兹接触:计算齿面接触变形
- 时变特性:考虑重合度影响,计算单双齿交替啮合的刚度变化
- 参数化设计:可方便修改齿轮参数
5.2 主要计算步骤
- 输入齿轮几何参数和材料属性
- 计算齿轮基本几何尺寸
- 基于势能法计算单齿刚度
- 计算赫兹接触刚度
- 计算单齿对啮合刚度(串联模型)
- 考虑重合度,计算多齿对啮合刚度(并联模型)
- 输出时变啮合刚度曲线
5.3 关键参数影响
- 模数增大 → 齿厚增加 → 刚度增大
- 齿宽增大 → 截面面积增大 → 刚度线性增大
- 齿数增加 → 齿形更瘦长 → 刚度可能减小
- 压力角增大 → 齿根更厚 → 刚度增大
5.4 注意事项
- 程序中使用了一些简化假设,实际齿轮的齿形可能更复杂
- 势能法计算中,轮齿离散切片数影响计算精度
- 赫兹接触刚度公式适用于线接触情况
- 实际应用中还需考虑齿轮体变形、制造误差等因素
5.5 扩展应用
- 斜齿轮:修改为螺旋齿参数,考虑轴向重合度
- 变位齿轮:考虑变位系数对齿形的影响
- 修形齿轮:考虑齿廓修形对接触的影响
- 动态分析:将刚度用于齿轮系统动力学分析

浙公网安备 33010602011771号