目录一览

系统
           1.建模
           2.分析
控制
           3.PID
           4.根轨迹
           5.频率
           6.状态空间
           7.数字化
Simulink
           8.建模
           9.控制

控制器设计中的状态空间法(State-Space Methods for Controller Design)

控制器设计中的频率分析法是在频域中分析系统的一些特征,而状态空间法是在时域中分析、设计系统。下面通过一个例子来学习状态空间法设计控制器。

1、建立数学模型


由牛顿定律和KVL建立有:

设各参数取值分别为:M=0.05kg,R=1Ω,L=0.01H,K=0.0001,g=9.8m/s,取h=0.01m(假设此时的电流为1.4A),在其附近线性化系统:

其中,

[公式],控制变量u为输入电压v,关心的输出为h,可以写出状态空间方程,从而确定A,B,C,D。

A = [0 1 0;980 0 -2.8;0 0 -100];
B = [0; 0; 100];
C = [1 0 0];

2、分析数学模型

poles = eig(A)

执行后结果有一正值31.3050,表示开环系统不稳定。 可以验证 :

t = 0:0.01:2;
u = zeros(size(t));
x0 = [0.01 0 0];
sys = ss(A,B,C,0);
[y,t,x] = lsim(sys,u,t,x0);
plot(t,y)
title('OPen-Loop Response to Non-Zero INitial Condition')
xlabel('Time (sec)')
ylabel('Ball Position (m)')

3、 使用极点位置设计控制器(Control Design Using Pole Placement)
如果我们能够知道各时刻各状态变量的值,即用传感器实时测量磁质质量块的位置、速度,电路中的电流,称为full-state。设计控制器作用于原系统如下所示:

如上图,简化起见,暂时不考虑r,则u=-Kx,闭环反馈系统的状态空间方程变为:

这样系统的极点位置就变为A-BK的特征值,因此我们可以通过改变矩阵K的值来得到目标极点,进而实现目标响应,而这就是状态空间法控制系统的关键。

Matlab提供了 place(A,B,P)  acker(A,B,P) (多个极点处于同一位置时使用)函数来确定目标极点所对应的K值,其中P为目标极点向量。

p1 = -20 + 20i; 
p2 = -20 - 20i; 
p3 = -100;   //为三阶系统确定两个主极点,近似为我们熟悉的二阶系统,便于分析
K = place(A, B, [p1 p2 p3]);
sys_c1 = ss(A-B*K,B,C,0);  
lsim(sys_c1,u,t,x0);  //绘制系统的零输入响应
xlabel('Time (sec)')
ylabel('Ball Position (m)')  //轴标

由响应曲线可见,结果相当理想。当然设置不同的极点会对应不同的动态响应,当动态响应不满足要求时,就要对应调节极点位置,比如动态响应过慢时,尝试向左移动主极点的位置,以得到更快的动态响应。

现在来考虑初始状态为0,输入信号为阶跃信号时的情况,为了使得系统的线性化有效,阶跃值应当选取的尽可能小,重写输入:

u = 0.001*ones(size(t));
lsim(sys_c1,u,t);
axis([0 2 -4E-6 0]);

执行上面的程序发现虽然系统稳定,但输出值并没有跟随阶跃信号。可以通过前置控制量Nbar来解决这个问题:

Matlab中使用函数 rscale.m来确定Nbar的合适值,Nbar = rscale(sys, K) (sys为原开环系统状态空间方程),现在:

Nbar = rscale(sys,K);
lsim(sys_c1,Nbar*u,t);
axis([0 2 0 1.2*10^-3])

此时系统输出稳定在0.001。

当然,并非所有的系统都可以用这种方法来实现控制,系统具有可控性的充要条件是系统的可控性矩阵(controllabilty matrix, CO)满秩。

Matlab提供了ctrb(A,B) 及 ctr(sys) 来得到可控性矩阵(参数皆为原开环系统的)。而矩阵的秩可由rank函数得到。如判断例子系统的可控性:

rank(ctrb(A,B))

结果为3,CO满秩,即系统可控。


4、设计观察器(Observer Design)
在实际情况中我们常常不能获得所有状态量的当前值,这是就需要设计观察器来估计它们,如下所示:


op1 = -100;
op2 = -101;
op3 = -102;  //观察器的极点
L = place(A',C',[op1 op2 op3])';  //由A,C,以及观察器极点确定L
At = [ A-B*K,B*K;zeros(size(A)),A-L*C ];
Bt = [ B*Nbar;zeros(size(B)) ];
Ct = [ C,zeros(size(C)) ];  //新的状态空间参数
sys = ss(At,Bt,Ct,0);  
lsim(sys,zeros(size(t)),t,[x0 x0]);   //绘制系统的零输入响应
title('Linear Simulation Results (with observer)')
xlabel('Time (sec)')
ylabel('Ball Position (m)')   //标题、轴标

与可控性对应,系统是否具有可观性的充要条件是观测性矩阵(observability matrix, OB)满秩。

Matlab提供了obsv(A,C) 及 obsv(sys) 来得到可观性矩阵(参数皆为原开环系统的),如判断例子系统的可观性:

rank((obsv(A,C)))

结果为3,OB满秩,即系统可控。

最后,这节以及下节通常是研究生阶段的学习内容,本人也是自学理解,希望有前辈指导。如有错误,欢迎指出。

下节:数字化控制器设计

----------------------------------------------------------------------------------------------------------------------

欢迎关注、投稿知乎专栏:

用Matlab & Simulink学控制ctms.engin.umich.edu/CT