function main1
clear;
clc;
l1 =0.100;
l3 =0.360;
l4=0.200;
l6=0.200;
l61=0.336;
w1=2*pi*60;
alpha1=0;
D2H=pi/180;
H2D=180/pi;
for i=1:3601
o1(i)=pi*(i-1)/1800;
o31(i)=atan((l6+l1*sin(o1(i)))/(l1*cos(o1(i))));
if o31(i)>=0
o3(i)=o31(i);
else
o3(i)=pi+o31(i);
end
s3(i)=(l1*cos(o1(i)))/cos(o3(i));
o4(i)=pi-asin((l61-l3*sin(o3(i)))/l4);
se(i)=l3*cos(o3(i))+l4*cos(o4(i));
if o1(i)==pi/2
o3(i)=pi/2;
s3(i)=l1+l6;
end
if o1(i)==3*pi/2
o3(i)=pi/2;
s3(i)=16-l1;
end
A1=[cos(o3(i)),-s3(i)*sin(o3(i)),0,0;sin(o3(i)),s3(i)*cos(o3(i)),0,0;0,-l3*sin(o3(i)),-l4*sin(o4(i)),-1;0,l3*cos(o3(i)),l4*cos(o4(i)),0];
B1=w1*[-l1*sin(o1(i));l1*cos(o1(i));0;0];
D1=A1\B1;
E1(:,i)=D1;
ds(i)=D1(1);
w3(i)=D1(2);
w4(i)=D1(3);
ve(i)=D1(4);
A2=[cos(o3(i)),-s3(i)*sin(o3(i)),0,0;sin(o3(i)),s3(i)*cos(o3(i)),0,0;0,-l3*sin(o3(i)),-l4*sin(o4(i)),-1;0,l3*cos(o3(i)),l4*cos(o4(i)),0];
B2=-[w3(i)*sin(o3(i)),(-ds(i)*sin(o3(i))-s3(i)*w3(i)*cos(o3(i))),0,0;w3(i)*cos(o3(i)),(ds(i)*cos(o3(i))-s3(i)*w3(i)*sin(o3(i))),0,0;0,-l3*w3(i)*cos(o3(i)),-l4*w4(i)*cos(o4(i)),0;0,-l3*w3(i)*sin(o3(i)),-l4*w4(i)*sin(o4(i)),0]*[ds(i);w3(i);w4(i);ve(i)];
C2=w1*[-l1*w1*cos(o1(i));-l1*w1*sin(o1(i));0;0];
B=B2+C2;
D2=A2\B;
E2(:,i)=D2;
dds(i)=D2(1);
a3(i)=D2(2);
a4(i)=D2(3);
ae(i)=D2(4);
end
o1D=o1.*H2D;
y=[o3.*H2D;o4.*H2D];
w=[w3;w4];
a=[a3;a4];
% 第一个图:导杆角位移曲线和刨刀的位移曲线
figure(1);
yyaxis left
plot(o1D,y);
ylabel('\it\theta3,\theta4');
yyaxis right
plot(o1D,se);
ylabel('Se')
xlabel('\it\theta1');
title('导杆角位移曲线和刨刀的位移曲线');
axis auto;
% 第二个图:导杆角速度曲线和刨刀的速度曲线
figure(2);
yyaxis left
plot(o1D,w);
ylabel('\it\omega3,\omega4');
yyaxis right
plot(o1D,ve);
ylabel('Ve');
xlabel('\it\theta1');
title('导杆角速度曲线和刨刀的速度曲线');
axis auto;
% 第三个图:导杆的加速度线图和刨刀的加速度曲线
figure(3);
yyaxis left
plot(o1D,a);
ylabel('\it\alpha3,\alpha4');
yyaxis right
plot(o1D,ae);
ylabel('\it\alphaE');
xlabel('\it\theta 1');
title('导杆的加速度线图和刨刀的加速度曲线');
axis auto;
end
1. 函数定义与初始化部分
matlab
function main1 clear; clc; l1 =0.100; l3 =0.360; l4=0.200; l6=0.200; l61=0.336; w1=2*pi*60; alpha1=0; D2H=pi/180; H2D=180/pi;
function main1
:定义了一个名为main1
的函数。clear
:清除工作区中的所有变量。clc
:清除命令窗口中的内容。l1, l3, l4, l6, l61
:这些是机械系统中各杆的长度参数。w1
:输入的角速度,这里是2*pi*60
,通常用于表示每分钟 60 转的角速度转换为弧度每秒。alpha1
:初始角度加速度,这里设为 0。D2H
和H2D
:分别用于角度的度转弧度和弧度转度的转换因子。2. 主循环部分
matlab
for i=1:3601 o1(i)=pi*(i-1)/1800; o31(i)=atan((l6+l1*sin(o1(i)))/(l1*cos(o1(i)))); if o31(i)>=0 o3(i)=o31(i); else o3(i)=pi+o31(i); end s3(i)=(l1*cos(o1(i)))/cos(o3(i)); o4(i)=pi-asin((l61-l3*sin(o3(i)))/l4); se(i)=l3*cos(o3(i))+l4*cos(o4(i)); if o1(i)==pi/2 o3(i)=pi/2; s3(i)=l1+l6; end if o1(i)==3*pi/2 o3(i)=pi/2; s3(i)=16-l1; end
for i = 1:3601
:循环 3601 次,将o1
从 0 到2*pi
以pi/1800
的步长进行遍历。
o1(i)=pi*(i - 1)/1800
:计算当前的输入角度o1
。o31(i)=atan((l6 + l1*sin(o1(i)))/(l1*cos(o1(i))))
:根据几何关系计算o31
。- 通过
if-else
语句对o31
进行判断,得到最终的o3
值。s3(i)=(l1*cos(o1(i)))/cos(o3(i))
:计算s3
的值。o4(i)=pi - asin((l61 - l3*sin(o3(i)))/l4)
:计算o4
的值。se(i)=l3*cos(o3(i)) + l4*cos(o4(i))
:计算刨刀的位移se
。- 两个
if
语句用于处理o1
为pi/2
和3*pi/2
时的特殊情况。3. 速度计算部分
matlab
A1=[cos(o3(i)),-s3(i)*sin(o3(i)),0,0;sin(o3(i)),s3(i)*cos(o3(i)),0,0;0,-l3*sin(o3(i)),-l4*sin(o4(i)),-1;0,l3*cos(o3(i)),l4*cos(o4(i)),0]; B1=w1*[-l1*sin(o1(i));l1*cos(o1(i));0;0]; D1=A1\B1; E1(:,i)=D1; ds(i)=D1(1); w3(i)=D1(2); w4(i)=D1(3); ve(i)=D1(4);
A1
:根据运动学方程构建的系数矩阵。B1
:方程的右侧向量。D1 = A1\B1
:求解线性方程组A1 * D1 = B1
,得到速度相关的解。E1(:,i)=D1
:将解存储在矩阵E1
中。ds(i), w3(i), w4(i), ve(i)
:分别提取解中的各速度分量。4. 加速度计算部分
matlab
A2=[cos(o3(i)),-s3(i)*sin(o3(i)),0,0;sin(o3(i)),s3(i)*cos(o3(i)),0,0;0,-l3*sin(o3(i)),-l4*sin(o4(i)),-1;0,l3*cos(o3(i)),l4*cos(o4(i)),0]; B2=-[w3(i)*sin(o3(i)),(-ds(i)*sin(o3(i))-s3(i)*w3(i)*cos(o3(i))),0,0;w3(i)*cos(o3(i)),(ds(i)*cos(o3(i))-s3(i)*w3(i)*sin(o3(i))),0,0;0,-l3*w3(i)*cos(o3(i)),-l4*w4(i)*cos(o4(i)),0;0,-l3*w3(i)*sin(o3(i)),-l4*w4(i)*sin(o4(i)),0]*[ds(i);w3(i);w4(i);ve(i)]; C2=w1*[-l1*w1*cos(o1(i));-l1*w1*sin(o1(i));0;0]; B=B2+C2; D2=A2\B; E2(:,i)=D2; dds(i)=D2(1); a3(i)=D2(2); a4(i)=D2(3); ae(i)=D2(4); end
A2
:与A1
相同,因为加速度计算的系数矩阵与速度计算的系数矩阵形式相同。B2
:包含速度相关的项,用于加速度计算。C2
:输入角速度相关的项。B = B2 + C2
:得到方程的右侧向量。D2 = A2\B
:求解线性方程组A2 * D2 = B
,得到加速度相关的解。E2(:,i)=D2
:将解存储在矩阵E2
中。dds(i), a3(i), a4(i), ae(i)
:分别提取解中的各加速度分量。5. 数据处理部分
matlab
o1D=o1.*H2D; y=[o3.*H2D;o4.*H2D]; w=[w3;w4]; a=[a3;a4];
o1D = o1.*H2D
:将o1
从弧度转换为度。y = [o3.*H2D;o4.*H2D]
:将o3
和o4
从弧度转换为度,并存储在矩阵y
中。w = [w3;w4]
:将w3
和w4
存储在矩阵w
中。a = [a3;a4]
:将a3
和a4
存储在矩阵a
中。6. 图形绘制部分
matlab
% 第一个图:导杆角位移曲线和刨刀的位移曲线 figure(1); yyaxis left plot(o1D,y); ylabel('\it\theta3,\theta4'); yyaxis right plot(o1D,se); ylabel('Se') xlabel('\it\theta1'); title('导杆角位移曲线和刨刀的位移曲线'); axis auto; % 第二个图:导杆角速度曲线和刨刀的速度曲线 figure(2); yyaxis left plot(o1D,w); ylabel('\it\omega3,\omega4'); yyaxis right plot(o1D,ve); ylabel('Ve'); xlabel('\it\theta1'); title('导杆角速度曲线和刨刀的速度曲线'); axis auto; % 第三个图:导杆的加速度线图和刨刀的加速度曲线 figure(3); yyaxis left plot(o1D,a); ylabel('\it\alpha3,\alpha4'); yyaxis right plot(o1D,ae); ylabel('\it\alphaE'); xlabel('\it\theta 1'); title('导杆的加速度线图和刨刀的加速度曲线'); axis auto;
figure(1), figure(2), figure(3)
:分别创建三个独立的图形窗口。yyaxis left
和yyaxis right
:用于在同一个图中绘制左右两个不同的 y 轴。plot
:绘制相应的曲线。ylabel
和xlabel
:设置坐标轴标签。title
:设置图形的标题。axis auto
:自动调整坐标轴的范围。