matlab课程设计MATLAB应用及系统仿真.doc
课程设计课 程 设 计课程名称: MATLAB语言及系统仿真设计题目: MATLAB应用及系统仿真 学 院: 电气信息学院 学 系: 电气自动化研究所 专 业: 电气工程及其自动化 年 级: 学 号: 姓 名: 指导老师: 2012年 6月 30 日课程设计任务书一本课程设计的目的(1)熟练掌握MATLAB的基本知识和技能,解决简单系统的仿真问题; (2)掌握基本MATLAB的绘图与GUI的设计方法;(3)掌握线性微分方程的求解方法及控制系统的分析方法;(4)掌握Simulink的模型建立和仿真方法;(5)理解电气系统仿真、虚拟现实仿真和机构系统仿真的应用;(6)培养分析、解决问题的能力,提高实验报告和科技论文写作能力。二课程设计的时间第14周至16周,在第18周的周末(6月30日)前提交到课程网站上。三课程设计的任务应用MATLAB和工具箱完成以下的系统设计与仿真。1绘图与GUI的设计;(20分)2利用Simulink建立以下的模型并进行仿真分析:(40分)1)线性微分2)时域分析3)频域分析4)误差分析3工具箱的应用;1)电气系统仿真分析(8分)2)利用Stateflow实现简单的计数器(8分)3)利用VR完成飞机围绕摩天大楼作环形飞行;(8分)4)球体的变形仿真;(8分)5)建立平面四连杆连杆仿真模型。(8分)四课程设计的要求1. 系统软件界面设计美观,控件摆放整齐,通过菜单能打开相应模型,并能进行分析;2. 程序调试通过后,完成程序文档的处理,源代码添加必要的注释和功能说明;3. 粘贴所建立的模型图,开始运行的视图和结束时的视图(可粘多个用以说明操作过程或参数设置,每个图的下方要有文字说明图的标题);4. 写出心得体会;5. 按照课程设计模板的规格书写本课程设计报告;6. 提交文件格式:(XXXX-为学号后四位)将课程设计报告的电子文档单独提交,将系统开发的所有文件放到一个文件夹里打包后上传到课程网站上; 课程设计报告:MXXXX.doc 系统开发文件打包为MXXXX.rar。五、创新要求 在完成本课题的基础上,如有能力和时间可以增加一些创新特色,完成更多功能和界面设计得更加完美。 评阅人: 成绩: 年 月 日课程设计报告MATLAB应用及系统仿真一. 绘图与GUI的设计1参照例题,完成如下的GUI界面设计2参照下表设计系统菜单MenuMenu item备注LableTagLableTag文件File打开Open保存Save打印Print关闭Close系统仿真Simulat线性微分Diff4.2时域分析Times4.4频域分析Frequency 例14-10误差分析err_ansy5.2工具应用Tools_APP电气仿真计数器CounterStateflow飞行FlyVR变形TransfVR四连杆Fourbar关于About退出Exit“关于”菜单能够打开一个新的窗口,显示你的软件信息,至少包含你的学号和姓名。“退出”菜单直接退出系统。“关闭”菜单,应能弹出一对话框,确认是否退出。二. 利用Simulink建立以下的模型并进行仿真分析(一)建立线性微分方程的模型,并绘制仿真结果曲线.1建立模型ex4_2.mdl:建立Simulink仿真模型:2系统仿真参数设置:在模型的initFcn回调函数中加入初始条件:t=1;在模型的StopFcn回调函数中加入作图命令:plot(tout,yout);在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system('ex4_2');end3仿真结果分析:(图及简单说明)仿真结果为: 利用ode45() 求解题目中所给的微分方程,仿真时间设置为10s,仿真结果说明调用函数ode45() 是可行的。(二)时域分析1建立模型:建立起如下图所示的非线性系统的Simulink框图,并观察在单位阶跃信号输入下系统的输出曲线和误差曲线。建立Simulink仿真模型:2系统仿真参数设置: 在模型的StopFcn回调函数中加入作图命令:subplot(2,1,1);plot(tout,yout(:,1);title('out1');subplot(2,1,2)plot(tout,yout(:,2);title('out2'); 在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system('shiyufenxi');end3仿真结果分析:(图及简单说明)仿真结果为:利用ode45()函数进行仿真,仿真时间设置为10s。图中out1曲线为输出曲线,out2曲线为误差曲线,从误差曲线可知,2s内误差约为于0,仿真结果的精度较高;25s的时间内,误差在±50以内,仿真结果的精度较好;510s的时间内,误差曲线先上升再下降,在6s左右时误差达到最大。(三)频域分析1题目:单位负反馈系统的开环传递函数为,试绘制闭环系统的Bode图、Nyquist图和Nichols图,并给出闭环频率特性性能指标谐振峰值、谐振频率和系统带宽。建立Simulink仿真模型:2系统仿真参数设置及程序代码: 在模型的stopFcn回调函数中加入作图命令:s=tf('s');Gk=1/s/(0.5*s+1)/(s+1);G=feedback(Gk,1); %闭环系统的传递函数w=logspace(-1,1); %从10-1101共50个频率值mag,phase,w=bode(G,w); %返回闭环系统Bode图参数Mp,k=max(mag); %谐振峰值resonantPeak=20*log10(Mp) %谐振峰值单位转换resonantFreq=w(k) %谐振频率n=1;while 20*log10(mag(n)>=-3n=n+1;endsubplot(2,1,1)nyquist(G,w) subplot(2,1,2)nichols(G,w) figure(2);bandwidth=w(n) %系统带宽bode(G,w),grid; %系统Bode图 在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system('pinyufenxi');end3仿真结果分析:(图及简单说明)第1个图形是系统的Bode图;第2个图的上面那块是系统的Nyquist图;下面那块图形是系统的Nichols图。闭环频率特性性能指标谐振峰值、谐振频率和系统带宽,分别是:谐振峰值:resonantPeak = 5.2388谐振频率:resonantFreq = 0.7906系统带宽:bandwidth = 1.2649(四)误差分析1题目:对如下系统模型,假设已知误差信号e(t),试增加求取ITAE,ISE,ISTE准则的封装模块。要求:误差信号e(t)为该模块的输入信号,双击该模块弹出一个对话框,允许用户用列表框的方式选择输出信号形式、待选定的ITAE,ISE,ISTE之一作为模块的输出端显示出来。在系统回调函数中,绘制所选定准则的曲线图。控制系统框图系统模型图建立Simulink仿真模型:2系统仿真参数设置及程序代码: 在模型的stopFcn回调函数中加入作图命令:subplot(2,1,1);plot(tout,yout(:,1);title('Output');subplot(2,1,2);plot(tout,yout(:,2);title('Error'); 在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system('work4');end3仿真结果分析:(图及简单说明)系统输出曲线和ITAE曲线如下图所示:系统输出曲线和ISE曲线如下图所示:系统输出曲线和ISTE曲线如下图所示:三. 工具箱的应用(一).实现一个电气系统仿真模型(P317中3,4,5之一)操作过程描述第1步:打开simulink,新建一个model并保存为b763b.mdl; 第2步:建立相应的电路,并接入电压源、三极管的工作电压源和电压表,还有各种信号源(如Chirp Signal 信号、Repeating Sequence 信号和Step 信号等);第3步:更改各元件的名称并设置相应的参数,其中电阻设为,电容设为,正弦信号的Frequency(rad/sec)设置为10,三极管的工作电压源(Positive Supply Rain)的Constant voltage设置为;第4步:在模型的stopFcn回调函数中加入作图命令:plot(tout,yout);仿真模型建立Simulink仿真模型:仿真参数设置在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system('b763b');end系统仿真分析及结果图:仿真结果如图所示Chirp Signal 信号 Repeating Sequence 信号 Ramp 信号 Sine Wave 信号 Step 信号(二)用Stateflow实现一个简单的计数器操作过程描述具体操作步骤为:第1步:打开simulink,新建一个model并保存为time.mdl;第2步:在新建的model中添加stateflow模块中的chart、sourse模块中的Pulse Generator和Sinks模块中的Out1;第3步:双击chart,进入stateflow的编辑器,点击tool菜单下的explore,在左边支开的time中选中chart,添加一个事件和两个数据,并进行相关的设置第4步:在stateflow编辑器中画出状态图并进行相关的设置第5步:在time.mdl窗口下将simulation parameters的stop time改成200,并在模型的InitFcn回调函数中加入初始条件:maxtime=10;同时在stopFcn回调函数中加入作图命令:plot(tout,yout)仿真模型建立Simulink仿真模型:chart内部设计仿真参数设置 Simulink模型的参数设置: 在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system('time');end系统仿真分析及结果图:仿真结果如图所示:(三)利用VR完成飞机围绕摩天大楼作环形飞行。实现例5-29飞机围绕摩天大楼作环形飞行模拟显示。简单描述操作过程:具体操作步骤为:第1步:在VR-Builder 2中新建一个虚拟世界,单击“背景”按钮给虚拟世界添加背景,并在groundColor中,进行颜色设置。第2步:选择Library|Import from|Objects Library,从Archetecture(Building)组中选择Skyscraper对象,将它拖到虚拟现实对象编辑窗口,改写其名称为Skyscraper,并修改相关属性第3步:选择Library|Import from|Objects Library,从Transportation(Air)组中选择Boeing737对象,将它拖到虚拟现实对象编辑窗口,改写其名称为Plane,并修改相关属性。保存文件,命名为“myvrml5.wrl”。第4步:打开simulink,新建一个model并保存为myvrml5.mdl;按照下面Simulink模型建立相应的模型,并把VR Sink模块复制到model中。第5步:双击VR Sink,在Source file中选择myvrml5.wrl,然后在右侧树形浏览框中,打开Plane节点,选择center和scale选项,用来在Simulink模型中接收信号。第6步:把Plane.center和Plane.rotation两个输入端子接入到已建立的Simulink模型中,保存后运行。建立Simulink仿真模型:在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system(' myvrml5');end系统仿真结果图:双击打开VR Sink界面,并点击开始运行,飞机就围绕摩天大楼顺时针且向上飞行,如下图所示。飞行过程中飞行结束时(四)球体的变形仿真定义两个块体表示刚性平面(B1,B2),在两个平面之间定义一个球体(S),三个物体是是沿X轴对齐的,两个块体以同样的速度向球体S移动,当两个块体接触到球体时,球体开始变形,沿X轴收缩,Y轴和Z轴膨胀。物体中心位置物体尺寸B13 0 00.3 1 1B2-3 0 00.3 1 1S0 0 0 r=0.9操作过程描述:具体操作步骤为:第1步:在VR-Builder 2中新建一个虚拟世界,单击“背景”按钮给虚拟世界添加背景,并在groundColor中,进行颜色设置。第2步:在New World中新增一个BOX块体B2,并修改相关属性:在Translation中,修改块体的中心位置为-3 0 0;在Sphere-Box中,修改块体的大小为0.3 1 1;在Shape-Material-diffuseColor中,修改块体的颜色。第3步:在New World中新增一个BOX块体B1,并修改相关属性:在Translation中,修改块体的中心位置为3 0 0;在Sphere-Box中,修改块体的大小为0.3 1 1;在Shape-Material-diffuseColor中,修改块体的颜色。第4步:修改球体S的相关属性:在Sphere-Radius中,修改球体的半径为0.9;在Shape-Material-diffuseColor中,修改球体的颜色,同时保存文件,命名为“myvrml.wrl”。第5步:在MATLAB工作空间中输入“vrtut3”,在打开的Simulink模型中加入Simulink 3D Animation模块中的VR Sink,并保存为“myvrml.mdl”。第6步:双击VR Sink,在Source file中选择myvrml.wrl,然后在右侧树形浏览框中,分别打开B2、B1和S节点,分别选择translation,translation和Scale选项,用来在Simulink模型中接收信号。第7步:将连接到Scope模块的信号线,相应连接到VR Sink上,保存后运行。Simulink模型:VR Sink内部界面设计:在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system('myvrml');end系统仿真分析及结果图:双击打开VR Sink界面,点击开始运行,两个块体开始同时按相同的速度向中间的球体运动,在未接触前球体保持静止状态。在两个块体接触到球体时,球体开始被挤压变形,直到最后球体被完全压扁,如下图所示。两个块体向球体运动时:球被压扁时(五).建立平面四连杆仿真模型实现例7-17平面四连杆机构的运动仿真。简单描述操作过程:仿真框图绘制:仿真框图绘制过程见课本310311页“仿真框图绘制”;模块参数设置模块参数设置见课本311312页“模块参数设置”;仿真参数设置仿真参数设置见课本314页“仿真参数设置”在系统菜单中添加响应函数:if(findobj('userdata',gcb) disp('仅可打开一个模型');else open_system('c7mmech4');endSimulink模型: 系统仿真分析系统仿真分析见课本314315页。系统仿真运行图:四. 课程设计心得与体会(500字以上)心得与体会:以下是自己在课程设计的完成过程中遇到的一些问题以及得到的一些心得:控件重叠的问题:当控件位置有重叠时,直接放置方式与程序描绘方式不兼容。直接放置方式是指在GUI设计窗口中放置axes控件,程序描绘方式是指在程序中利用plot、subplot函数作图。在同一个fig文件中,如果axes位置有重叠,那么放置的axes控件句柄会消失,变成无效句柄,即出现Invalid handle的错误。所以,其位置不应发生重叠。参数传递的问题:保存:存在handle的ApplicationData中利用setappdata函数将数据保存在对象的“ApplicationData”属性中,利用getappdata函数从对象的“ApplicationData”属性中提取数据,如果没有定义,就为空。例如,假设figure的tag属性是figure1,则setappdata(handles.figure1,A,A)就可以把变量A存放到figure1的“ApplicationData”属性中,名字为A。访问:保存在handles里面,因为Tag是唯一标识控件的属性,所以如果一个控件的Tag属性是a,那么,在fig对应的m文件中,只要含有“handles”作为其输入参数的函数中,就可以使用handles.a对该控件进行访问。其次,可以利用这种方法把自定义的变量保存在handles里面进行存取。当模型仿真时间设置不同值时,可能得到不一样的仿真图形,故应该选择合适的仿真时间。在模型的File/Model Properties/callbacks/Fcn中加plot(tout,yout),能够实现模型运行后直接弹出图形框的效果。球体变形仿真中两版不能压到球的问题:应将仿真时间设置得大一些,亦可以设置成Inf。Stateflow实现简单的计数器不能计数的问题:应将maxtime这个data的scope参数改成paramer,而非constant。利用VR完成飞机围绕摩天大楼作环形飞行时,在添加飞机时,要注意不要将飞机添加到摩天大楼使他们成为一个整体,导致后面不能完成设计。总的来说,课程设计的完成对自己在Matlab应用的综合能力有不小的提升,通过与同学的交流,学习,不断提高,体味到在学习中通过交流解决疑问的乐趣和重要性。五. 参考文献(1)薛定宇,陈阳泉,基于MATLAB/Simulnk的系统仿真技术与应用,北京:清华大学出版社,2011(2)赵广元,MATLAB与控制系统仿真实践,北京:北京航空航天大学出版社,2009(3)黄永安,马路,刘慧敏.MATLAB 7.0/Simulnk 6.0建模仿真开发与高级工程应用,北京:清华大学出版社,2005 (4)张家祥,方凌江,毛全胜.基于MATLAB 6.X的系统分析与设计虚拟现实,西安电子科技大学出版社,2002 (5)(6)你补充的其他资料