matlab四连杆带代码上课讲义Word格式.docx
《matlab四连杆带代码上课讲义Word格式.docx》由会员分享,可在线阅读,更多相关《matlab四连杆带代码上课讲义Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
在铰链四杆机构中,如果某个转动副能够成为整转副,则它所连接的两个构件中,必有一个为最短杆,并且四个构件的长度关系满足杆长之和条件。
在有整装副存在的铰链四杆机构中,最短杆两端的转动副均为整转副。
此时,如果取最短杆为机架,则得到双曲柄机构;
若取最短杆的任何一个相连构件为机架,则得到曲柄摇杆机构;
如果取最短杆对面构件为机架,则得到双摇杆机构。
如果四杆机构不满足杆长之和条件,则不论选取哪个构件为机架,所得到机构均为双摇杆机构。
上述系列结论称为格拉霍夫定理。
运用条件分析:
1.Lmax+Lmin>其余两杆之和,------此铰链四杆机构为双摇杆机构;
2.Lmax+Lmin≤其余两杆之和,要具体分析:
(1)Lmin为机架------为双曲柄机构
(2)Lmin为连架杆------为曲柄摇杆机构(Lmin为曲柄)
(3)Lmin为连杆------为双摇杆机构
1.3、理论分析
对图1的四连杆机构列出方程组。
其中L1、L2、L3、L4为四根杆,L4为机架。
由此两个方程消去
,便可得到一个关于
的函数
F(
)
=
然后用隐函数求出
另解出角速度:
2、Matlab的实现
(一)数据分析
给出了3组数据:
a)L1=8;
L2=25;
L3=20;
L4=20;
b)L1=7;
L2=9;
L3=11;
L4=4;
c)L1=7;
L2=6.2;
L3=10;
L4=6;
用格拉霍夫定理进行分析得到:
a为曲柄摇杆机构;
b为双曲柄机构;
c双摇杆机构;
(二)Matlab求解并进行动画模拟
(曲柄摇杆机构)
图像
实时动画模拟(部分截屏)
W2的图像
说明:
其中w2
(1)为先符号求导再赋值计算,w2
(2)为直接数值求导。
(下同)
b)L1=7;
(双曲柄机构)
c)L1=7;
(双摇杆机构)
3、结果分析
对
的角速度w2的求值得两种方法中,分析图像知:
符号求导再代入数值更容易出现大的偏差(w2的图像中的红线)。
直接用数值求导得到的解更平稳。
4、程序
1、函数文件dd.m
functionF=dd(y)
globalL1L2L3L4p
x=p;
F=((L3*cos(y)+L4-L1*cos(x))^2)+((L3*sin(y)-L1*sin(x))^2)-(L2^2);
2、计算
的文件y_figure.m
globalL1L2L3L4p%传递参数
%L1=8;
%曲柄摇杆机构
%L1=7;
%双曲柄机构
L1=7;
%双摇杆机构
%L1=9;
L2=5;
L4=7;
Ltotal=L1+L2+L3+L4;
Lmax=max([L1L2L3L4]);
[Lmin,I]=min([L1L2L3L4]);
m=100;
b=0;
while(Lmax+Lmin)>
=(Ltotal/2)
str='
双摇杆机构'
;
b=1;
break
end
while(Lmax+Lmin)<
(Ltotal/2)
ifI==4
双曲柄机构'
elseifI==1||I==3
曲柄摇杆机构'
elseifI==2
end
switchb
case0
x=linspace(0,2*pi,m);
%确定隐函数自变量的范围
y0=0.7341;
%第一个方程的初值
case1
a=0.58;
m=80;
x=linspace(a,(2*pi-a),m);
y0=1.2465;
y=[];
f=[];
fork=1:
m
p=x(k);
[y1,fval,exitflag,output]=fzero('
dd'
y0);
y0=y1;
y=[y,y1];
f=[f,fval];
end
figure
plot(x(1:
m),y(1:
m),'
r.-'
),%绘制隐函数图形
gridon
3、计算w2的文件w_figure.m
globalL1L2L3L4w1
w1=100;
symsxxyy
%xx为输入杆转角,yy为输出角转角
F=L1*cos(xx)+L2*(1-((L3*sin(yy)-L1*sin(xx))/(L2))^2)^(1/2)-L3*cos(yy)-L4;
w=(-1)*(diff(F,xx)/diff(F,yy))*w1;
w21=subs(w,{xx,yy},{x,y});
%用隐函数求导
t=x/w1;
w22=diff(y)./diff(t);
%直接数值求导
plot(w21,'
r'
holdon
plot(w22,'
k'
4、实时动画文件siliangan.m
pic=figure('
name'
str);
set(pic,'
color'
'
white'
);
axisequal
gridon
axis([-10,30,-10,20]);
axison
globalL1L3L4
xa=0;
ya=0;
%A点坐标
xd=L4;
yd=0;
%D点坐标
xb=L1*cos(x
(1));
yb=L1*sin(x
(1));
%B点坐标
xc=L3*cos(y
(1))+L4;
yc=L3*sin(y
(1));
%C点坐标
stick_1=line([xa;
xb],[ya;
yb],'
red'
linewidth'
5,'
linestyle'
-'
stick_2=line([xb;
xc],[yb;
yc],'
g'
stick_3=line([xc;
xd],[yc;
yd],'
b'
stick_0=line([xd;
xa],[yd;
ya],'
y'
dot_a=line(xa,ya,'
.'
markersize'
30);
dot_b=line(xb,yb,'
black'
dot_c=line(xc,yc,'
[0.10.70.3],'
dot_d=line(xd,yd,'
dt=2*pi/m;
k=1;
while1
ifk>
m;
k=1;
xb=L1*cos(x(k))+xa;
yb=L1*sin(x(k))+ya;
xc=L3*cos(y(k))+L4;
yc=L3*sin(y(k));
set(stick_1,'
xdata'
[xa;
xb],'
ydata'
[ya;
yb]);
set(stick_2,'
[xc;
[yc;
set(stick_3,'
[xd;
xc],'
[yd;
yc]);
set(dot_b,'
xb,'
yb);
set(dot_c,'
xc,'
yc);
set(gcf,'
doublebuffer'
on'
drawnow;
pause
k=k+1;