基于matlab-GUI的平面四杆机构的运动分析.docx
- 文档编号:14734811
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:12
- 大小:374.78KB
基于matlab-GUI的平面四杆机构的运动分析.docx
《基于matlab-GUI的平面四杆机构的运动分析.docx》由会员分享,可在线阅读,更多相关《基于matlab-GUI的平面四杆机构的运动分析.docx(12页珍藏版)》请在冰点文库上搜索。
基于matlabGUI的平面四杆机构的运动分析
一、目的
通过matlab对平面四杆机构进行运动仿真,并以GUI界面方式实现输入输出的参数化,对平面四杆机构进行位置分析、速度分析、加速度分析和静力学分析。
此外,通过动画演示,更加形象直观地观察机构的运动过程。
最后,将程序编译成.exe独立可执行文件,可以在其它没有安装matlab的机器上运行。
二、设计思路
通过matlab的GUI功能模块,创建一个图形用户界面,在自动生成的代码框架中对初始化函数和回调函数等进行编辑,建立与控件相关联的程序:
控件属性、位置分析、速度分析、加速度分析、静力学分析、动画演示等。
图1是平面四杆机构的示意图,输入角q的运动规律为q=pi/50*t^2+q0,r1、r2是从动角。
对t时刻沿着杆长距离原点A的任意一点进行分析。
注意:
输入输出角的单位为度,时间t的取值范围为0:
0.05:
10,任意点lx的取值范围为0~a1+a2+a3,估算的从动角r1、r2的迭代初始值不能偏离平衡位置太大。
图1、平面四杆机构示意图
三、设计流程
1、通过GUI模块创建图形用户界面
命令方式:
在Matlab命令窗口键入>>guide;菜单方式:
在Matlab的主窗口中,选择File>New>GUI命令,就会显示GUI的设计模板。
如图1所示。
图2、创建图形界面
2、设计图形界面
在创建之后的图形界面中插入坐标轴axes,静态文本框statictext,编辑文本框edittext,按钮pushbutton等等。
如图所示。
图3、图形界面设计
3、编辑回调函数
1)位置分析:
输入角的函数为:
q=pi/50*t^2+q0。
在时间t=0~10s内,每一个时间点估算两个初始从动角,根据牛顿-拉普森迭代得到准确的机构位置。
10s刚好主动角经历了360度,记录每一时刻的位置,便可以动画演示。
2)速度分析:
输入角速度为:
dq=pi/25*t。
选择杆件上的任意一点(坐标表示为质点沿着杆件到原点A的距离)做分析,正确表达出角速度系数和速度系数,便可以求出质点的速度。
3)加速度分析:
输入角加速度为:
ddq=pi/25。
正确表达出向心系数和角加速度系数,便可以求出质点的加速度。
4)静力学分析:
由虚功原理可知,当广义力Q(V,H)=0(或近似为零)时机构达到平衡,记录该平衡条件下的位置数据。
四、结果演示
1、机构杆长条件判断
1)不符合杆长条件。
如图4所示。
图4、不符合杆长条件
2)符合杆长条件,输出参数。
如图5所示。
图5、符合杆长条件
2、机构运动动画演示。
图6、机构动画演示
五、生成.exe文件
1、安装编译器。
可有多种选择,本机安装的是matlab自带的Lcc-win32;
2、设置编译器。
在matlab命令行输入mbuild–setup,选择安装的lcc编译器;
3、调用编译器。
输入mcc–msgjg,这里sgjg为要转成exe的m文件;
4、安装
MCR是matlab的运行环境,在程序打包时,最好将相应版本的MCR一起打包。
在其它机器上运行exe文件前,首先安装matlab的运行环境MCRInstaller.exe。
六、附录(程序)
functionvarargout=sgjg(varargin)
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@sgjg_OpeningFcn,...
'gui_OutputFcn',@sgjg_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforesgjgismadevisible.
functionsgjg_OpeningFcn(hObject,eventdata,handles,varargin)
%Choosedefaultcommandlineoutputforsgjg
handles.output=hObject;
handles.gx=[];
handles.gy=[];
axis(handles.motion);
imshow('tt.bmp');%机构示意图
%Updatehandlesstructure
guidata(hObject,handles);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=sgjg_OutputFcn(hObject,eventdata,handles)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
functiona1_Callback(hObject,eventdata,handles)
functiona1_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functiona2_Callback(hObject,eventdata,handles)
functiona2_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functiona3_Callback(hObject,eventdata,handles)
functiona3_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functiona4_Callback(hObject,eventdata,handles)
functiona4_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionq0_Callback(hObject,eventdata,handles)
functionq0_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionftol_Callback(hObject,eventdata,handles)
functionftol_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionr1_Callback(hObject,eventdata,handles)
functionr1_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionr2_Callback(hObject,eventdata,handles)
functionr2_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functiont_Callback(hObject,eventdata,handles)
functiont_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionlx_Callback(hObject,eventdata,handles)
functionlx_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionlx2_Callback(hObject,eventdata,handles)
functionlx2_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionlx3_Callback(hObject,eventdata,handles)
functionlx3_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionH_Callback(hObject,eventdata,handles)
functionH_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionV_Callback(hObject,eventdata,handles)
functionV_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionCalculation_Callback(hObject,eventdata,handles)
%hObjecthandletoCalculation(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
a1=str2num(get(handles.a1,'String'));
a2=str2num(get(handles.a2,'String'));
a3=str2num(get(handles.a3,'String'));
a4=str2num(get(handles.a4,'String'));
q0=str2num(get(handles.q0,'String'));
ftol=str2num(get(handles.ftol,'String'));
r1=str2num(get(handles.r1,'String'));
r2=str2num(get(handles.r2,'String'));
V=str2num(get(handles.V,'String'));
H=str2num(get(handles.H,'String'));
q0=q0*pi/180;r1=r1*pi/180;r2=r2*pi/180;
ly1=0;ly2=0;ly3=0;%局部坐标系的第二坐标为0
lx1=a1;lx2=a2;lx3=a3;%局部坐标系的第一坐标设一初始值
lx=str2num(get(handles.lx,'String'));%杆上选择一个数据分析的质点
if(lx<=a1)
lx1=lx;
elseif(lx>=a1+a2)
lx3=lx;
else
lx2=lx;
end
gr1=[];gr2=[];
gdx1=[];gdx2=[];gdx3=[];
gdy1=[];gdy2=[];gdy3=[];
gddx1=[];gddx2=[];gddx3=[];
gddy1=[];gddy2=[];gddy3=[];
k=[a1a2a3a4];
lmin=min(k);
lmax=max(k);
if((lmin+lmax)>(a1+a2+a3+a4)-lmin-lmax)
errordlg('不符合杆长条件!
','Tip')
else
fort=0:
0.05:
10
k=0;
q=pi/50*t^2+q0;
f=[a1*cos(q)+a2*cos(r1)+a3*cos(r2)-a4a1*sin(q)+a2*sin(r1)+a3*sin(r2)]';
while(norm(f)>ftol)
A=[-a2*sin(r1)-a3*sin(r2);a2*cos(r1)a3*cos(r2)];
dr=-A\f;
r1=r1+dr
(1);
r2=r2+dr
(2);
f=[a1*cos(q)+a2*cos(r1)+a3*cos(r2)-a4a1*sin(q)+a2*sin(r1)+a3*sin(r2)]';
k=k+1;%记录迭代次数
end
xa=0;ya=0;
xb=a1*cos(q);yb=a1*sin(q);
xc=a1*cos(q)+a2*cos(r1);yc=a1*sin(q)+a2*sin(r1);
xd=a1*cos(q)+a2*cos(r1)+a3*cos(r2);yd=a1*sin(q)+a2*sin(r1)+a3*sin(r2);x=[xaxbxcxd]';y=[yaybycyd]';
handles.gx=[handles.gxx];%记录机构每一时刻的位置,用于动画演示
handles.gy=[handles.gyy];
%------------------速度分析----------------
dq=pi/25*t;
w1=1;
w2=a1*sin(r2-q)/(a2*sin(r1-r2));
w3=a1*sin(r1-q)/(a3*sin(r2-r1));
u1=(-lx1*sin(q)-ly1*cos(q))*w1;
v1=(lx1*cos(q)-ly1*sin(q))*w1;
u2=-a1*sin(q)-(lx2*sin(r1)+ly2*cos(r1))*w2;
v2=a1*cos(q)+(lx2*cos(r1)-ly2*sin(r1))*w2;
u3=(-lx3*sin(r2)-ly3*cos(r2)+a3*sin(r2))*w3;
v3=(lx3*cos(r2)-ly3*sin(r2)-a3*cos(r2))*w3;
dx1=u1*dq;dy1=v1*dq;%¹¹¼þ1ÉÏÖʵãµÄËÙ¶È
dx2=u2*dq;dy2=v2*dq;
dx3=u3*dq;dy3=v3*dq;
%-------------------加速度分析-----------------------
ddq=pi/25;
dw1=0;
dw2=w2*((w3-1)*atan(r2-q)-(w2-w3)*atan(r1-r2));
dw3=w3*((w2-1)*atan(r1-q)-(w3-w2)*atan(r2-r1));
du1=(-lx1*sin(q)-ly1*cos(q))*dw1+(-lx1*cos(q)+ly1*sin(q))*w1^2;
dv1=(lx1*cos(q)-ly1*sin(q))*dw1+(-lx1*sin(q)-ly1*cos(q))*w1^2;
du2=-a1*sin(q)*dw1-a1*cos(q)*w1^2-(lx2*sin(r1)+ly2*cos(r1))*dw2-(lx2*cos(r1)-ly2*sin(r1))*w2^2;
dv2=a1*cos(q)*dw1-a1*sin(q)*w1^2+(lx2*cos(r1)-ly2*sin(r1))*dw2-(lx2*sin(r1)+ly2*cos(r1))*w2^2;
du3=-(lx3*sin(r2)+ly3*cos(r2)-a3*sin(r2))*dw3-(lx3*cos(r2)-ly3*sin(r2)-a3*cos(r2))*w3^2;
dv3=(lx3*cos(r2)-ly3*sin(r2)-a3*cos(r2))*dw3-(lx3*sin(r2)+ly3*cos(r2)-a3*sin(r2))*w3^2;
ddx1=u1*ddq+du1*dq^2;ddy1=v1*ddq+dv1*dq^2;%杆1上质点的加速度
ddx2=u2*ddq+du2*dq^2;ddy2=v2*ddq+dv2*dq^2;
ddx3=u3*ddq+du3*dq^2;ddy3=v3*ddq+dv3*dq^2;
%--------------------静力学分析-----------------------------
Q=a1*(V*cos(q)+H*sin(r2)*sin(q-r1)/sin(r1-r2));
ifQ qe=q;re1=r1;re2=r2; end gr1=[gr1r1];gr2=[gr2r2];%记录机构每一时刻的位置、速度、加速度 gdx1=[gdx1dx1];gdx2=[gdx2dx2];gdx3=[gdx3dx3]; gdy1=[gdy1dy1];gdy
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab GUI 平面 机构 运动 分析