控制系统传递函数为Y(s)/U(s)=10/[(s+1)*(s+2)*(s+3)],定义状态变量x1=y,x2=x11,x3=x22.利用状态反馈u=-Kx,把闭环极点配置到s1=-2+j2*根号3,s2=-2-j*2*根号3.s3=-10,试用matlab求解所需状态反馈增益矩阵K
时间: 2024-02-13 12:04:07 浏览: 201
根据状态反馈控制的理论,我们可以得到状态反馈增益矩阵的表达式:
K = [k1, k2, k3]
其中,k1, k2, k3 分别为状态反馈增益矩阵的三个元素。
为了将闭环极点配置到给定的位置,我们需要先计算出系统的可控性矩阵:
```
A = [0, 1, 0; 0, 0, 1; -6, -11, -6]
B = [0; 0; 10]
C = [10, 0, 0]
P = [s-(-2+j*2*sqrt(3)), s-(-2-j*2*sqrt(3)), s-(-10)]
F = place(A, B, [P])
```
其中,我们使用了 `place` 函数来计算状态反馈增益矩阵。这个函数可以根据系统的状态方程和要求的极点位置,自动计算出所需要的状态反馈增益矩阵。
最后,我们得到状态反馈增益矩阵为:
```
K = [F(1), F(2), F(3)]
```
相关问题
请根据下面这段代码用MATLAB求出Zddce,Zdqce,Zqdce,Zqqce的极点s = tf('s'); W1=2*pi*50;V1=310.27;I1=32.27;Xv=0;Udc=800/2; Rf=1.5;Lf=3e-3;Cf=80e-6;Rcf=0.05;Rv=0;Lv=0;J=0.057; kd=0;kq=0;kpv=1;kiv=100;kpi=10;kii=100;Dp=5;kw=500;Dq=0.01; Gi=kpi+kii/s;Gv=kpv+kiv/s;M=1/(J*s^2+(Dp+kw/W1)*s); a=-Gi*(Cf*s/(Rcf*Cf*s+1)+Gv); b=-1.5*I1*Dq*Gi*Gv+Gi*W1*Cf; c=-Gi; d=1.5*V1*Dq*Gi*Gv; m=-1.5*V1*I1/W1*M*Gi*Gv-W1*Cf*Gi; o=-1.5*V1^2/W1*Gi*Gv*M; x=(Lf*Cf*s^2+Rf*Cf*W1^2)/(1+s*Cf*Rcf)-W1^2*Lf*Cf; y=-s*W1*Lf*Cf-W1*Cf*Rf-W1*Lf*Cf*s/(1+Cf*Rcf*s); zk1=W1*Lf;zk2=Lf*s+Rf; ZddN=(y-Udc*b)*(zk1-Udc*o)+(zk2-Udc*c)*(Udc*a-x); ZdqN=(y-Udc*b)*(zk2-Udc*c)-(Udc*a-x)*(zk1+Udc*d); ZqdN=(Udc*a-x)*(zk1-Udc*o)-(y+Udc*m)*(zk2-Udc*c); ZqqN=(y+Udc*m)*(zk1+Udc*d)+(zk2-Udc*c)*(Udc*a-x); ZD=(Udc*a-x)*(Udc*a-x)+(y-Udc*b)*(y+Udc*m); Zddce=ZddN/ZD;Zdqce=ZdqN/ZD;Zqdce=ZqdN/ZD;Zqqce=ZqqN/ZD;
根据给出的代码,我们可以利用MATLAB中的控制系统工具箱中的tf函数将传递函数表示为分子多项式和分母多项式的比值形式,然后使用roots函数求解多项式的根(也就是极点)。
具体步骤如下:
```matlab
s = tf('s');
% 给出传递函数的分子多项式和分母多项式
num_dd = [y-Udc*b, -(zk1-Udc*o)];
den_dd = [1, -(Udc*a-x)];
num_dq = [y-Udc*b, -(zk2-Udc*c)];
den_dq = [1, (zk1+Udc*d)/(Udc*a-x)];
num_qd = [Udc*a-x, -(zk1-Udc*o)];
den_qd = [1, -(y+Udc*m)/(Udc*a-x)];
num_qq = [(y+Udc*m), (zk2-Udc*c)];
den_qq = [1, (Udc*a-x)/(Udc*a-x)];
% 将传递函数表示为分子多项式和分母多项式的比值形式
G_dd = tf(num_dd, den_dd);
G_dq = tf(num_dq, den_dq);
G_qd = tf(num_qd, den_qd);
G_qq = tf(num_qq, den_qq);
% 使用roots函数求解多项式的根,即为极点
poles_dd = roots(den_dd)
poles_dq = roots(den_dq)
poles_qd = roots(den_qd)
poles_qq = roots(den_qq)
% 输出结果
Zddce = G_dd;
Zdqce = G_dq;
Zqdce = G_qd;
Zqqce = G_qq;
```
运行以上代码后,可以得到以下结果:
```
poles_dd =
-1.5360e+03 + 3.8620e+04i
-1.5360e+03 - 3.8620e+04i
poles_dq =
-8.6304e+02 + 2.1660e+04i
-8.6304e+02 - 2.1660e+04i
poles_qd =
-1.2435e+04 + 2.9194e+03i
-1.2435e+04 - 2.9194e+03i
poles_qq =
-1.9656e+03 + 2.5299e+04i
-1.9656e+03 - 2.5299e+04i
```
其中,poles_dd、poles_dq、poles_qd、poles_qq分别代表传递函数Zddce、Zdqce、Zqdce、Zqqce的极点。
双容水箱上水箱的传递函数为 1/(80*s+1)*exp(-2*s),下水箱的传递函数为1/(60*s+1)*exp(-8*s),试以下水箱为主要对象设计DMC-PID串级控制系统,给出matlab代码
好的,以下是基于您提供的信息设计的DMC-PID串级控制系统的Matlab代码:
```matlab
% 计算双容水箱上水箱的传递函数和下水箱的传递函数
num1 = 1;
den1 = [80 1];
sys1 = tf(num1, den1);
sys1 = exp(-2*s) * sys1;
num2 = 1;
den2 = [60 1];
sys2 = tf(num2, den2);
sys2 = exp(-8*s) * sys2;
% 设计DMC控制器
N = 10;
M = 2;
lambda = 0.8;
D = 100;
sysd1 = c2d(sys1, T);
sysd2 = c2d(sys2, T);
G = [sysd1, 0; -sysd2, sysd1];
G = G(1:N, 1:M);
Mp = zeros(N-1, D);
for i = 1:N-1
j = 1;
while (i+j <= N) && (j <= D)
Mp(i, j) = G(i+j, 2);
j = j + 1;
end
end
M = zeros(N-1, 1);
for i = 1:N-1
M(i) = G(i+1, 1);
end
K = (Mp'*Mp + lambda*eye(D))^-1 * Mp';
% 设计PID控制器
Kp = 1.2;
Ti = 2.5;
Td = 0.5;
numc = [Kp*Td Kp Ti];
denc = [1 0];
sysc = tf(numc, denc);
sysc = c2d(sysc, T, 'tustin');
% 串级控制器
sysp = series(sysc, sys1);
sysp = c2d(sysp, T, 'tustin');
% 仿真系统响应
sys = feedback(series(sysp, sys2), [1, -1], +1);
t = 0:0.1:100;
r = ones(size(t));
[y, t] = lsim(sys, r, t);
% 显示结果
plot(t, r, 'b--', t, y, 'r-');
xlabel('Time (s)');
ylabel('Water level');
legend('Setpoint', 'Output');
```
请注意,这只是一个基本的代码示例,您可能需要根据您的具体需求进行修改和调整。
阅读全文