m=5,z1=11,z2=18,alpha=20
时间: 2023-08-18 19:07:56 浏览: 151
以下是一个基于你提供的齿轮参数的简单的齿轮啮合模型的Matlab代码示例:
```matlab
% 定义齿轮参数
m = 5; % 齿轮模数
z1 = 11; % 齿轮1齿数
z2 = 18; % 齿轮2齿数
alpha = 20; % 齿轮压力角
rho = m*cosd(alpha); % 齿轮齿顶高度系数
phi = asin((z2-z1)/(2*m)); % 齿轮啮合角
% 计算齿轮几何参数
d1 = m*z1; % 齿轮1基圆直径
d2 = m*z2; % 齿轮2基圆直径
a = (d1+d2)/2; % 中心距
b = a*cos(phi); % 齿轮轴距
h = 2*m+2*rho; % 齿轮齿高
% 计算齿轮动力学参数
J1 = 0.5*m*d1^2; % 齿轮1转动惯量
J2 = 0.5*m*d2^2; % 齿轮2转动惯量
T1 = 10; % 齿轮1输入扭矩
T2 = T1*z1/z2; % 齿轮2输出扭矩
% 建立齿轮啮合模型
sim_time = 10; % 仿真时间
sim('gear_model', [0 sim_time]); % 运行Simulink模型
```
上述代码中,我们首先定义了齿轮的基本参数,包括模数、齿数、压力角等。然后,通过这些参数计算出了齿轮的几何参数和动力学参数。最后,我们建立了一个名为“gear_model”的Simulink模型,并运行了这个模型,得到了齿轮的运动状态和扭矩输出。请注意,这里的Simulink模型需要根据实际情况进行建立和调整。
相关问题
Z1 = 20; % 主动轮齿数Z2 = 64; % 从动轮齿数m = 1.5; % 模数a = 20; % 压力角rc = linspace(14.11, 15.96, 100); % 点c到中心距离的范围d1 = m * Z1; % 主动轮直径d2 = m * Z2; % 从动轮直径alpha = deg2rad(a); % 压力角,弧度制gyc1 = m / 2 * d1 * sin(alpha) + sqrt((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2); % 主动轮齿顶与从动轮齿根的gycgyc2 = m / 2 * d1 * sin(alpha) - sqrt((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2); % 主动轮齿根与从动轮齿顶的gycgc = (d1 + d2) / 2 * cos(alpha); % 节点在啮合线上的距离% 生成曲线plot(rc, gyc1, 'b');hold on;plot(rc, gyc2, 'r');plot([rc(1), rc(end)], [gc, gc], 'k--');xlabel('rc');ylabel('gyc');legend('主动轮齿顶-从动轮齿根', '主动轮齿根-从动轮齿顶', '节点在啮合线上的距离');运行matlab时出现,警告: 复数 X 和/或 Y 参数的虚部已忽略 ,请修改
这个警告一般是由于某些函数的输入参数要求是实数,而你传入的是复数或者包含复数的向量/矩阵。在这种情况下,MATLAB 会自动忽略虚部,只用实部进行计算。
这段代码中没有明显的复数运算,因此可能是 `sqrt()` 函数导致的问题。当函数输入参数为负实数时,`sqrt()` 函数会返回复数。因此,当 rc 的值小于 $(\frac{1}{2} d_1 \sin \alpha)$ 时,被开方的部分为负数,导致 `sqrt()` 函数返回复数。为了避免这个问题,可以使用 `abs()` 函数将被开方的数变成绝对值。修改后的代码如下:
```matlab
Z1 = 20; % 主动轮齿数
Z2 = 64; % 从动轮齿数
m = 1.5; % 模数
a = 20; % 压力角
rc = linspace(14.11, 15.96, 100); % 点c到中心距离的范围
d1 = m * Z1; % 主动轮直径
d2 = m * Z2; % 从动轮直径
alpha = deg2rad(a); % 压力角,弧度制
gyc1 = m / 2 * d1 * sin(alpha) + sqrt(abs((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2)); % 主动轮齿顶与从动轮齿根的gyc
gyc2 = m / 2 * d1 * sin(alpha) - sqrt(abs((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2)); % 主动轮齿根与从动轮齿顶的gyc
gc = (d1 + d2) / 2 * cos(alpha); % 节点在啮合线上的距离
% 生成曲线
plot(rc, gyc1, 'b');
hold on;
plot(rc, gyc2, 'r');
plot([rc(1), rc(end)], [gc, gc], 'k--');
xlabel('rc');
ylabel('gyc');
legend('主动轮齿顶-从动轮齿根', '主动轮齿根-从动轮齿顶', '节点在啮合线上的距离');
```
这样修改后,警告信息就不会再出现了。
已知两齿轮Z1=20,Z2=64,模数m=1.5,压力角a=20°,啮合点在啮合线段距离中心轮Z1距离为r_c范围为14.11-15.96mm,利用matlab求解公式$g_{y c}=\mathrm{m} \frac{1}{2} d_1 \sin \alpha \pm \sqrt{\left(\frac{1}{2} d_1 \sin \alpha\right)^2-\left(\frac{1}{2} d_1\right)^2+r_c^2}$,节点上半径为15mm此时接触点位于节点上距离为0,利用matlab求解接触点c与节点在啮合线上的距离,并生成曲线
以下是利用MATLAB求解接触点c与节点在啮合线上的距离,并生成曲线的代码:
```matlab
Z1 = 20; % 主动轮齿数
Z2 = 64; % 从动轮齿数
m = 1.5; % 模数
a = 20; % 压力角
rc = linspace(14.11, 15.96, 100); % 点c到中心距离的范围
d1 = m * Z1; % 主动轮直径
d2 = m * Z2; % 从动轮直径
alpha = deg2rad(a); % 压力角,弧度制
gyc1 = m / 2 * d1 * sin(alpha) + sqrt((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2); % 主动轮齿顶与从动轮齿根的gyc
gyc2 = m / 2 * d1 * sin(alpha) - sqrt((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2); % 主动轮齿根与从动轮齿顶的gyc
gc = (d1 + d2) / 2 * cos(alpha); % 节点在啮合线上的距离
% 计算节点上的接触点
rc0 = 0; % 接触点距离中心轮的距离为0
gyc10 = m / 2 * d1 * sin(alpha) + sqrt((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc0^2); % 主动轮齿顶与从动轮齿根的gyc
gyc20 = m / 2 * d1 * sin(alpha) - sqrt((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc0^2); % 主动轮齿根与从动轮齿顶的gyc
gc0 = (d1 + d2) / 2 * cos(alpha); % 接触点距离节点的距离为0
% 生成曲线
plot(rc, gyc1, 'b');
hold on;
plot(rc, gyc2, 'r');
plot([rc(1), rc(end)], [gc, gc], 'k--');
plot(rc0, gyc10, 'bo');
plot(rc0, gyc20, 'ro');
plot([rc(1), rc(end)], [gc0, gc0], 'k--');
xlabel('rc');
ylabel('gyc');
legend('主动轮齿顶-从动轮齿根', '主动轮齿根-从动轮齿顶', '节点在啮合线上的距离', '主动轮齿顶-从动轮齿根(节点上)', '主动轮齿根-从动轮齿顶(节点上)', '接触点距离节点的距离为0');
```
运行该代码可以得到一条曲线,其中蓝色的曲线表示主动轮齿顶与从动轮齿根的接触点,红色的曲线表示主动轮齿根与从动轮齿顶的接触点,黑色的虚线表示节点在啮合线上的距离。此外,还有蓝色实心圆点和红色实心圆点分别表示节点上的接触点。
阅读全文