MATLAB控制系统仿真实验报告.docx
《MATLAB控制系统仿真实验报告.docx》由会员分享,可在线阅读,更多相关《MATLAB控制系统仿真实验报告.docx(39页珍藏版)》请在冰豆网上搜索。
![MATLAB控制系统仿真实验报告.docx](https://file1.bdocx.com/fileroot1/2023-2/23/d168bd2a-f815-4832-b730-a9af3dc99019/d168bd2a-f815-4832-b730-a9af3dc990191.gif)
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命令,例如在命令窗口输入helpeye,然后根据帮助说明,学习使用指
令eye(其它不会用的指令,依照此方法类推)
5、学习使用clc、clear,观察commandwindow、commandhistory和workspace等窗口的
变化结果。
6、初步程序的编写练习,新建M-file,保存(自己设定文件名,例如exerc1、exerc2、
exerc3⋯⋯),学习使用MATLAB的基本运算符、数组寻访指令、标准数组生成函数和
数组操作函数。
注意:
每一次M-file的修改后,都要存盘。
练习A:
(1)helprand,然后随机生成一个2×6的数组,观察commandwindow、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='Thisisanexample.'
串数组的大小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()的熟悉和运用。
有符号表达式:
e1acx2yapx2bcxybpxckykp,e2cyp
试计算e1e2?
与e1e2?
四、实验操作过程(实验说明)
>>helprand%用help指令学习rand的用法
rand-Uniformlydistributedpseudorandomnumbers
ThisMATLABfunctionreturnsapseudorandomscalardrawnfromthestandard
uniformdistributionontheopeninterval(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
>>[12;34]
%清除命令窗口
%输入一个二维数组
ans=
12
34
>>[1,2;3,4]%将空格改为逗号效果一致
ans=
12
34
>>a=[1234;5678];
>>b=a(2:
2,3:
4)%逗号前面是行,后面是列,冒号前后的数表示所选范围
b=
78
>>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)
ans=
2
7
6
9
5
1
4
3
8
>>a='hello'
a=
hello
%逆时针旋转数组90°
参考资料
word文档整理分享
>>b=size(a)%字符串a的大小为1x5
b=
15
>>symsxypkabc%创建符号对象
>>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=[12]
a=
12
>>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
思考题
n
4、已知一维数组A[2,4,5,8,10]
、B
[4,9,6,7,4],用for
循环语句实现AiBni1。
i1
求和函数可用sum()
5、
(1)编写求解一维数组平均值的函数文件。
(2)编写求解二维数组平均值的函数文件。
四、实验操作过程(实验说明)
1.用for循环语句实现求1~100的和,函数名为theSec().
程序:
a=0;
fori=1:
100
a=i+a;
参考资料
word文档整理分享
end
fprintf('%d\n',a)
执行结果:
>>theSec%求1~100的和
5050
2.用for循环语句实现编写一个求n阶乘的函数文件,函数名为jiex(x).
程序:
functionjiex(x)
a=1;
fori=1:
x
a=a*i;
end
fprintf('%d\n',a)
执行结果:
>>jiex(4)%求4的阶乘
24
n
3.已知一维数组A[2,4,5,8,10]、B[4,9,6,7,4],用for循环语句实现AiBni1。
i1
求和,函数名用ABsum()
程序:
functiony=ABsum()
a=[2,4,5,8,10];
b=[4,9,6,7,4];
n=5;
sum=0;
fori=1:
n
sum=sum+a(1,i)*b(1,n-i+1);
end
y=sum;
参考资料
word文档整理分享
执行结果:
>>ABsum()ans=
178
4.编写求解任意数组平均值的函数文件,函数名为avg(f).
程序:
functiony=avg(f)
[m,n]=size(f);
sum=0;
fori=1:
m
forj=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文档整理分享
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
01234567
plot指令基本操作演示
【2】用图形表示连续调制波形ysin(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])
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
00.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)])
gridon
title('\ity=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')
holdon;plot(ts,0.95,'bo','MarkerSize',10);holdoff
cell_string{1}='\fontsize{12}\uparrow';
参考资料
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.2843
?
y
1.05
1
0.95
a=0.3
w=0.7
-
ò?
¨?
±?
?
ts=9.6133
6.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.用图形表示连续调制波形ysin(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)])gridon
title('\ity=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')
holdon;plot(ts,0.95,'bo','MarkerSize',10);holdoff
参考资料
word文档整理分享
cell_string{1}='\fontsize{12}\uparrow';
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)
计算仿真结果的超调量、上升时间、调节时间、稳态误差。
(3)
设计PID调节器替代图中的比例积分调节器,调节KP,Ti,Td用使系统满足超调量
15%,
上升时间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图形库浏览器(SIMULINKLIBRARYBREWSER)界面,也可以选择
“SIMULINK>LIBRARYBREWSER”同样可以打开该界面;
2)SIMULINK用户接口:
SIMULINK仿真模型编译器界面有菜单栏、工具栏、状态栏等,
通过这些接口可以调整仿真运行时间,仿真模式等,可以查看仿真运行进度等信息。
3)构建SIMULINK框图:
用鼠标将模块库中的所需的模块拖至系统模型中,然后添加
连线将各个模块连接起来,模型中可以包含WORKSPACE中已定义的变量;
4)运行:
点击仿真模型编译器界面中的运行按钮,系统会在输入信号的作用下输出,
通过SCOPE模块可以查看输出响应曲线,通过TOWORKSPACE模块可以将输出及时
间信号送至工作区。