热门搜索 :
考研考公
您的当前位置:首页正文

MATLAB控制系统仿真实验报告

来源:伴沃教育
word文档整理分享

清华大学自动化工程学院

实验报告

课程: 控制系统仿真

专业 自动化 班级 122 姓名 学号

指导教师:

时间: 2015 年 10 月 19 日— 10 月 28 日

参考资料

word文档整理分享

目 录

实验一 MATLAB环境的熟悉与基本运算…………………………………………………1 实验二 MATLAB语言的程序设计…………………………………………………………6 实验三 MATLAB的图形绘制………………………………………………………………9 实验四 采用SIMULINK的系统仿真…………………………………………………… 14 实验五 控制系统的频域与时域分析………………………………………………………17 实验六 控制系统PID校正器设计法………………………………………………………23

参考资料

word文档整理分享

实验一 MATLAB环境的熟悉与基本运算

一、实验时间及地点:

实验时间:2015.10.19上午8:30—9:30 实验地点:计算中心

二、实验目的:

1. 熟悉MATLAB开发环境

2.掌握矩阵、变量、表达式的各种基本运算

三、实验内容:

1、 新建一个文件夹(自己的名字命名,在机器的最后一个盘符) 2、 启动MATLAB6.5,将该文件夹添加到MATLAB路径管理器中。 3、 保存,关闭对话框

4、 学习使用help命令,例如在命令窗口输入help eye,然后根据帮助说明,学习使用指

令eye(其它不会用的指令,依照此方法类推) 5、 学习使用clc、clear,观察command window、command history和workspace等窗口的

变化结果。

6、 初步程序的编写练习,新建M-file,保存(自己设定文件名,例如exerc1、exerc2、

exerc3……),学习使用MATLAB的基本运算符、数组寻访指令、标准数组生成函数和数组操作函数。

注意:每一次M-file的修改后,都要存盘。

练习A:

(1) help rand,然后随机生成一个2×6的数组,观察command window、command

history和workspace等窗口的变化结果

(2) 学习使用clc、clear,了解其功能和作用

(3) 输入一个2维数值数组,体会标点符号的作用(空格和逗号的作用)。

(4) 一维数组的创建和寻访,创建一个一维数组(1×8)X,查询X数组的第2个元

素,查询X数组的第3个元素到第6个元素,查询X数组的第5个元素到最后一个元素,查询X数组的第3、2、1个元素,查询X数组中≤5元素,将X数组的第2个元素重新赋值为111,实例expm1。

(5) 二维数组的创建和寻访,创建一个二维数组(4×8)A,查询数组A第2行、第

3列的元素,查询数组A第2行的所有元素,查询数组A第6列的所有元素,查询数组A按列拉长形成新的数组B(1×8),查询数组A按行拉长形成新的数组C(1×8),以全元素赋值的方式对数组A赋值。

(6) 两种运算指令形式和实质内涵的比较。设有3个二维数组A2×4,B2×4,C2×2,写出

参考资料

word文档整理分享

所有由2个数组参与的合法的数组运算和矩阵指令

(7) 学习使用表8列的常用函数(通过help方法) (8) 学习使用表9数组操作函数

(9) 学习字符串的创建,a='This is an example.'

串数组的大小size(a)

串数组的元素标识a14=a(1:4) ra=a(end:-1:1) 对字符串ASCLL码的数组操作

w=find(a>='a'&a<='z');

ascii_a(w)=ascii_a(w)-32;%英文大小写字母ASCLL值差32(小-32=大) char(ascii_a) 练习B

(10) 创建符号对象与函数命令sym()、syms()与 class()的熟悉和运用。有

符号表达式:

e1acx2yapx2bcxybpxckykp,e2cyp

试计算e1e2?与e1\\e2?

四、实验操作过程(实验说明)

>>help rand %用help指令学习rand的用法

rand - Uniformly distributed pseudorandom numbers

This MATLAB function returns a pseudorandom scalar drawn from the standard

uniform distribution on the open interval (0,1).

r = rand r = rand(n)

r = rand(sz1,...,szN) r = rand(sz) r = rand(classname) r = rand(n,classname)

r = rand(sz1,...,szN,classname) r = rand(sz,classname) r = rand('like',p)

参考资料

word文档整理分享

r = rand(n,'like',p)

r = rand(sz1,...,szN,'like',p) r = rand(sz,'like',p)

>> rand(2,6) %随机生成一个2×6的数组

ans =

0.8147 0.1270 0.6324 0.2785 0.9575 0.1576

0.9058 0.9134 0.0975 0.5469 0.9649 0.9706 >> clear %清除命令窗口 >> [1 2;3 4] %输入一个二维数组

ans = 1 2 3 4

>> [1,2;3,4] %将空格改为逗号效果一致

ans = 1 2 3 4

>> a=[1 2 3 4;5 6 7 8];

>> b=a(2:2,3:4) %逗号前面是行,后面是列,冒号前后的数表示所选范围

b =

7 8

>> eye(3) %产生单位矩阵

参考资料

word文档整理分享

ans =

1 0 0 0 1 0 0 0 1

>> magic(3) %产生魔方矩阵

ans =

8 1 6 3 5 7 4 9 2

>> flipud(ans) %以数组“水平中线”为对称轴,交换上下对称位置上的元素

ans =

4 9 2 3 5 7 8 1 6

>> rot90(ans) %逆时针旋转数组90°

ans =

2 7 6 9 5 1 4 3 8 >> a='hello' a = hello

参考资料

word文档整理分享

>> b=size(a) %字符串a的大小为1x5

b =

1 5

>> syms x y p k a b c %创建符号对象

>> e1=x^2*a*c*y+a*p*x^2+b*p*x+c*k*y+k*p %创建函数命令

e1 =

k*p + a*p*x^2 + c*k*y + b*p*x + a*c*x^2*y

>> e2=c*y+p e2 = p + c*y >> e1/e2 ans =

(k*p + a*p*x^2 + c*k*y + b*p*x + a*c*x^2*y)/(p + c*y) >> a=[1 2] a =

1 2

>> c=reshape(a,2,1) %改变数组a的行数和列数

c = 1

参考资料

word文档整理分享

2

五、实验结果及讨论

1.熟悉了MATLAB的基本软件操作。

2.通过本次实验熟悉了 MATLAB 的开发环境掌握了矩阵、变量、表达式的各种运算了解了*与.*、/与\\、^与.^等区别以及绝对值、开方 e的阶乘、正弦、正切的运算的符号。 3.让我明白了MATLAB的实用性。

参考资料

word文档整理分享

实验二 MATLAB语言的程序设计

一、实验时间及地点:

实验时间:2015.10.19上午8:30—9:30 实验地点:黄岛老校区计算中心

二、实验目的:

1、 熟悉MATLAB程序编辑与设计环境

2、 掌握各种编程语句语法规则及程序设计方法 3、 函数文件的编写和设计

4、 了解和熟悉跨空间变量传递和赋值

三、实验内容:

练习A

1、 熟悉MATLAB程序编辑与设计环境 2、 用for循环语句实现求1~100的和

3、 用for循环语句实现编写一个求n阶乘的函数文件 练习B 思考题

4、 已知一维数组A[2,4,5,8,10]、B[4,9,6,7,4],用for循环语句实现

ABii1nni1。

求和函数可用sum()

5、 (1)编写求解一维数组平均值的函数文件。

(2)编写求解二维数组平均值的函数文件。

四、实验操作过程(实验说明)

1. 用for循环语句实现求1~100的和,函数名为theSec().

程序:

a=0; for i=1:100 a=i+a;

参考资料

word文档整理分享

end

fprintf('%d\\n',a)

执行结果:

>> theSec %求1~100的和 5050

2. 用for循环语句实现编写一个求n阶乘的函数文件,函数名为jiex(x). 程序:

function jiex(x) a=1;

for i=1:x a=a*i; end

fprintf('%d\\n',a)

执行结果:

>> jiex(4) % 求4的阶乘 24

3. 已知一维数组A[2,4,5,8,10]、B[4,9,6,7,4],用for循环语句实现

求和,函数名用ABsum() 程序:

function y=ABsum() a=[2,4,5,8,10]; b=[4,9,6,7,4]; n=5; sum=0; for i=1:n

sum=sum+a(1,i)*b(1,n-i+1); end y=sum;

ABii1nni1。

参考资料

word文档整理分享

执行结果:

>> ABsum() ans =

178

4. 编写求解任意数组平均值的函数文件,函数名为avg(f).

程序:

function y=avg(f) [m,n]=size(f); sum=0; for i=1:m for j=1:n

sum=sum+f(i,j); end end

y=sum/(m*n);

执行结果:

>> a=[1,2,3,4;5,6,7,8] %定义一个数组 a =

1 2 3 4 5 6 7 8

>> avg(2*a) %求数组2*a的平均值 ans = 9

五、实验结果及讨论

参考资料

word文档整理分享

1. 编程语句:循环语句有for循环和while循环,我习惯使用for循环,使用格式如下:

for 循环变量=表达式1(初值):表达式2(增量):表达式3(终值) end

循环语句组

条件判断语句if语句格式为:

if 表达式 end

执行语句

实验三 MATLAB的图形绘制

一、实验时间及地点:

实验时间:2015.10.21上午8:30—9:30 实验地点:黄岛老校区计算中心

二、实验目的:

1、学习MATLAB图形绘制的基本方法;

2、熟悉和了解MATLAB图形绘制程序编辑的基本指令;

3、熟悉掌握利用MATLAB图形编辑窗口编辑和修改图形界面,并添加图形的各种标注; 4、掌握plot、subplot的指令格式和语法。

三、实验内容: 练习A

【1】 二维曲线绘图基本指令演示。 t=(0:pi/50:2*pi)'; k=0.4:0.1:1; Y=cos(t)*k; plot(t,Y)

参考资料

word文档整理分享

10.80.60.40.20-0.2-0.4-0.6-0.8-101234567 plot指令基本操作演示

【2】用图形表示连续调制波形ysin(t)sin(9t) 及其包络线。 t=(0:pi/100:pi)'; y1=sin(t)*[1,-1]; y2=sin(t).*sin(9*t); t3=pi*(0:9)/9;

y3=sin(t3).*sin(9*t3);plot(t,y1,'r:',t,y2,'b',t3,y3,'bo') axis([0,pi,-1,1])

10.80.60.40.20-0.2-0.4-0.6-0.8-100.511.522.53

【3】通过绘制二阶系统阶跃响应,综合演示图形标识。本例比较综合,涉及的指令较广。请耐心读、实际做、再看例后说明,定会有匪浅收益。 clf;t=6*pi*(0:100)/100;y=1-exp(-0.3*t).*cos(0.7*t); tt=t(find(abs(y-1)>0.05));ts=max(tt); plot(t,y,'r-','LineWidth',3) axis([-inf,6*pi,0.6,inf])

set(gca,'Xtick',[2*pi,4*pi,6*pi],'Ytick',[0.95,1,1.05,max(y)]) grid on title('\\it y = 1 - e^{ -\\alphat}cos{\\omegat}') text(13.5,1.2,'\\fontsize{12}{\\alpha}=0.3') text(13.5,1.1,'\\fontsize{12}{\\omega}=0.7') hold on;plot(ts,0.95,'bo','MarkerSize',10);hold off cell_string{1}='\\fontsize{12}\ow';

参考资料

word文档整理分享

cell_string{2}='\\fontsize{16} \\fontname{隶书}镇定时间'; cell_string{3}='\\fontsize{6} '; cell_string{4}=['\\fontsize{14}\\rmt_{s} = ' num2str(ts)]; text(ts,0.85,cell_string) xlabel('\\fontsize{14} \\bft \\rightarrow') ylabel('\\fontsize{14} \\bfy \\rightarrow')

y = 1 - e -atcoswt

1.2843a=0.3w=0.71.051 y 0.95 镇定时间 ts = 9.61336.283212.566418.8496 t ? 二阶阶跃响应图的标识

四、实验操作过程(实验说明)

1. 二维曲线绘图基本指令演示:

>> t=(0:pi/50:2*pi)'; k=0.4:0.1:1; Y=cos(t)*k; plot(t,Y)

执行结果:(图3-1)

图3-1

参考资料

word文档整理分享

2. 用图形表示连续调制波形ysin(t)sin(9t) 及其包络线:

>> t=(0:pi/100:pi)'; y1=sin(t)*[1,-1]; y2=sin(t).*sin(9*t); t3=pi*(0:9)/9;

y3=sin(t3).*sin(9*t3);plot(t,y1,'r:',t,y2,'b',t3,y3,'bo') axis([0,pi,-1,1]) 执行结果:(图3-2)

图3-2

3. 通过绘制二阶系统阶跃响应,综合演示图形标识:

>> clf;t=6*pi*(0:100)/100;y=1-exp(-0.3*t).*cos(0.7*t); tt=t(find(abs(y-1)>0.05));ts=max(tt); plot(t,y,'r-','LineWidth',3) axis([-inf,6*pi,0.6,inf])

set(gca,'Xtick',[2*pi,4*pi,6*pi],'Ytick',[0.95,1,1.05,max(y)]) grid on

title('\\it y = 1 - e^{ -\\alphat}cos{\\omegat}') text(13.5,1.2,'\\fontsize{12}{\\alpha}=0.3') text(13.5,1.1,'\\fontsize{12}{\\omega}=0.7')

hold on;plot(ts,0.95,'bo','MarkerSize',10);hold off

参考资料

word文档整理分享

cell_string{1}='\\fontsize{12}\ow';

cell_string{2}='\\fontsize{16} \\fontname{隶书}镇定时间'; cell_string{3}='\\fontsize{6} ';

cell_string{4}=['\\fontsize{14}\\rmt_{s} = ' num2str(ts)]; text(ts,0.85,cell_string)

xlabel('\\fontsize{14} \\bft \\rightarrow') ylabel('\\fontsize{14} \\bfy \\rightarrow') 执行结果:(图3-3)

图3-3

五、实验结果及讨论

1,通过这次实验,我学会了MATLAB 图形绘制的基本方法,掌握 了 MATLAB 图形绘制程序编辑的基本指令,而且还懂得了利用 MATLAB 图形编辑窗口编辑和修改图形界面,并添加图形的各种标 注。 2,感觉到了MATLAB 的强大,而且很实用。

参考资料

word文档整理分享

实验四 采用SIMULINK的系统仿真

一、实验时间及地点:

参考资料

word文档整理分享

实验时间:2015.10.21上午8:30—9:30 实验地点:黄岛老校区计算中心

二、实验目的:

1、熟悉SIMULINK 工作环境及特点

2、掌握线性系统仿真常用基本模块的用法 3、掌握SIMULINK 的建模与仿真方法 4、子系统的创建和封装设计

1、 实验内容:

练习A 1、SIMULINK仿真实际应用,建立双环调速的电流环系统的方框图模型,模型参数设为Ks=44;Ts=0.00167;Ta=0.017;R=1;Tm=0.075;Ce=0.1925;Kt=0.01178;T1=0.049;T2=0.088, (1)在Simulink集成环境下建立模型,在给定信号作用点处输入单位给定阶跃响应信号,0.3秒后在扰动信号点输入单位阶跃响应信号。并绘制相应的响应曲线 (2)计算仿真结果的超调量、上升时间、调节时间、稳态误差。

Ti,Td用使系统满足超调量15%,(3)设计PID调节器替代图中的比例积分调节器,调节KP,

上升时间0.3s,调节时间0.4s的要求。

(4)要求对加入的PID控制器封装成一个模块使用 封装步骤1 创建子系统 封装步骤2 封装子系统 封装步骤3 设置参数

封装步骤4 修改和设计模块图标

四、实验操作过程(实验说明)

1. 画出双环调速的电流环系统的方框图模型,并在Simulink集成环境下建立模型:(图

4-1)

参考资料

word文档整理分享

图4-1

2. 绘制相应的响应曲线:(图4-2)

图4-2

参考资料

word文档整理分享

五、实验结果及讨论

1、SIMULINK的基本操作:

1) 启动SIMULINK软件包:可以在MATLAB命令窗口键入“SIMULINK”命令,回车后将

弹出SIMULINK图形库浏览器(SIMULINK LIBRARY BREWSER)界面,也可以选择“SIMULINK>LIBRARY BREWSER”同样可以打开该界面;

2) SIMULINK用户接口:SIMULINK仿真模型编译器界面有菜单栏、工具栏、状态栏等,

通过这些接口可以调整仿真运行时间,仿真模式等,可以查看仿真运行进度等信息。 3) 构建SIMULINK框图:用鼠标将模块库中的所需的模块拖至系统模型中,然后添加

连线将各个模块连接起来,模型中可以包含WORKSPACE中已定义的变量;

4) 运行:点击仿真模型编译器界面中的运行按钮,系统会在输入信号的作用下输出,

通过SCOPE模块可以查看输出响应曲线,通过TO WORKSPACE模块可以将输出及时间信号送至工作区。

参考资料

word文档整理分享

实验五 控制系统的频域与时域分析

一、实验时间及地点:

实验时间:2015.10.28上午8:30-9:30 实验地点:黄岛老校区计算中心

二、实验目的:

1、掌握控制系统数学模型的基本描述方法和相互转化 2、了解控制系统的稳定性分析方法

3、掌握控制系统频域与时域分析基本方法

三、实验内容:

练习A: 1、

表示下列传递函数模型,并转化成其他的数学模型

4(s2)(s26s6)2(1)G(s) 332s(s1)(s3s2s5)(2)G(s)(3)G(s)4s2

s32s51

(2s1)(s2)•01x101x•12x1ux2(4)2

x1y01x22、 一个单位负反馈开环传递函数为

Gsk

s0.5s14s1试绘出系统闭环的根轨迹图;并在跟轨迹图上任选一点,试计算该点的增益k及其所有极点的位置

参考资料

word文档整理分享

四、实验操作过程(实验说明)

>> num=[4,-2] num =

4 -2

>> den=[1 0 2 5] den =

1 0 2 5

>> Gs=tf(num,den) Gs =

4 s - 2 ---------------- s^3 + 2 s + 5

Continuous-time transfer function. >> >> >> >> num=0.5; >> den=[1 2.5 1]; >> Gs=tf(num,den)

参考资料

word文档整理分享

Gs =

0.5

------------------- s^2 + 2.5 s + 1

Continuous-time transfer function. >> >> >> >> k=1; >> num=k;

>> den=[2 4.5 1 0]; >> Gs=tf(num,den) Gs =

1

-------------------------- 2 s^3 + 4.5 s^2 + s

Continuous-time transfer function.

>> Ms=Gs/(Gs+1) Ms =

2 s^3 + 4.5 s^2 + s

--------------------------------------------------------------- 4 s^6 + 18 s^5 + 24.25 s^4 + 11 s^3 + 5.5 s^2 + s

参考资料

word文档整理分享

Continuous-time transfer function.

>> rlocus(Ms) %绘制系统闭环的根轨迹图(图5-1)

图5-1

>> pzmap(Ms) %绘制零极点图(5-2)

图5-2 >> [p,z]=pzmap(Ms)

参考资料

word文档整理分享

p =

0.0000 + 0.0000i -2.1254 + 0.0000i -2.0000 + 0.0000i -0.0623 + 0.4810i -0.0623 - 0.4810i -0.2500 + 0.0000i z =

0 -2.0000 -0.2500

>> [k,poles]=rlocfind(Ms)

Select a point in the graphics window

selected_point =

0.5795 + 0.4927i k =

4.1162 poles =

0.0000 + 0.0000i -2.4675 + 0.0000i -2.0000 + 0.0000i

参考资料

word文档整理分享

0.1088 + 1.0124i 0.1088 - 1.0124i -0.2500 + 0.0000i

五、实验结果及讨论

1. MATLAB通过函数tf(num,den)建立传递函数模型,通过zpk(z,p,k)建立零极点增益模

型,通过ss(A,B,C,D)建立连续系统状态空间模型;

2. MATLAB通过ss2tf(), ss2zp(), tf2ss(), tf2zp(), zp2ss(), zp2tf() 等函数将传递

函数模型、零极点增益模型、状态空间模型等模型互相转换;

3. 通过函数rlocus(sys) 可绘制系统sys的根轨迹图,通过pzmap(sys)可绘制系统sys

的零极点图,通过[k,poles]=rlocfind(Ms)在根轨迹图上任选一点可计算出该点的增益k及所有极点的位置。

参考资料

word文档整理分享

实验六 控制系统PID校正器设计法

一、实验时间及地点:

实验时间:2015.10.28上午8:30-9:30 实验地点:黄岛老校区计算中心

二、实验目的:

1、 熟悉常规PID控制器的设计方法 2、 掌握PID参数的调节规律

3、 学习编写程序求系统的动态性能指标

三、实验内容:

1、在SIMULINK窗口建立如下模型 2、设计PID控制器 ,传递函数模型如下

1Gc(s)Kp1TsD Tsi3、修改PID参数Kp、Ti和Td,讨论参数对系统的影响 4、 利用稳定边界法对PID参数Kp、Ti和Td校正设计

5、根据PID参数Kp、Ti和Td对系统的影响,调节PID参数实现系统的超调量小于10%

四、实验操作过程(实验说明)

1. 在SIMULINK窗口建立如下模型:(图6-1)

参考资料

word文档整理分享

图6-1

参考资料

word文档整理分享

2. 设计PID控制器:(图6-2)

图6-2

3. 利用稳定边界法对PID参数Kp、Ti和Td校正设计:

参数 数值

校正后的响应曲线:(图6-3)

Km 23.208 Tm 0.0286 Kp 13.693 Ti 0.0143 Td 0.00358 参考资料

word文档整理分享

图6-3 4. 调节PID参数实现系统的超调量小于10%:

参数 数值 Kp 23.305 Ti 0.035 Td 0.00875 如图6-4,超调量为9.4% :

图6-4

参考资料

word文档整理分享

五、实验结果及讨论

1. 学会了通过SIMULINK建立动态系统模型并进行仿真,能熟练地运用SIMULINK库,设置

模型参数,建立并运用SIMULINK用户接口;

2. 学会了在SIMULINK中根据传递函数模型设计PID控制器,并将其封装成子系统,编辑

封装模块的显示文本,设置系统参数,以及添加子系统帮助文档; 3. 学会了利用稳定边界法对PID参数校正,找到临界稳定增益和临界稳定角频率,设定基

于稳定性分析的PID参数;

4. 通过不同PID参数对系统响应曲线的影响规律修改PID参数,使系统超调量小于10%。

参考资料

因篇幅问题不能全部显示,请点此查看更多更全内容

Top