系统建模与仿真项目驱动设计报告-基于MATLAB的GUI界面设计

                            **摘  要**

MATLAB语言是一种十分有效得工具,能够容易解决在系统仿真以及控制系统计算机辅助设计领域的解决问题,在本次的系统建模与仿真设计中,需要使用人机交互界面 MATLAB GUI功能设计一个系统仿真GUI界面。由于GUI本身提供了Windows基本控件的支持,并且具有良好的事件驱动机制,所以GUI对于控制系统仿真的平台设计显得十分合适。GUI对于每个用户窗口生成.fig和.m文件,前者负责界面的设计信息,后者负责后台代码的设计。
本次设计主要基于MATLAB GUI平台,结合控制系统基础理论和MATLAB控制系统工具箱,实现用于控制系统计算机辅助分析与设计的软件。主要功能:实现传递函数模型输入、状态方程模型输入、控制系统稳定性分析,绘制系统奈奎斯特、伯德图、根轨迹以及零极点分布图。通过本次课程设计能够把这个学期所学到的大部分知识点融会贯通到一起,可以通过增加新颖的模块来了解跟多的知识,核心设计源于课本,附加功能来自探索。

关键词:控制系统性能分析;MATLAB GUI界面设计;系统仿真设计

目 录
第一章 概述 1
1.1 项目设计背景和意义 1
1.2 项目设计内容 1
1.3 设计要求 2
第二章 控制系统与MATLAB语言 3
2.1 控制系统理论基础 3
2.1.1 控制系统的古典理论和现代理论 3
2.2 MATLAB语言和控制系统工具箱 4
2.2.1 MATLAB软件介绍 4
2.2.2 控制系统工具箱介绍 5
2.3 MATLAB的基本操作 6
第三章 MATLAB GUI简介 7
3.1 MATLAB GUI 7
3.2 图形用户界面GUI软件设计步骤 8
第四章 仿真系统设计过程 10
4.1 GUI界面设计 10
4.1.1 背景与标题设计 11
4.1.2 背景切换设计 12
4.2 仿真系统设计 12
4.2.1 控制系统模型输入 12
4.2.2 控制系统的仿真方法 14
4.2.3 控制系统的离散方法 16
4.2.4 控制系统的性能分析 18
4.2.5 控制系统的校正方法 22
第五章 拓展功能设计 23
5.1 登录界面设计 23
5.2 GUI界面背景切换 24
5.3 背景音乐设计 25
5.4 摄像头拍照与保存的设计 26
反思与总结 29
致 谢 30
参考文献 31

  1. 第一章 概述

1.1 项目设计背景和意义
自动控制原理和现代控制理论是自动控制专业和自动化专业的主要课程之一,是研究控制技术的基础理论课,也是在大学二年级刚刚学完的必修专业基础课程。自动控制原理能使学生掌握自动控制系统的基本理论、基本概念、分析和设计方法,为了深入地学习现代控制理论和为自动控制系统打下理论基础。
在自动控制理论中的科学研究和应用过程中有大量的繁琐计算与仿真曲线的绘制,同样现代控制理论分析也是如此,给控制系统的分析和设计带来了巨大的工作量,为了解决分析过程中带来的各种繁杂问题,各种仿真与设计辅助软件层出不穷,凭借这些强大的设计和绘图功能,为系统分析和设计带来了极大的便捷。MATLAB以其强大的计算功能、丰富方便的图形功能、模块化的计算功能、以及附加的APP功能;脱颖而出成为控制系统设计和仿真领域的领军者。
然而MATLAB自身所存在的某些缺点限制了它的应用范围件。首先MATLAB 解释方式执行放率很低,这在处理图像时特别明显;其次MATLAB程序不能脱离其环境运行,因此它不能被用于开发商用软件;最后MATLAB的程序是后缀为.m的脚本文件它对用户完全透明,因此用户可任意进行修改,但有时为维护代码的完整性和安全性,并不希望用户了解或更改核心程序。因此本文项目设计开发主要应用于自动控制原理和现代控制理论教学实验,基于MATLAB的辅助软件MATLAB GUI 较为简单地对软件进行设计开发。扬长避短达到项目设计要求。

1.2 项目设计内容
本文项目设计研究及工作是通过利用MATLAB GUI界面,为专业课程自动控制理论提供一个控制系统分析与设计的仿真软件。此软件主要设计目的:
(1) 更好掌握 MATLAB 的常见使用方法,可以独立的进行程序设计、代码调试、查除 BUG、内容演示等操作。
(2) 对 MATLAB 的基本语法基础进行巩固,进一步掌握 MATLAB 的语法结构以及数据的基本运算和特殊函数的查找与使用。
(3) 熟悉并且掌握MATLAB的GUI界面与MATLAB指令的相互结合运用,学会建立fig文件,生成.m文件并进行系统性的完善。
(4) 学会编写GUI界面控件的回调函数,掌握不同控件传递数据的几种方式,并知悉对GUI的界面排版、美化的简单方法。
(5) 加深对零点、极点、传递函数、空间状态方程表达式、欧拉法、梯形法、四阶龙格-库塔法、双线性变换法、零阶保持器法、一阶保持器法、PID 控制器法、根轨迹、伯德图、Nyquist图等的概念认识,学会使用他们来描述系统、绘制相关图像和分析系统。
(6) 通过给出问题到发现问题到解决问题的方式,培养良好的设计习惯和严谨的设计思维。

1.3 设计要求
设计要求如下;
(1) 系统的输入方式包括:分子分母传递函数型;A、B、C、D 状态空间表达式型;零极点型。
(2) 绘制响应曲线的方式有:欧拉法、梯形法、四阶龙格-库塔法、双线性变换法、零阶保持器法、一阶保持器法。
(3) 绘制根轨迹,伯德图,Nyquist图,分析系统的各项性能,输入 PID 参数建立 PID 控制器 体现出系统各项性能的变化。
(4) 附加功能可以进行摄像头、音乐播放器等其额外的小控件。
(5) 构建的系统界面美观,并且无过大的错误,影响系统的正常运行。
(6) 独立调试完成,形成一个有效的良好人机交互系统,并写出一份实验报告。

  1. 第二章 控制系统与MATLAB语言

2.1 控制系统理论基础
《自动控制原理》是自动控制技术的基础理论,主要分 “古典控制理论” 和 “现代控制理论” 两大部分。古典控制理论以传递函数为基础研究单输入单输出的线性定常控制系统的分析与设计问题,现代控制理论以状态空间法为基础,研究多输入多输出、时变、非线性、高精度 、高效能等控制系统的分析与设计问题。
研究控制系统分析与设计的基础知识,包括控制系统的稳定性、稳态特性和 动态特性,以及控制系统的校正与计算机辅助分析。主要内容:控制系统的数学 模型、控制系统的时域分析、根轨迹分析、频域分析、控制系统的校正、非线性 系统的近似分析、现代控制理论基础、采样控制系统的分析与设计、控制系统的 计算机辅助分析与设计等

2.1.1 控制系统的古典理论和现代理论
经典控制理论的数学基础是拉普拉斯变换,系统的基础教学模型是传递函数,主要的分析和综合方法有Bode图法、根轨迹法、劳斯(Routh)判据、奈奎斯特(Nyquist)稳定判据、PID 控制等。经典控制系统理论主要用于单输入-单输出线性时不变系统而难以有效地处理多输入-多输出系统;只采用外部描述方法讨论控制系统的输入输出关系,而难以揭示系统内部的特性;控制系统设计方法基本上是一种“试凑法”而不能提供最优控制的方法和手段等。
在经典阶段到现代阶段的过渡过程中,其中的重要标志是Kalman系统地把状态空间法号引入到系统与控制理论中。现代控制理论以状态空间模型为基础,研究系统内部的结构,提出可控性、可观测性概念及分析方法,也提出了一系列设计方法,如 LQR(Linear Quadratic Regulator)和LQG(Linear Quadratic Gaussian)最优控制方法、Kalman滤波器方法、极点配置方法、基于状态观测器的反馈控制方法等现代控制理论克服了经典控制的许多局限性,它能够解决某些非线性和时变系统的控制问题,适用于多输入-多输出反馈控制系统,可以实现最优控制规律。此外,现代控制理论不仅能够研究确定性的系统,而且可以研究随机的过程,即包含随机控制系统的分析和设计方法。

2.2 MATLAB语言和控制系统工具箱
MATLAB(Matrix Laboratory)是由美国MathWorks公司在1984年推出的一款高性能数值计算软件,是一种集数值计算、符号计算和图形可视化三大基本功能于一体的功能强大、操作简单的优秀的工程计算应用软件。

2.2.1 MATLAB软件介绍
MATLAB于1984年由MathWorks 公司推出(DOS 版)。其强大的科学计算与可视化功能、简单易用的开放式可推展环境以及多达三十余个而向不同领域而扩展的工具箱(Tool- Box)的支持,使得 MATLAB在许多学科领域成为科学计算、计算机辅助设计与分析的基础工具和首选平台。
1.数值计算功能
MATLAB 以矩阵作为基本单位,但无需预先指定维数(动态定维,按照IEEE 的数值计算标准进行计算,提供十分丰富的数值计算函数,方便计算,提高效率, MATLAB命令与数学中的符号、公式非常接近,可读性强,容易掌握。
2.符号运算功能
和著名的 Maple 相结合,使得 MATLAB 具有强大的符号计算功能。
3.绘图功能
MATLAB 提供了丰富的绘图命令,可以绘制二维图形和三维图形,能实现一系列的可视化操作。
4.编程功能
MATLAB 具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言 特征,而且简单易学、编程效率高。
5.扩展功能
MATLAB 包含两部分内容:基本部分和根据专门领域中的特殊需要而设计的各种可选 丰富工具箱(toolbox):控制系统工具箱、信号处理工具箱、神经优化工具箱等

2.2.2 控制系统工具箱介绍
面向控制工程应用一直是MATLAB的主要功能之一,早期的版本就提供了控制系统设计工具箱。其中控制类的工具箱主要有以下几种:控制系统工具箱(Control Systems Toolbox)、系统识别工具箱(System Identification Toolbox)、鲁棒控制工具箱(Robust Control Toolbox)、神经网络工具箱(Neural Network Toolbox)、模型预测控制工具箱(Model Predictive Control Toolbox)、模糊逻辑工具箱(Fuzzy Logic Toolbox)以及仿真环境Simulink等。
控制系统工具箱主要函数
一、线性定常系统(LTI)数学模型生成函数
tf( ):创建传递函数模型;
ss( ):创建状态方程模型;
zpk( ):创建零一极点模型;
dss( ):创建离散状态方程模型;;
get( ):获取模型参数信息;
set( ):设置模型参数。
二、数学模型转换函数
c2d( ):连续系统转换成离散系统;
d2c( ):离散系统转换成连续系统;
d2d( ):离散系统重新采样。
三、时间响应函数
impulse( ):计算并绘制冲击响应;
step( ):计算并绘制阶跃响应。
四、频率响应函数
bode( ):计算并给制波特响;
Nichols( ):计算奈克尔斯图;
Nyquist ( ):计算奈奎斯特图;
五、控制系统分析与设计图形用户接口
itiview:打开线性定常系统(LTI)响应分析窗口;
sisotool:打开单输入单输出系统(SISO)设计图形用户接口。
六、其他函数
str2num( ):将输入字符串转换为数值;
get(handles.edit,'string’):读取 MATLAB GUI 控件参数。

2.3 MATLAB的基本操作
以MATLAB R2017b中文版为例,在MATLAB R2017b的安装目录内的bin文件夹下,双击MATLAB.exe图标,启动MATLAB2017b,出现启动界面,启动后,弹出MATLAB 2017b的用户界面。
在默认情况下,MATLAB 2017b的主界面即用户的工作环境,如图2-1所示,包含命令行窗口(Command Window)和当前工作目录(Current Directory)窗口以及工作区(Workspace)三个最常见的界面。同时在三大窗口上方,分布有三个功能区,分别是‘主页’,‘绘图’和‘应用程序’。分别点击三个功能区,可以看到诸多功能的快捷方式。

图 2-1 MATLAB主界面图

  1. 第三章 MATLAB GUI简介

3.1 MATLAB GUI
MATLAB GUI 为图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面,是MATLAB用户可视化交互式的工具,运用GUI生成的操作界面用户可以不用浏览繁冗的代码而进行操作。
MATLAB 作为一款科学计算软件广泛地被科研人员所接受。其强大的数据计算能力、图像可视化界面及代码的可移植性受到了广大用户的认可。在图形用户界面(GraphicalUser Interface,GUI)设计领域,MATLAB 同样有着强大的设计能力,从而被广泛地应用于GUI 的设计。MATLAB GUI 是一个可视化的软件显示平台,一旦程序设计完成后,GUI采用定参数化的方法,用户不需要修改程序设计部分,而只需要在GUI 界面中修改设定的参数即可。因此GUI 的人机互动性很好。
基本概念:
CallBack: 最常用的。点击按钮时,按钮下的Callback就会执行;拖动滑块时,滑块名下的callback就会执行;总之,正常用途全放在callback下。
ButtonDownFcn:单击,这个函数名下的代码就会执行。(ps:按钮的callback也是点击,覆盖掉buttondownfcn。)
CreateFcn:顾名思义,在生成这个控件,显示之前,执行这个函数名下的代码。
DeleteFcn: 顾名思义,在控件要销毁,但是被毁灭之前执行这个函数名下的代码。貌似“真的要退出吗”这一类。
KeyPressFcn:当前控件获得焦点且有按键按下时执行。
SelectionChangeFcn:在群按钮组件中改变选择时,所执行的函数。创建MATLAB用户界面必须由三个基本元素:
(1)组件:在 MATAB GUI中的每一个项目(按钮、标签、编辑框等)都是一个图形化组件。组件可分为三类:图形化控件(按钮、编辑框、列表、滚动条等),静态元素(窗口和文本字符串),菜单和坐标系。图形化控件和静态元素由函数uicontrol创建,菜单由函数uimenu和uicontextmenu 创建,坐标系经常用于显示图形化数据,由函数axes创建。每个组件都会有个 position 属性,[x y width height ],前两个数表示组件左下角的坐标,后两个表示控件宽度与高度。
(2)图像窗口(Figure):GUI 的每一个组件都必须安排图像窗口中。可以用函数Figure来创建空图像窗口,空图像窗口经常用于放置各种类型的组件。
(3)回应:如果用户用鼠标单击或用键盘键入一些信息,那么程序就要有相应的动作。鼠标单击或键入信息是一个事件,如果MATLAB程序运行相应的函数,那么MATLAB函数肯定会有所反应。

3.2 图形用户界面GUI软件设计步骤
GUI(Graphical User Interface) 即图形用户界面。MATLAB的GUI程序设计可以用两种方法实现:一种是借助于GUI开发工具GUIDE(GUI Design Environment)的设计方法;另一种是利用.m文件代码构建界面的方法。采用GUIDE进行设计的方法所见即所得,直观方便,很容易上手。本设计主要介绍利用GUIDE方法进行设计的步骤。这里我们所使用的是第一种方法。
运行MATLAB 2017b,在命令行窗口(command window)中输入guide在弹出窗口选择Blank GUI(Default),如图3-1,点击确认进去MATLAB GUI选择界面,如图3-2。

图 3- 1 GUI界面启动图

图 3- 2 GUI界面图
界面左侧有数个选择按钮,用鼠标拖住左边的工具按钮到对象设计区,便可以生成对应的图形控件对象。创建对象后,可以改变它的大小,利用鼠标右键可显示所选对象的一个弹出式菜单,可以从中选择属性检查器进行相应的设计。通过双击该对象,也会显示该对象的属性编辑器,如图3-3,并对其属性值进行设置。

图 3- 3 GUI组件编辑图

  1. 第四章 仿真系统设计过程

4.1 GUI界面设计
运行MATLAB 2017b,在命令行窗口输入guide在弹出窗口中选择Blank GUI点击OK进入MATLAB GUI,选择界面左侧若干需要的组件,进行最初的GUI界面模型的搭建,如图4-1。

图 4- 1 GUI界面模型搭建图

双击已经添加的组件,可以修改该组件的一些属性,例如修改“popupmenu1”组件的“String”的值,如图4-2,在所有所需组件搭建完善后可以通过选择工具栏的对齐对象进行界面的美化的一系列操作,如图4-3。

图 4- 2 GUI组件设置图

图 4- 3 GUI界面美化图

GUI界面带有菜单编辑器功能,进入该功能,可以添加若干需要在GUI界面外围存在的功能,如播放音乐、退出系统、打开视频等,如图4-4。

图 4- 4 GUI界面菜单编辑图

4.1.1 背景与标题设计
选择几张.jpg格式的照片放进该目标文件目录下,选中需要放置背景的坐标轴,查看它的tag值,然后打开运行该.fig文件生成的.m文件,找到OpeningFcn( )函数,写入下图4-5的程序。其他标题或者背景类似操作,函数中可以选择标题文件的样式。

图 4- 5 背景编辑程序图

4.1.2 背景切换设计
为了增加布局的可视感,在主界面加入了界面背景的切换功能,背景切换相对简单,在该功能函数下面增加可以打开文件夹的代码即可,其他功能在背景设计中已经实现。

4.2 仿真系统设计
连续线性系统一般可以用传递函数表示,也可以用状态方程表示,它们使用 的场合不同,前者是经典控制理论常用的模型,后者是“现代控制理论”的基础,但它们是描述同样系统的不同方式。除了这两种描述方法之外,还常用零极点形 式来表示连续线性系统模型。MATLAB控制系统工具箱支持的系统模型有状态方程模型(State-space models)、传递函数模型 (Transfer functions)、零极点模型 (Zero-pole-gain)和频率响应模型(Frequency response mode)。本系统仅针对线性连续系统范围进行研究,主要采用前三种模型来讨论。

4.2.1 控制系统模型输入
一、系统传递函数模型的表达及MATLAB下的输入方法
线性系统的传递函数模型一般用微分方程表示,为了简化微分方程的求解,经过拉普拉斯变换后传递函数表示下图4-6:

图 4- 6 传递函数

在MATLAB 中传递函数被看作两个多项式的比值。依照 MATLAB惯例,将多项式的系数按s的降幂次序排列后表示为一个数值向量,这样用两个向量可以表示传递函数的分子、分母多项式,再利用控制系统工具箱的tf( )函数就可以得到系统的传递函数模型,如图4-7:

图 4- 7 tf()函数模型

二、系统状态方程模型的表达及MATLAB下的输入方法
线性系统的状态方程模型一般表示为:
x(t)’ = A x(t) + B x(t) (4-1)

				  y(t) = C x(t) + D u(t)   (4-2)

三、软件实现及举例
首先运行所设计的软件,出现图4-8对话框,点“请输入模型形式”按钮,进行选择模型形式。

图 4- 8 GUI界面图

选择“传递函数形式”,然后点击“请输入模型参数”按钮,进行模型参数输入,如图4-9,若未点击“请输入模型参数”则会出现警告,如图4-10。 在模型参数输入完毕后,传递函数模型输入便完成了,其他模型输入类似,本文不做一一介绍。

图 4- 9 模型参数输入 图 4- 10 警告

4.2.2 控制系统的仿真方法
一、欧拉法
欧拉法又称折线或矩形法,是一种一阶数值方法,用以对给定初值的常微分方程(即初值问题)求解。它是一种解决数值常微分方程的最基本的一类显型方法(Explicit method)。
(4-2)
将式(4-2)中的微分方程两边进行积分,得 (4-3),即 (4-4)。
通常假设离散点 是等距离的,即 ,称 为计算步长或步距。
当 时, 是未知的,因此式(4-4)右端的积分是求不出的。为了解决这个问题,把积分间隔取得足够小,使得在 与 之间的法 可以看作常数( 。这样便得到用矩形积分的近似公式 (4-5)
或简化为: (4-6)。这就是欧拉公式。欧拉法的计算虽然比较简单,但精度较低。
根据此方法的原理,编写相应的MATLAB文件,具体MATLAB代码请查看Oula.m文件。

二、梯形法
欧拉公式中的积分是用矩形面积 来近似的,而梯形法是用梯形面积 来近似的。于是可以得到梯形法的计算公式
(4-7)。
由于上式右边包含未知量 ,所以每一步都必须通过迭代来求解。每一步迭代的初值 通常采用欧拉公式来计算。因此,梯形法的每一步迭代公式为
(4-8),式中,迭代次数R=0,1,2,…
根据此方法的原理,编写相应的MATLAB文件,具体MATLAB编写代码请查看TiXing.m文件。
三、龙格-库塔法
由于龙格库塔法的推导过程比较复杂,加之本设计报告内容所限,下面直接给出四阶龙格-库塔法的公式:
(4-9)
(4-10)
通过龙格-库塔法,可以将以上介绍的两种数值积分法统一起来,它们都是基于在初值附近展开成泰勒级数的原理,所不同的是取泰勒级数的项数。欧拉公式仅取到h项,梯形法公式取到了 项,四阶龙格-库塔法取到了 项。从理论上讲,取到的项数越多,计算精度越高,但计算量越大,越复杂,计算误差也将增加,因此要适当选择。目前,在数字仿真中,最常用的是四阶龙格-库塔法,其截断误差为0( ),已能满足仿真精度的要求。
根据此方法的原理,编写相应的MATLAB文件,具体MATLAB编写代码请查看Lgkt.m文件。

4.2.3 控制系统的离散方法
一、双线性变换法
双线性变换法的主要优点是S平面与Z平面一个单值对应,S平面的虚轴(整个jΩ)对应于Z平面单位圆的一周,S平面的Ω=0处对应于Z平面的ω=0处,对应即数字滤波器的频率响应将终止在折迭频率处,所以双线性变换不存在混迭效应。。
双线性变换公式(或称“Tustin”公式),它可以从梯形积分公式中直接推导出来。按照这种变换公式进行替换,可以保证G(z)的稳定性,而且具有一定的仿真精度。双线性变换公式为: (4-11)也可写为: (4-12)
根据此方法的原理,编写相应的MATLAB文件,具体MATLAB编写代码请查看DoubleLine.m文件。

二、零阶保持器法
零阶保持器:zero-order holder(ZOH),是指实现采样点之间插值的元件。零阶保持器基于时域外推原理,能够把采样信号转换成连续信号。
作用是将离散信号转换为连续信号,这个连续信号近似的重现了作用在采样器上的信号。最简单是将采样信号转变为在两个连续采样瞬时之间保持常量的信号,这种保持器,叫做零阶保持器。
零阶保持器的作用是在信号传递过程中,把第(n)T时刻的采样信号值一直保持到第(n+1)T时刻的前一瞬时,把第(n+1)T时刻的采样值一直保持到(n+2)T时刻,依次类推,从而把一个脉冲序列变成一个连续的阶梯信号。因为在每一个采样区间内连续的阶梯信号的值均为常值,亦即其一阶导数为零,故称为零阶保持器。
零阶保持器的传递函数为: (4-13)
根据此方法的原理,编写相应的MATLAB文件,具体MATLAB编写代码请查看ZeroKeep.m文件。

三、一阶保持器法
一阶保持器法(zoh)是一种按线性规律外推计算的保持器,即 (4-14)
一阶保持器的传递函数为: (4-15)
根据此方法的原理,编写相应的MATLAB文件,具体MATLAB编写代码请查看OneKeep.m文件。

4.2.4 控制系统的性能分析
一、伯德图
伯德图是系统频率响应的一种图示方法。伯德图由幅值图和相角图组成,两者都按频率的对数分度绘制,故伯德图常也称为对数坐标图。
假设系统的开环传递函数为: (4-15)
则系统的频率响应为: (4-16)
系统的伯德图就是幅值|G(jw)|与相位 分别对角频率w进行绘图。因此,也称为幅频特性和相频特性曲线。根据开环的幅频特性和相频特性曲线,可求出幅值裕度和相位裕量。连续系统的伯德图可利用bode( )函数来绘制,其调用格式为
[mag,phase,w] = bode(mum,den) 或 [mag,phase,w] = bode(num,den,w)
[mag,phase,w] = bode(A,B,C,D) 或 [mag,phase,w]= bode(A.B,C,D,iu)
[mag,phase,w] = bode(A,B,C,D,iu,w)
式中,mum,den和A,B,C,D分别为系统的开环传递函数和状态方程的矩阵参数;而w为由频率点构成的向量。
bode(mun,den) %可绘制出以开环传递函数G(s) = num(s)/den(s)表示的系统Bode图;
bode(A,B,C,D) %可绘制出以状态空间表达式S(A,B.C.D)所表示系统的每个输入的Bode图;
bode(A,B,C,D,iu) %可得从系统第iu个输入到所有输出的Bode图,其中频率范围由函数自动选取,而且在响应快速变化的位置会自动采用更多取样点;
bode(num,den,w) %可利用指定的频率点向量w绘制系统的Bode图。
bode(A,B,C,D,iu,w)
bode()函数本身可以通过输入元素的个数自动地识别给出的是传递函数模型还是状态方程模型。当带输出变量引用函数时,可得到系统Bode图的幅值mag.相位phase及频率点向量w,相位以度为单位,幅值可转换成以分贝为单位。
有了这些数据就可以利用下面的MATLAB命令

subplot(2,1,1);semilogx(w,20*logl0(mag))
subplot(2,1,2);semilogx(w,phase)
在同一个窗口上同时绘制出系统的Bode图,如图4-11其中前一个指令中对幅值向量mag求分贝(dB)值。

图 4- 11 伯德图
二、根轨迹
根轨迹是开环系统某一参数从零变到无穷时,闭环系统特征方程式的根在s平面上变化的轨迹。一般地,将这一参数选作开环系统的增益k,而在无零极点对消时.闭环系统特征方程的根就是闭环系统的极点,如图4-12。

图 4- 12 反馈控制系统图

对于图所示的负反馈系统,其特征方程可表示为 (4-17)
利用rlocus( )两数可绘制出当开环增益k由0至∞变化时,闭环系统的特征根在s平面变化的轨迹,该函数的调用格式为:
[r,k] = rlocus( mum, den) 或 [r,k] = rlocus( mum,den,k)
[r,k] =rlocus(A,B,C,D) 或 [r,k] = rlocus( A,B,C,D,k)
其中,num和den分别为系统开环传递函数的分子和分母多项式的系数按降幂排列构成的系数向量;A,B,C,D分别为开环系统状态空间表达式的各系统矩阵;r为系统的闭环极点;k为相应的根轨迹增益。rlocus( )函数既适用于连续系统,也适用于离散系统。当用rlocus( num,den )或rlocus( A,B,C,D)绘制系统根轨迹时,增益k是自动选取的。rlocus( num,den,k)或rlocus(A,B, C,D, k)可利用指定的增益k来绘制系统的根轨迹。在不带输出变量引用函数时,roleus( )可在当前图形窗口中绘制出系统的根轨迹图。当带有输出变量引用函数时,可得到根轨迹的位置列向量r及相应的增益k列向量,再利用ploa(r,‘x’)可绘制出根轨迹,如图4-13。

图 4- 13 根轨迹图

根轨迹的应用:
(1)用于分析开环增益(或其他参数)值变化对系统行为的影响:在控制系统的极点中,离虚轴最近的一对孤立的共轭复数极点对系统的过渡过程行为具有主要影响,称为主导极点对。在根轨迹上,很容易看出开环增益不同取值时主导极点位置的变化情况,由此可估计出对系统行为的影响。
(2)用于分析附加环节对控制系统性能的影响:为了某种目的常需要在控制系统中引人附加环节,这就相当于引入新的开环极点和开环零点。通过根轨迹便可估计出引入的附加环节对系统性能的影响。
(3)用于设计控制系统的校正装置:校正装置是为了改善控制系统性能而引入系统的附加环节,利用根轨迹可确定它的类型和参数设计。
据此方法的原理,编写相应的MATLAB文件。具体文件在主函数中。

三、奈奎斯特图
Nyquist图是指根据开环频率特性G(jw)H(jw)在复平面上绘制其极坐标图。利用开环系统Nyquist曲线,可判断闭环系统的稳定性。
Nyquist稳定判据可表示为:当w从一∞→十∞变化时,Nyquist曲线G(jw)H(jw)逆时针包围(-1,j0)点的次数N,等于系统开环传递函数G(s)H(s)位于右半s平面的极点数P.即N=P,则闭环系统稳定;否则闭环系统不稳定。Nyquist函数的调用格式为
[Re,Im,w] = nyquist(num,den) 或 [Re,Im,w] = nyquist(num,den,w)
[Re,Im,w] = nyquist(A,B,C,D) 或 [Re,Im,w] = nyquist(A,B,C,D,iu)
[Re,Im,w] = nyquist(A,B,C,D,iu,w)
其中,返回值Re,Im,和w分别为频率特性的实部向量、虚部向量和相应的频率向量,有了这些值就可利用命令plot(Re,Im)来直接绘出系统的奈奎斯特图,如图4-14。

图 4- 14 奈氏图

据此方法的原理,编写相应的MATLAB文件。具体文件在主函数中。

4.2.5 控制系统的校正方法
一、PID校正
PID控制器(Proportion Integration Differentiation.比例-积分-微分控制器),由比例单元 P、积分单元 I 和微分单元 D 组成。通过Kp, Ki和Kd三个参数的设定,如图4-15。PID控制器主要适用于基本线性和动态特性不随时间变化的系统。

图 4- 15 PID 模型

据此方法的原理,编写相应的MATLAB文件,具体MATLAB编写代码请查看Pid.m文件。

  1. 第五章 拓展功能设计

5.1 登录界面设计
由于GUI基本框架基于搭建完毕,因此登录界面设计较为简单的,同样也是一个图形界面,插入一张照片在轴上做登录界面背景,然后放两个静态文本,分别改变他们的’String’值为‘用户名’,‘密码’。放入两个可编辑文本框,一个’String’值为’登录’的按钮,一个’String’值为’注册’的按钮。
如图5-1。在登录和注册按钮中,‘注册’按钮的回调函数,当按下注册时会弹出一个输入框,获取用户名和密码的输入值,如图5-2。

图 5- 1 GUI启动界面

图 5- 2 注册
‘登录’按钮的回调函数,输入成功就打开主界面,关闭当前界面。输入失败时弹出失败提示框,如图5-3。

图 5- 3 错误与警告

5.2 GUI界面背景切换
为了美化GUI界面,添加背景切换功能,在背景切换的菜单里,有一个选项‘选择背景’。点击‘选择背景’时,如图5-4所示。

图 5- 4 界面菜单

选择其他背景图片,即可跟换背景,如下图5-5所示。

图 5- 5 背景更换

5.3 背景音乐设计
设计的音乐播放器模块是仿制手机播放界面,涉及GUI 控MenuSelectedFcn 下面进行详细解析。
(1) 用uigetfile获取上面所说的三个参数。
(2) 先用 if 结构检验index是否为1,为1则说明是 MP3 文件,进入后续步骤;为其他值则说明不一定是MP3文件,那么不进入后续步骤(如果你想增强用户体验还可以用 msgbox 输出一个提示用户的文本框。
(3) 将歌曲名的filename 利用上面的音乐数量信息各行排序编号后,与原有 listbox里的string拼接后更新listbox的string。
(4) 这个时候 listbox 内储存并显示了了歌曲文件名,后面读取音乐播放时需要全路径。先把把路径 PathName 作为‘UserData’保存起来,已备后面播放音乐使用。uigetfile 函数就是显示一个模态对话框,对话框列出了当前目录下的文件和目录,用于可以选择一个将要打开的文件名。如果文件名是有效的且该文件存在,则当用户点击Open时函数 uigetfile 返回该文件名。若不存在,uigetfile 显示一个控制返回对话框值的错误提示信息,此时用户可以输入另外的文件名或点击Cancel 按钮。如果用户点击 Cancel 按钮或关闭对话框,函数 uigetfile 将返回0。
在背景音乐的菜单里,共有4个选项,‘打开音乐列表’、‘开始播放’、‘暂停播放’、‘停止播放’。点击‘打开音乐列表’时,如图5-6所示。

图 5- 6 音乐菜单

在音乐打开后界面下方将会出现音乐文件名,如图5-7,点击开始播放将播放,同样暂停和停止也点击一下即可实现。

图 5- 7 音乐播放

5.4 摄像头拍照与保存的设计
Matlab2017b的图像获取工具箱已经提供了我们需要的函数,所以我们可以直接调用就行了。在此之前,摄像头的使用首先需要安装相应的硬件支持,在命令提示窗口输入help imaqhwinfo即可。
也可以在菜单中点击APP一栏,如图5-8,进入“获取更多APP”,如图5-9,

图 5- 8 MATLAB APP获取

图 5- 9 MATLAB附加功能资源管理器

在右上角搜索图5-10中的两个支持包,下载并且安装成功后便可继续进行实验。

图 5- 10 MATLAB支持包

安装完驱动后,我们需要做以下步骤;
1、查询USB2.0Camera 的具体参数(imaqhwinfo)
2、创建视频输入对象(videoinput)
3、图像预览和显示(preview、stoppreview、closepreview和image)
4、获取视频图像(getsnapshot)
5、图像获取设备的获取和设置(get和set)
6、关闭视频对象(delete)
据此方法的原理,编写相应的MATLAB文件。具体文件在主函数中。

图 5- 11 实验结果图

反思与总结

恰如开头说的那样,MATLAB凭借其科学计算与图形可视化功能完美结合以及开放的设计理念,在控制系统仿真中普遍欢迎。
通过学习,我了解到MATLAB在科学计算、图形和程序设计三个方面的应用。其中科学计算部分,用到了我们所学的高等数学、线性代数、复变函数等方法,同时包含今年所学的专业课程,他巩固了我们对已经学过的知识。图形部分介绍了如何利用MATLAB给出的已有函数进行绘图,以及科学可视化、计算机几何等。程序设计部分介绍.m文件设计、图形用户界面设计、文件操作、编译和接口等内容。从中也认识到自己还有很多不足,还须进一步加强。

此次设计的控制系统仿真软件能基本实现所要求的功能,如:实现传递函数 模型输入、状态方程模型输入、模型之间的转换、控制系统稳定性分析、绘制系统奈奎斯特图、波特图、根轨迹图等。但是在本软件的设计过程有不少缺陷,如:未能实现文本结果以及特殊坐标在GUI上的显示,此外还存在Bode图下半部分背景未能显示等问题,软件整体页而分布比较凌乱。本软件在继续完善的基础上能更好的应用于实际需求。
虽然系统建模与仿真课程中仅仅用到了MATLAB部分功能,而且我还未完全熟练运用,不过我不会停止学习MATLAB的步伐,争取掌握更多的知识,并且借助MATLAB工具帮助学习和提高。

致 谢

参考文献

[1]MATLAB R2016a完全自学一本通/刘浩,韩晶编著.北京:电子工业出版社,2016.12.
[2]李国勇主编.计算机仿真技术与CAD:基于MATLAB的控制系统(第4版). 北京:电子工业出版社,2016.2.
[3]王建辉主编.自动控制原理(第2版).北京:清华大学出版社,2014(2017.6重印).
[4]MATLAB程序设计(原书第3版)/(美)斯蒂芬·J·查普思(Stephen J.Chapman)著,费选,余任萍,黄伟译.-北京:机械工业出版社,2018.6.
[5]MATLAB GUI设计入门与实战 / 余胜威,吴婷,罗建桥编著. —北京:清华大学出版社,2016.

你可能感兴趣的:(matlab,matlab,gui)