自控实验指导书.docx
- 文档编号:14236972
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:26
- 大小:134.73KB
自控实验指导书.docx
《自控实验指导书.docx》由会员分享,可在线阅读,更多相关《自控实验指导书.docx(26页珍藏版)》请在冰点文库上搜索。
自控实验指导书
实验一:
熟悉控制系统工具箱中的常用函数与命令
实验目的:
matlab语言及环境的熟悉。
掌握常用的控制系统命令。
实验要求:
1、完成以下任务书中规定任务;
2、将由Matlab得到的结果与手工计算的结果进行比较,确定仿真结果的正确无误;
3、总结并编写实验报告。
实验步骤与内容:
1、熟悉matlab语言环境:
认识并熟悉Matlab命令窗口与编程环境。
2、练习matlab中的常用控制函数,实现控制系统中的基本计算和转换:
进入Matlab环境,在Matlab命令窗口演练如下命令:
求逆inv(A);求行列式det(A)(要求矩阵必须为方阵)
》a=[123;456;235];
》b=inv(a)
》det(a)
求矩阵的秩rank(A):
》a=[123;345];
》rank(a)
求矩阵A的特征向量V及特征值D——[V,D]=eig(A):
其中D的对角线元素为特征值,V的列为对应的特征向量。
如果使用D=eig(A),则只返回特征值。
》a=[98;68]
》[v,d]=eig(a)
模型形式的转换:
已知系统状态空间模型为:
》A=[01;-1-2];B=[0;1];
》C=[1,3];D=[1];
》[num,den]=ss2tf(A,B,C,D,iu)%从状态方程到传递矩阵或函数
%iu用来指定第n个输入,当只有一个输入时可忽略。
》num=[152];
》den=[121];
》[abcd]=tf2ss(num,den)%从传递函数到状态方程
》num=[00-2;0-1-5;120];den=[16116];
》[A,B,C,D]=tf2ss(num,den)%从传递函数到状态方程
求状态方程的输出阶跃响应:
》A=[01;-1-2]
》B=[0;1]
》C=[10]
》D=[0]
》sys=ss(A,B,C,D)%状态方程的模型表达
》t=0:
0.02:
2%仿真响应时间
》y=step(sys,t)%求阶跃输出响应
》plot(y,t,'r-')%绘制阶跃输出响应曲线
求矩阵指数eAt
>>a=[-01;-1-2];
>>t=0.5;
>>expm(a*t)
多项式行向量的创建方法
(1)求3阶方阵A的特征多项式。
>>A=[111213;141516;171819];
>>PA=poly(A)%A的特征多项式
>>PPA=poly2str(PA,'s')%以较习惯的方式显示多项式
(2)由给定根向量求多项式系数向量。
>>R=[-0.5,-0.3+0.4*i,-0.3-0.4*i];%根向量
>>P=poly(R)%R的特征多项式
>>PR=real(P)%求PR的实部
>>PPR=poly2str(PR,'x')
在MATLAB计算生成的图形上标出图名和最大值点坐标。
>>clear%清除内存中的所有变量
>>a=2;%设置衰减系数
>>w=3;%设置振荡频率
>>t=0:
0.01:
10;%取自变量采样数组
>>y=exp(-a*t).*sin(w*t);%计算函数值,产生函数数组
>>[y_max,i_max]=max(y);%找最大值元素位置
>>t_text=['t=',num2str(t(i_max))];%生成最大值点的横坐标字符串
>>y_text=['y=',num2str(y_max)];%生成最大值点的纵坐标字符串
%生成标志最大值点的字符串
>>max_text=char('maximum',t_text,y_text);
%生成标志图名用的字符串
>>tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)'];
>>plot(t,zeros(size(t)),'k')%画纵坐标为0的基准线
>>holdon%保持绘制的线不被清除
>>plot(t,y,'b')%用兰色画y(t)曲线
>>plot(t(i_max),y_max,'r.','MarkerSize',20)%用大红点标最大值点
>>text(t(i_max)+0.3,y_max+0.05,max_text)%在图上注最大值点数据值
%书写图名、横坐标名、纵坐标名
>>title(tit),xlabel('t'),ylabel('y'),holdoff
思考题:
1、寻找合适的状态空间模型或传递函数模型,练习如下命令,写出输出结果
residue:
传递函数模型与部分分式模型互换
ss2tf:
状态空间模型转换为传递函数模型
ss2zp:
状态空间模型转换为零极点增益模型
tf2ss:
传递函数模型转换为状态空间模型
tf2zp:
传递函数模型转换为零极点增益模型
zp2ss:
零极点增益模型转换为状态空间模型
zp2tf:
零极点增益模型转换为传递函数模型
实验二:
用Simulink实现控制系统的仿真模拟
实验目的:
学习用Simulink模拟控制系统,并能够用Simulink仿真与分析控制系统。
实验要求:
1、完成以下任务书中规定任务;
2、将由Simulink得到的结果与手工计算的结果进行比较,确定仿真结果的正确无误;
3、总结并编写实验报告。
实验步骤与内容:
1、认识并熟悉Simulink:
练习Simulink工具箱中常用的控制环节;熟悉Simulingk编辑窗口。
2、练习用Simulink连接如下图
、
所示的控制系统:
假设从实际自然界(力学、电学、生态等)或社会中,抽象出有初始状态为0的二阶微分方程
,
是单位阶跃函数。
请按照以下实验步骤操作,学习如何直接利用Simulink构搭求解该微分方程的模型。
••••改写微分方程为状态方程,绘制状态方程的模拟结构图。
•根据模拟结构图,利用SIMULINK库中的标准模块构作仿真模型如下。
图2-1利用SIMULINK库中的标准模块构作的仿真模型
•仿真操作:
在SIMULINK编辑窗口中直接运行上面的仿真模型,双击激活Scope组件可以看到运行结果。
系统状态空间方程为
•simulink仿真图
图2-3另一种simulink仿真图
•双击state-space模块,弹出state-space模块参数输入窗口,输入参数如下例:
图2-4state-space模块参数输入窗口
思考题:
1、对清华版下册p311,9.1.3题,绘制状态方程的模拟结构图,并根据模拟结构图,利用SIMULINK建立仿真模型,输出单位阶跃响应。
2、在simulink中建立并运行以下模型,绘制出输入输出电压随时间变化的曲线。
其中设L=20,R=10,C=5.
实验三:
用M文件实现状态空间表达的控制系统的计算与仿真
实验目的:
1、学会用matlab语言的方法实现状态空间表达式的可控性与可测性的分析;
2、学习用matlab语言实现状态空间表达式的稳定性分析;
3、学习用matlab语言实现状态空间表达式的输出计算与绘图。
实验要求:
1、完成以下任务书中规定任务;
2、将由Matlab得到的结果与手工计算的结果进行比较,确定仿真结果的正确无误;
3、总结并编写实验报告。
实验步骤与内容:
1、可控性与可测性的判断
状态方程与输出方程的组合称为状态空间表达式,又称为动态方程。
在MATLAB中,系统状态空间用(A,B,C,D)矩阵组表示。
以如下的二阶倒立摆模型为例,用matlab语言分析其可控性和可测性。
:
•ctrb和obsv函数可以求出状态空间系统的可控性和可观性矩阵。
•格式:
co=ctrb(a,b)ob=obsv(a,c)
•对于n×n矩阵a,n×m矩阵b和p×n矩阵c
✓ctrb(a,b)可以得到n×nm的可控性矩阵
✓obsv(a,c)可以得到nm×n的可观性矩阵
当co的秩为n时,系统可控;当ob的秩为n时,系统可观。
••可控性的判断与分析:
首先检测该系统是否可控,Matlab源程序如下
clc
clear
A=[000100;000010;000001;000000;077.0642-21.1927000;0-38.532137.8186000;];
B=[0;0;0;1;5.7012;-0.0728];
Co=ctrb(A,B)
rank(Co)
•可测性的判断与分析:
检测该系统是否可测,Matlab源程序如下
clc
clear
A=[000100;000010;000001;000000;077.0642-21.1927000;0-38.532137.8186000;];
C=[100000;010000;001000];
ob=obsv(A,C)
rank(ob)
2、系统稳定性判断:
仍以二阶倒立摆模型为例,程序实现如下:
clc
clear
A=[000100;000010;000001;000000;077.0642-21.1927000;0-38.532137.8186000;];
B=[0;0;0;1;5.7012;-0.0728];
C=[100000;010000;001000];
D=[0;0;0];
D=eig(A):
%求矩阵A特征值D的方法判断
%求系统阶跃响应的方法判断
sys=ss(A,B,C,D)%状态方程的模型表达
t=0:
0.1:
10%仿真响应时间
y=step(sys,t)%求阶跃输出响应
plot(y,t,‘r-’)%绘制阶跃输出响应曲线
并由此判断系统的稳定性。
3、输出计算与绘图:
例:
某2输入2输出系统如下所示:
,求系统的单位阶跃响应和冲激响应。
MATLAB的step()和impulse()函数本身可以处理多输入多输出的情况,因此编写MATLAB程序并不因为系统输入输出的增加而变得复杂。
clc
clear
%系统状态空间描述
a=[-2.5-1.2200;1.22000;1-1.14-3.2-2.56;...
002.560];
b=[41;20;20;00];
c=[0103;0001];
d=[0-2;-20];
%绘制闭环系统的阶跃响应曲线
figure
(1)
step(a,b,c,d)
title('stepresponse')
xlabel('time-sec')
ylabel('amplitude')
figure
(2)
impulse(a,b,c,d)
title('impulseresponse')
xlabel('time-sec')
ylabel('amplitude')
思考题:
1、用程序实现清华版下册P313,9.14题,并绘制闭环系统的阶跃响应曲线。
实验四:
现代控制理论基础的综合实验
实验目的:
学习用matlab语言实现系统的极点配置;
实验要求:
1、完成以下任务书中规定任务;
2、将由Matlab得到的结果与手工计算的结果进行比较,确定仿真结果的正确无误;
3、总结并编写实验报告。
实验步骤与内容:
1、简单极点配置仿真实验:
程序实现如下:
clc
clear
A=[01;23];
B=[01]';
C=[10];
D=[0];
sx=[-1-1];%希望的极点位置
[K,prec,message]=place(A,B,sx);
sys0=ss(A,B,C,D);%原系统
sys1=ss(A-B*K,B,C,D);%极点配置以后的系统
t=0:
0.05:
20
y0=step(sys0,t);
y1=step(sys1,t);
figure
(1);
plot(t,y0,'b.',y1,'r-');
注:
适当改变希望配置的极点的位置(如具有复数极点、两极点位置变化等),观察系统输出相应的变化。
同时观察K,prec,message参数的变化。
2、高维系统极点配置仿真实验:
仍以二阶倒立摆模型为例,实验一已经证明该模型是可控和可测的,因此下面以该模型为利用程序法实现其极点配置。
程序实现如下:
clc
clear
A=[000100;000010;000001;000000;077.0642-21.1927000;0-38.532137.8186000;];
B=[0;0;0;1;5.7012;-0.0728];
C=[100000;010000;001000];
D=[0;0;0];
figure
(1)
g1=ss(A,B,C,D);%没有极点配置的系统
step(g1);%没有极点配置的系统相应
P=[-1-1.8*i;-1+1.8*i;-2+8*i;-2-8*i;-2.5+5*i;-2.5-5*i];%输入希望配置的极点
[K,prec,message]=place(A,B,P);
A1=A-B*K;
figure
(2)
g=ss(A1,B,C,D);%极点配置后的系统
step(g);%极点配置后的系统相应
注:
适当改变希望配置的极点的位置,观察系统输出相应的变化。
思考与练习:
1、用程序实现清华版下册p427,10.1的极点配置,并用simulink制作实现极点配置前后的仿真对照模型。
2、用程序实现清华版下册p427,10.5的极点配置,并用simulink制作实现极点配置前后的仿真对照模型。
附录1:
控制系统中matlab的常用函数、命令与编程说明
❑MATLBA程序的基本设计原则
1、%后面的内容是程序的注解,要善于运用注解使程序更具可读性。
2、养成在主程序开头用clear指令清除变量的习惯,以消除工作空间中其他变量对程序运行的影响。
但注意在子程序中不要用clear。
3、参数值要集中放在程序的开始部分,以便维护。
要充分利用MATLAB工具箱提供的指令来执行所要进行的运算,在语句行之后输入分号使其及中间结果不在屏幕上显示,以提高执行速度。
4、input指令可以用来输入一些临时的数据;而对于大量参数,则通过建立一个存储参数的子程序,在主程序中用子程序的名称来调用。
5、程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作。
6、充分利用Debugger来进行程序的调试(设置断点、单步执行、连续执行),并利用其他工具箱或图形用户界面(GUI)的设计技巧,将设计结果集成到一起。
7、设置好MATLAB的工作路径,以便程序运行。
8、MATLAB程序的基本组成结构
清除命令:
清除workspace中的变量和图形(clear,close)
定义变量:
包括全局变量的声明及参数值的设定
逐行执行命令:
指MATLAB提供的运算指令或工具箱提供的专用命令。
控制循环:
包含for,ifthen,switch,while等语句。
绘图命令:
包括polt、plotm等将运算结果绘制出来。
❑M文件的编辑及MATLAB工作路径的设置
•进入MATLAB的Editor/Debugger窗口来编辑程序
•在编辑环境中,文字的不同颜色显示表明文字的不同属性。
绿色:
注解;黑色:
程序主体;红色:
属性值的设定;蓝色:
控制流程。
•在运行程序之前,必须设置好MATLAB的工作路径,使得所要运行的程序及运行程序所需要的其他文件处在当前目录之下,只有这样,才可以使程序得以正常运行。
否则可能导致无法读取某些系统文件或数据,从而程序无法执行。
•通过cd指令在命令窗口中可以更改、显示当前工作路径。
•通过路径浏览器(pathbrowser)也可以进行设置
❑MATLAB的程序类型
MATLAB的程序类型有三种,一种是在命令窗口下执行的脚本M文件;另外一种是可以存取的M文件,也即程序文件;最后一种是函数(function)文件。
1、脚本M文件
在命令窗口中输入并执行,它所用的变量都要在工作空间中获取,不需要输入输出参数的调用,退出MATLAB后就释放了。
2、程序文件
•以.m格式进行存取,包含一连串的MATLAB指令和必要的注解。
需要在工作空间中创建并获取变量,也就是说处理的数据为命令窗口中的数据,没有输入参数,也不会返回参数。
•程序运行时只需在工作空间中键入其名称即可。
3、函数文件
例myhilb1.mmyhilb.m
与在命令窗口中输入命令一样,函数接受输入参数,然后执行并输出结果。
用help命令可以显示它的注释说明。
4、具有标准的基本结构。
(1)函数定义行(关键字function)
function[out1,out2,..]=filename(in1,in2,..)
(2)函数体说明及有关注解
以(%)开头,用以说明函数的作用及有关内容,如果不希望显示某段信息,可在它的前面加空行
(3)函数体语句
函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。
如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量。
❑求取系统的冲激响应:
impulse()
y=impulse(num,den,t):
其中num和den分别为系统传递函数描述中的分子和分母多项式系数,t为选定的仿真时间向量,一般可以由t=0:
impulse:
end等步长地产生出来。
该函数返回值y为系统在仿真时刻各个输出所组成的矩阵。
[y,x,t]=impulse(A,B,C,D,iu):
其中A,B,C,D为系统的状态空间描述矩阵,iu用来指明输入变量的序号。
x为系统返回的状态轨迹。
如果对具体的响应值不感兴趣,而只想绘制系统的阶跃响应曲线,可调用以下的格式:
impulse(num,den);impulse(num,den,t);impulse(A,B,C,D,iu,t);impulse(A,B,C,D,iu);
❑求取系统单位阶跃响应:
step()
y=step(num,den,t):
其中num和den分别为系统传递函数描述中的分子和分母多项式系数,t为选定的仿真时间向量,一般可以由t=0:
step:
end等步长地产生出来。
该函数返回值y为系统在仿真时刻各个输出所组成的矩阵。
[y,x,t]=step(A,B,C,D,iu):
其中A,B,C,D为系统的状态空间描述矩阵,iu用来指明输入变量的序号。
x为系统返回的状态轨迹。
如果对具体的响应值不感兴趣,而只想绘制系统的阶跃响应曲线,可调用以下的格式:
step(num,den);step(num,den,t);step(A,B,C,D,iu,t);step(A,B,C,D,iu);
MATLAB的step()和impulse()函数本身可以处理多输入多输出的情况,因此编写MATLAB程序并不因为系统输入输出的增加而变得复杂。
❑线性系统的稳态值可以通过函数dcgain()来求取,其调用格式为:
dc=dcgain(num,den)或dc=dcgain(a,b,c,d)
❑对于离散系统只需在连续系统对应函数前加d就可以,如dstep,dimpulse等。
它们的调用格式与step、impulse类似,可以通过help命令来察看自学。
❑MATLAB提供了函数pzmap()来绘制系统的零极点图,其用法如下:
[p,z]=pzmap(a,b,c,d):
返回状态空间描述系统的极点矢量和零点矢量,而不在屏幕上绘制出零极点图。
[p,z]=pzmap(num,den):
返回传递函数描述系统的极点矢量和零点矢量,而不在屏幕上绘制出零极点图。
pzmap(a,b,c,d)或pzmap(num,den):
不带输出参数项,则直接在s复平面上绘制出系统对应的零极点位置,极点用×表示,零点用o表示。
pzmap(p,z):
根据系统已知的零极点列向量或行向量直接在s复平面上绘制出对应的零极点位置,极点用×表示,零点用o表示。
❑[V,D]=eig(A)为特征值分解求矩阵A的特征向量V及特征值D,满足A*V=V*D。
其中D的对角线元素为特征值,V的列为对应的特征向量。
如果D=eig(A)则只返回特征值。
❑求逆:
inv(A);要求矩阵必须为方阵
❑求行列式:
det(A);要求矩阵必须为方阵
❑rank(A):
求矩阵的秩
❑一些常用的特殊矩阵
单位矩阵:
eye(m,n);eye(m)
零矩阵:
zeros(m,n);zeros(m)
一矩阵:
ones(m,n);ones(m)
对角矩阵:
对角元素向量V=[a1,a2,…,an]A=diag(V)
随机矩阵:
rand(m,n)产生一个m×n的均匀分别的随机矩阵
❑转置:
对于实矩阵用(’)符号或(.’)求转置结果是一样的;然而对于含复数的矩阵,则(’)将同时对复数进行共轭处理,而(.’)则只是将其排列形式进行转置。
❑逆矩阵与行列式计算
求逆:
inv(A);
求行列式:
det(A)
要求矩阵必须为方阵
❑矩阵下标
MATLAB通过确认矩阵下标,可以对矩阵进行插入子块,提取子块和重排子块的操作。
•A(m,n):
提取第m行,第n列元素
•A(:
n):
提取第n列元素
•A(m,:
):
提取第m行元素
•A(m1:
m2,n1:
n2):
提取第m1行到第m2行和第n1列到第n2列的所有元素(提取子块)。
•A(:
):
得到一个长列矢量,该矢量的元素按矩阵的列进行排列。
•矩阵扩展:
如果在原矩阵中一个不存在的地址位置上设定一个数(赋值),则该矩阵会自动扩展行列数,并在该位置上添加这个数,而且在其他没有指定的位置补零。
•消除子块:
如果将矩阵的子块赋值为空矩阵[],则相当于消除了相应的矩阵子块。
❑[m,n]=size(A,x):
返回矩阵的行列数m与n,当x=1,则只返回行数m,当x=2,则只返回列数n。
❑length(A)=max(size(A)):
返回行数或列数的最大值。
❑rank(A):
求矩阵的秩
❑选择图像:
figure
(1);figure
(2);…;figure(n)打开不同的图形窗口,以便绘制不同的图形。
❑gridon:
在所画出的图形坐标中加入栅格;
gridoff:
除去图形坐标中的栅格
❑holdon:
把当前图形保持在屏幕上不变,同时允许在这个坐标内绘制另外一个图形。
holdoff:
使新图覆盖旧的图形
❑模型转换的函数包括:
residue:
传递函数模型与部分分式模型互换
ss2tf:
状态空间模型转换为传递函数模型
ss2zp:
状态空间模型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自控 实验 指导书