计算机控制状态空间反馈课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
控制系统状态空间设计
设计对象
系统的对象模型为:
)8)(4(1)(++=s s s s G
设计目的
A :试确定一个状态负反馈阵K ,使相对于单位阵阶跃参考 输入的输出过渡过程,满足如下的期望指标:超调量<=20%, 峰值时间<=0.4s 。
B :如果系统的状态变量在实际上无法测量,试确定一个状态观 测器(全维状态观测器),使得通过基于状态观测器的状态反馈, 满足上述期望的性能指标。
设计要求
1. 要求学生掌握当Gc (s )设计好后如何将其变换为离散算法Gc (Z ) 以及如何将Gc (Z )转换在计算机上可完成计算的迭代方程。
2. 要求学生能掌握工业中常用的基本PID 算法。
3. 掌握一阶向前,向后差分及双线性变换离散化的具体做法及应用 场合。
4. 熟悉PID 两种基本算法的计算公式:位置算法和增量算法。
5. 熟练使用MATLAB 软件,掌握其仿真的方法、步骤及参数设置。
6. 了解计算机控制系统的组成及相应设备的选用等问题。设计方法及步骤
1.利用Simulink 进行仿真,判断是否满足期望的性能指标。系统仿真方框图如下:
系统仿真结果如下:
有图可知,系统不满足期望的性能指标,需要进行配置。2.由期望的性能指标求出闭环系统的期望极点。
首先有典型二阶系统性能指标与系统参数之间的关系,确定统参数,然后再确定系统的主导极点和非主导极点。
由系统的性能指标:超调量<=20%,峰值时间<=0.4s。可以求
出ζ =0.456 Wn=8.84。
因此选取ζ =0.60 Wn=13.00为系统参数
由系统的特征方程可以求出系统的特征根为:
S 1=-7.8+10.4j ,S 2=-7.8-10.4j
令系统的非主导极点为:
S 3=-130
则需要配置的极点是是:
P=[-7.8+10.4j,-7.8-10.4j,-130];
3.求出系统空间表达式。利用MATLAB 有关模型转换函数可求得
A =⎪⎪⎪⎭
⎫ ⎝⎛---010001
13212 B =⎪⎪⎪⎭
⎫ ⎝⎛001
C =()100
D =0
4.判断系统的能控能关性,确定系统是否能够通过状态反馈实现极 点的任意配置。
能控性判别矩阵Q=⎪⎪⎪⎭
⎫ ⎝⎛--100121
0112121 系统的可控矩阵阶数为3,为满秩,则系统是能控的。
5.求出用于极点配置的状态矩阵K :利用函数K=acker (A,B,P ),
其中参数A 、B 为系统的状态方程参数矩阵,P 为期望的极点向量, K 为状态反馈矩阵。
K =(134 2165 21969)
6.求出输入增益Nbar :
Nbar =21970
7.求出反馈后系统的闭环状态空间表达式:
At =⎪⎪⎪⎭
⎫ ⎝⎛---010001
219702197146 Bt =⎪⎪⎪⎭
⎫ ⎝⎛0021970
Ct =(0 0 1)
Dt =0
系统的阶跃响应如下:
满足所给定的性能指标。
8.配置状态观测器:
由于期望极点为:
P=[-7.8+10.4j,-7.8-10.4j,-130];
又由于希望观测器的响应要快于原系统的响应,配置状态观测器 的极点应尽量离原极点距离远一些,故可设为为:
P=[-23.4+31.2j,-23.4-31.2j,-260];
9.a:求系统的能关矩阵:
Qo =⎪⎪⎪⎭
⎫ ⎝⎛001010100
可知系统能观测,可以进行配置。
b:求状态观测器增益矩阵:
L =⎪⎪⎪⎭
⎫ ⎝⎛29010120264590
10.求基于状态观测器的状态反馈闭环系统的状态空间表达式:
At= ⎪⎪⎪⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛--------2900000010120000002645903010000000000000000219702160130219702200150
Bt =⎪⎪⎪⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛0000021970 Ct =(0 0 1 0 0 0)
Dt=0
系统运行如下:
由图可知,系统的阶跃响应比原系统有较快的响应,且满足所设定的条件。
设计所用程序如下:
反馈程序
num=1;
den=[1 12 32 1];
tf(num,den)
[A,B,C,D]=tf2ss(num,den)
n=length(A);
Q=ctrb(A,B)
m=rank(Q);
if m==n
disp('system state variable can be totally controlled(系统可控)')
P=[-7.8+10.4j,-7.8-10.4j,-130];
K=acker(A,B,P)
else
end
s=size(A,1);
Z=[zeros([1,s]) 1];
N=inv([A,B;C,D])*Z';
Nx=N(1:s);
Nu=N(1+s);
Nbar=Nu+K*Nx
At=A-B*K
Bt=B*Nbar
Ct=C
Dt=D
step(At,Bt,Ct,Dt);
hold on;
grid;