六杆机构运动分析
原题为:已知改机构尺寸为:AB=0.04m,AC=0.1m,a=0.08,初始角为60,原动件1以n=500rpm,原动件1以n=500rpm的转速逆时针转动,计算杆5和摇杆3的角位移,角速度及角加速度,并绘制出运动线图。
对机构进行计算
使用matlab对矩阵运算编程
在这里插入代码片close all
clear
clc
angle=200;
s_3ts=zeros(1,angle);theta3_ts=zeros(1,angle);l_1=0.04;
syms x;x_ts=zeros(3,angle);syms y;y_ts=zeros(3,angle);
for theta1=1:1:angle%运转角度变化可自己更改
s_3 = sqrt(0.04^2+0.1^2-(cosd(90+theta1)*2*0.04*0.1));
if theta1>90
theta3 = 90 + acosd((0.1^2 + s_3^2 - 0.04^2)/(2*0.1*s_3));
else
theta3 = 90 - acosd((0.1^2 + s_3^2 - 0.04^2)/(2*0.1*s_3));
end
l_3 = 0.18/cosd(90-theta3);
s_3ts(1,theta1)=s_3;theta3_ts(1,theta1)=theta3;
A=[cosd(theta3), -s_3*sind(theta3), 0 ;
sind(theta3), s_3*cosd(theta3), 0;
0, -l_3*sind(theta3), -1;
0, l_3*cosd(theta3), 0];
%一阶导矩阵
B=[-l_1*sind(theta1);l_1*cosd(theta1);0;0];
omega = 1;
x =A\B;
x_ts(1,theta1)=x(1,:);
x_ts(2,theta1)=x(2,:);
x_ts(3,theta1)=x(3,:);%存储结果
omega3=x(2,1);
C=[cosd(theta3), -s_3*sind(theta3),0;
sind(theta3), s_3*cosd(theta3),0;
0, -l_3*sind(theta3), -1;
0, l_3*sind(theta3),0];
D=-[-omega3*sind(theta3), -x(1:1)*sind(theta3)-s_3*omega3*cosd(theta3),0;
omega3*cosd(theta3), x(1,1)*cosd(theta3)-s_3*omega3*sind(theta3),0;
0, -l_3*omega3*cosd(theta3),0
0, -l_3*omega3*sind(theta3),0];
%二阶导矩阵
E=[-l_1*cosd(theta1);
-l_1*sind(theta1)
0;
0;];
y= (D*x+E)\C;y=y';
y_ts(1,theta1)= y(1,:);
y_ts(2,theta1)= y(2,:);
y_ts(3,theta1)= y(3,:);%存储结果
end
%输出结果
subplot(1,6,1);plot((1:1:angle)/100,theta3_ts);xlabel("时间");ylabel("角度");title("角3角位移");
subplot(1,6,2);plot((1:1:angle)/100,s_3ts);xlabel("时间");ylabel("长度");title("s_3长度变化");
subplot(1,6,3);plot((1:1:angle)/100,(x_ts(2,:)));xlabel("时间");ylabel("角速度");title("角3角速度");
subplot(1,6,4);plot((1:1:angle)/100,abs(x_ts(3,:)));xlabel("时间");ylabel("速度");title("杆5速度");
subplot(1,6,5);plot((1:1:angle)/100,y_ts(2,:));xlabel("时间");ylabel("加速度");title("角3角加速度");
subplot(1,6,6);plot((1:1:angle)/100,y_ts(3,:));xlabel("时间");ylabel("加速度");title("杆5加速度");
代码可自行更改角度变化的步长,角度变化的起始与终点,变更起始电需要改变存储数据的数组大小,如果嫌预分配数组内存在改变数组大小的情况下使用麻烦,可以参考如下的数据存储方法:
dataset = [];
for i=1:...
data = ...%这里是每次循环得出的结果
dataset = [dataset data];%存储结果
end
这个方法可以很方便的存储数据,改变数组大小也不会有影响,但是由于没用预分配内存,速度会变慢。
结果如图:
结果其实作者也不能验证对不对,作学习记录用。
参考文献: 孙恒,机械原理[M]. 北京:高等教育出版社,2013.5