张海涛424064第三次作业.docx
《张海涛424064第三次作业.docx》由会员分享,可在线阅读,更多相关《张海涛424064第三次作业.docx(32页珍藏版)》请在冰豆网上搜索。
张海涛424064第三次作业
四连杆机构动力学分析
使用ADAMS建立如图1所示的四连杆机构,二杆长150mm,三杆长500mm,四杆长450mm,二杆所受的转矩为40
,三个杆都受重力,二杆初始角度为90度。
运用欧拉法,用Matlab对该系统进行动力学分析,并与ADAMS仿真结果进行对比。
力矩
二杆
四杆
三杆
图1四杆机构
一、动力学分析
1、外力矢量为:
2、外力所做的虚功为:
3、系统的约束方程为:
4、求雅克比矩阵
由系统的约束方程,求雅克比矩阵得
。
具体程序见附录一,可得雅克比矩阵
:
5、求
具体程序见附录二,可得
:
6、系统的动力学方程为:
其中:
使用欧拉迭代法就可以计算出各个曲线,循环运算1666667次,具体Matlab程序见附录三。
二、说明
1、由于本程序采用欧拉迭代法求解,所以计算过程有误差。
当仿真时间越长时,与ADAMS曲线相差越大,但曲线形状一致,只有相位提前。
2、Matlab的仿真时间间隔越小,仿真结果越真实。
但当间隔非常小时,再降低时间间隔仿真结果相差不大。
3、当ADMAS的仿真步数很大时,再增加仿真步数对结果影响很小。
4、当改变ADAMS的误差时,仿真结果也有差别,如图2-6所示。
当误差小于10-6时,再减小误差,曲线差别很小。
5、由于在ADAMS中只能由三个点测角度,三杆的角度无法测量。
所以再建立两个辅助杆,并设这两个辅助杆的质量和转动惯量都为零,用于测量三杆的角度,如图2中辅助杆1和辅助杆2。
再就可以测量由E、F、G点组成的角度作为三杆的角度。
点G
辅助杆2
辅助杆1
图2辅助测量杆
图3误差为1*10-3二杆质心X方向位移变化曲线
图4误差为5*10-3二杆质心X方向位移变化曲线
图5误差为1*10-4二杆质心X方向位移变化曲线
图6误差为1*10-6二杆质心X方向位移变化曲线
图7误差为1*10-9二杆质心X方向位移变化曲线
三、Matlab与ADAMS仿真曲线对比
图8铰链1处作用力变化曲线
图9铰链2处作用力变化曲线
图10铰链3处作用力变化曲线
图11铰链4处作用力变化曲线
图12二杆位置变化曲线
图13三杆位置变化曲线
图14四杆位置变化曲线
图15二杆速度变化曲线
图16三杆速度变化曲线
图17四杆速度变化曲线
图18二杆加速度变化曲线
图19三杆加速度变化曲线
图20四杆加速度变化曲线
附录一:
求雅克比矩阵的Matlab程序
clc
clear
symsl2l3l4l5;
symsm2m3m4;
symsx4x5x6x7x8x9x10x11x12
g=[x4-l2/2*cos(x6);
x5-l2/2*sin(x6);
x4+l2/2*cos(x6)-x7+l3/2*cos(x9);
x5+l2/2*sin(x6)-x8+l3/2*sin(x9);
x7+l3/2*cos(x9)-x10+l4/2*cos(x12);
x8+l3/2*sin(x9)-x11+l4/2*sin(x12);
x10+l4/2*cos(x12)-l5;
x11+l4/2*sin(x12);
]
cq=jacobian(g,[x4x5x6x7x8x9x10x11x12])
m=[m200000000;
0m20000000;
00m2/12*(l2)^2000000;
000m300000;
0000m30000;
00000m3/12*(l3)^2000;
000000m400;
0000000m40;
00000000m4/12*(l4)^2]
o=zeros(8,8);
cq1=cq.';
A=[mcq1;cqo]
附录二:
求
的Matlab程序
clc
clear
symsl2l3l4l5;
symsm2m3m4;
symsx4x5x6x7x8x9x10x11x12
symsy4y5y6y7y8y9y10y11y12
h=[y4+y6*l2/2*sin(x6);
y5-y6*l2/2*cos(x6);
y4-y6*l2/2*sin(x6)-y7-y9*l3/2*sin(x9);
y5+y6*l2/2*cos(x6)-y8+y9*l3/2*cos(x9);
y7-y9*l3/2*sin(x9)-y10-y12*l4/2*sin(x12);
y8+y9*l3/2*cos(x9)-y11+y12*l4/2*cos(x12);
y10-y12*l4/2*sin(x12);
y11+y12*l4/2*cos(x12);;
]
qd1=jacobian(h,[x4x5x6x7x8x9x10x11x12]);
q=[y4y5y6y7y8y9y10y11y12].';
qd=-qd1*q
附录三:
用欧拉迭代法进行动力学分析的Matlab程序
%对四杆机构进行动力学分析
clear
clc
m2=1.1289713258;%三个杆的质量kg
m3=3.3132513258;
m4=3.0012113258;
g=9806.65;%重力加速度9806.65mm/s2
l2=150;%二杆长度mm
l3=500;%三杆长度mm
l4=450;%四杆长度mm
l5=400;%两个底座之间的距离mm
M=40000%二杆扭矩为40000N.mm
dt=0.000003;%步长
t=0:
dt:
5;%设置时间为5s
n=length(t)%仿真步数
q=zeros(9,n);%产生9行n列的零矩阵
q_v=zeros(9,n);
q_ac=zeros(9,n);
q(1:
9,1)=[075pi/22003000.6435011094002251.5*pi];%设置迭代初值,也是三个杆的初始位置
force=zeros(8,n);
%%用欧拉法对滑块连杆机构进行位置分析,速度分析,加速度分析。
动力学方程的左边矩阵,AX=B,求解XA=[MCqT;Cq0]
fori=1:
n
A=[m2,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0
0,m2,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0
0,0,(l2^2*m2)/12,0,0,0,0,0,0,(l2*sin(q(3,i)))/2,-(l2*cos(q(3,i)))/2,-(l2*sin(q(3,i)))/2,(l2*cos(q(3,i)))/2,0,0,0,0
0,0,0,m3,0,0,0,0,0,0,0,-1,0,1,0,0,0
0,0,0,0,m3,0,0,0,0,0,0,0,-1,0,1,0,0
0,0,0,0,0,(l3^2*m3)/12,0,0,0,0,0,-(l3*sin(q(6,i)))/2,(l3*cos(q(6,i)))/2,-(l3*sin(q(6,i)))/2,(l3*cos(q(6,i)))/2,0,0
0,0,0,0,0,0,m4,0,0,0,0,0,0,-1,0,1,0
0,0,0,0,0,0,0,m4,0,0,0,0,0,0,-1,0,1
0,0,0,0,0,0,0,0,(l4^2*m4)/12,0,0,0,0,-(l4*sin(q(9,i)))/2,(l4*cos(q(9,i)))/2,-(l4*sin(q(9,i)))/2,(l4*cos(q(9,i)))/2
1,0,(l2*sin(q(3,i)))/2,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,1,-(l2*cos(q(3,i)))/2,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1,0,-(l2*sin(q(3,i)))/2,-1,0,-(l3*sin(q(6,i)))/2,0,0,0,0,0,0,0,0,0,0,0
0,1,(l2*cos(q(3,i)))/2,0,-1,(l3*cos(q(6,i)))/2,0,0,0,0,0,0,0,0,0,0,0
0,0,0,1,0,-(l3*sin(q(6,i)))/2,-1,0,-(l4*sin(q(9,i)))/2,0,0,0,0,0,0,0,0
0,0,0,0,1,(l3*cos(q(6,i)))/2,0,-1,(l4*cos(q(9,i)))/2,0,0,0,0,0,0,0,0
0,0,0,0,0,0,1,0,-(l4*sin(q(9,i)))/2,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,1,(l4*cos(q(9,i)))/2,0,0,0,0,0,0,0,0];
B=[0;-m2*g;M;0;-m3*g;0;0;-m4*g;0;...%B=[0;-m1*g;M;0;-m2*g;0;0;-m3*g;0;Qd]
-(l2*q_v(3,i)^2*cos(q(3,i)))/2
-(l2*q_v(3,i)^2*sin(q(3,i)))/2
(l2*cos(q(3,i))*q_v(3,i)^2)/2+(l3*cos(q(6,i))*q_v(6,i)^2)/2
(l2*sin(q(3,i))*q_v(3,i)^2)/2+(l3*sin(q(6,i))*q_v(6,i)^2)/2
(l3*cos(q(6,i))*q_v(6,i)^2)/2+(l4*cos(q(9,i))*q_v(9,i)^2)/2
(l3*sin(q(6,i))*q_v(6,i)^2)/2+(l4*sin(q(9,i))*q_v(9,i)^2)/2
(l4*q_v(9,i)^2*cos(q(9,i)))/2
(l4*q_v(9,i)^2*sin(q(9,i)))/2];
temp=A\B;
q_ac(:
i)=temp(1:
9);%解的前9项为杆的加速度和角加速度
force(:
i)=temp(10:
17);%解的后8项为铰链处的力
ifi==n;
break
end
q_v(:
i+1)=q_v(:
i)+dt*q_ac(:
i);
q(:
i+1)=q(:
i)+dt*q_v(:
i);
end
%%二杆质心位移
%二杆质心X位移变化
h1=figure
(1);
set(h1,'name','二杆质心位移');
subplot(311)
plot(t,q(1,:
),'b-')
holdon;
data1=load('gan2_xy.tab');
plot(data1(:
1),data1(:
2),'r-');
xlabel('时间t/s')
ylabel('位移/m')
title('二杆质心X位移变化')
legend('matlab','adams')
%二杆质心Y位移变化
subplot(312)
plot(t,q(2,:
),'b-')
holdon;
plot(data1(:
1),data1(:
3),'r-');
xlabel('时间t/s')
ylabel('位移/m')
title('二杆质心Y位移变化')
legend('matlab','adams')
%二杆质心角度变化
subplot(313)
plot(t,q(3,:
),'b-')
holdon;
data0=load('gan234_a.tab');
plot(data0(:
1),data0(:
2),'r-');
xlabel('时间t/s')
ylabel('角度rad')
title('二杆质心角度变化')
legend('matlab','adams')
%%三杆质心位移
%三杆质心X位移变化
h2=figure
(2);
set(h2,'name','三杆质心位移');
subplot(311)
plot(t,q(4,:
),'b-')
holdon;
data2=load('gan3_xy.tab');
plot(data2(:
1),data2(:
2),'r-');
xlabel('时间t/s')
ylabel('位移/m')
title('三杆质心X位移变化')
legend('matlab','adams')
%三杆质心Y位移变化
subplot(312)
plot(t,q(5,:
),'b-')
holdon;
plot(data2(:
1),data2(:
3),'r-');
xlabel('时间t/s')
ylabel('位移/m')
title('三杆质心Y位移变化')
legend('matlab','adams')
%三杆质心角度变化
subplot(313)
plot(t,q(6,:
),'b-')
holdon;
plot(data0(:
1),data0(:
3),'r-');
xlabel('时间t/s')
ylabel('角度rad')
title('三杆质心角度变化')
legend('matlab','adams')
%%四杆质心位移
%四杆质心X位移变化
h3=figure(3);
set(h3,'name','四杆质心位移');
subplot(311)
plot(t,q(7,:
),'b-')
holdon;
data3=load('gan4_xy.tab');
plot(data3(:
1),data3(:
2),'r-');
xlabel('时间t/s')
ylabel('位移/m')
title('四杆质心X位移变化')
legend('matlab','adams')
%四杆质心Y位移变化
subplot(312)
plot(t,q(8,:
),'b-')
holdon;
plot(data3(:
1),data3(:
3),'r-');
xlabel('时间t/s')
ylabel('位移/m')
title('四杆质心Y位移变化')
legend('matlab','adams')
%四杆质心角度变化
subplot(313)
plot(t,q(9,:
),'b-')
holdon;
plot(data0(:
1),data0(:
4)+pi,'r-');
xlabel('时间t/s')
ylabel('角度rad')
title('四杆质心角度变化')
legend('matlab','adams')
%%二杆质心速度变化
%二杆质心X速度变化
h4=figure(4);
set(h4,'name','二杆质心速度');
subplot(311)
plot(t,q_v(1,:
),'b-')
holdon;
data4=load('gan2v_xya.tab');
plot(data4(:
1),data4(:
2),'r-');
xlabel('时间t/s')
ylabel('速度m/s')
title('二杆质心X速度变化')
legend('matlab','adams')
%二杆质心Y速度变化
subplot(312)
plot(t,q_v(2,:
),'b-')
holdon;
plot(data4(:
1),data4(:
3),'r-');
xlabel('时间t/s')
ylabel('速度m/s')
title('二杆质心Y速度变化')
legend('matlab','adams')
%二杆质心角速度变化
subplot(313)
plot(t,q_v(3,:
),'b-')
holdon;
plot(data4(:
1),data4(:
4),'r-');
xlabel('时间t/s')
ylabel('角速度rad/s')
title('二杆质心角速度变化')
legend('matlab','adams')
%%三杆质心速度变化
%三杆质心X速度变化
h5=figure(5);
set(h5,'name','三杆质心速度');
subplot(311)
plot(t,q_v(4,:
),'b-')
holdon;
data5=load('gan3v_xya.tab');
plot(data5(:
1),data5(:
2),'r-');
xlabel('时间t/s')
ylabel('速度m/s')
title('三杆质心X速度变化')
legend('matlab','adams')
%三杆质心Y速度变化
subplot(312)
plot(t,q_v(5,:
),'b-')
holdon;
plot(data5(:
1),data5(:
3),'r-');
xlabel('时间t/s')
ylabel('速度m/s')
title('三杆质心Y速度变化')
legend('matlab','adams')
%三杆质心角速度变化
subplot(313)
plot(t,q_v(6,:
),'b-')
holdon;
plot(data5(:
1),data5(:
4),'r-');
xlabel('时间t/s')
ylabel('角速度rad/s')
title('三杆质心角速度变化')
legend('matlab','adams')
%%四杆质心速度变化
%四杆质心X速度变化
h6=figure(6);
set(h6,'name','四杆质心速度');
subplot(311)
plot(t,q_v(7,:
),'b-')
holdon;
data6=load('gan4v_xya.tab');
plot(data6(:
1),data6(:
2),'r-');
xlabel('时间t/s')
ylabel('速度m/s')
title('四杆质心X速度变化')
legend('matlab','adams')
%四杆质心Y速度变化
subplot(312)
plot(t,q_v(8,:
),'b-')
holdon;
plot(data6(:
1),data6(:
3),'r-');
xlabel('时间t/s')
ylabel('速度m/s')
title('四杆质心Y速度变化')
legend('matlab','adams')
%四杆质心角速度变化
subplot(313)
plot(t,q_v(9,:
),'b-')
holdon;
plot(data6(:
1),data6(:
4),'r-');
xlabel('时间t/s')
ylabel('角速度rad/s')
title('四杆质心角速度变化')
legend('matlab','adams')
%%二杆质心加速度
%二杆质心X加速度变化
h7=figure(7);
set(h7,'name','二杆质心加速度');
subplot(311)
plot(t,q_ac(1,:
),'b-')
holdon;
data7=load('gan2ac_xya.tab');
plot(data7(:
1),data7(:
2),'r-');
xlabel('时间t/s')
ylabel('加速度m/s^2')
title('二杆质心X加速度变化')
legend('matlab','adams')
%二杆质心Y加速度变化
subplot(312)
plot(t,q_ac(2,:
),'b-')
holdon;
plot(data7(:
1),data7(:
3),'r-');
xlabel('时间t/s')
ylabel('加速度m/s^2')
title('二杆质心Y加速度变化')
legend('matlab','adams')
%二杆质心角加速度变化
subplot(313)
plot(t,q_ac(3,:
),'b-')
holdon;
plot(data7(:
1),data7(:
4),'r-');
xlabel('时间t/s')
ylabel('角加速度rad/s^2')
title('二杆质心角加速度变化')
legend('matlab','adams')
%%三杆质心加速度
%三杆质心X加速度变化
h8=figure(8);
set(h8,'name','三杆质心加速度');
subplot(311)
plot(t,q_ac(4,:
),'b-')
holdon;
data8=load('gan3ac_xya.tab');
plot(data8(:
1),data8(:
2),'r-');
xlabel('时间t/s')
ylabel('加速度m/s^2')
title('三杆质心X加速度变化')
legend('matlab','adams')
%三杆质心Y加速度变化
subplot(312)
plot(t,q_ac(5,:
),'b-')
holdon;
plot(data8(:
1),data8(:
3),'r-');
xlabel('时间t/s')
ylabel('加速度m/s^2')
title('三杆质心Y加速度变化')
legend('matlab','adams')
%三杆质心角加速度变化
subplot(313)
plot(t,q_ac(6,:
),'b-')
holdon;
plot(data8(:
1),data8(:
4),'r-');
xlabel('时间t/s')
ylabel('角加速度rad/s^2')
title('三杆质心角加速度变化')
legend('matlab','adams')
%%四杆质心加速度
%四杆质心X加速度变化
h9=figure(9);
set(h9,'name','四杆质心加速度');
subplot(311)
plot(t,q_ac(4,:
),'b-')
holdon;
data9=load('gan3ac_xya.tab');
plot(data9(:
1),data9(:
2),'r-');
xlabel('