% 设计反馈控制器 Kp = 1; Ki = 0.5; Kd = 0.2; C = pid(Kp,Ki,Kd); % 定义系统模型 s = tf('s'); G = 1/(s*(s+1)*(s+2)); % 设计闭环系统 T = feedback(C*G,1); % 绘制脉冲响应函数 figure impulse(T) % 计算稳态误差 ess = 1/(1+dcgain(T)); % 计算超调量和调节时间 [y,t] = impulse(T); Mp = max(y)/abs(y(end)); tr = t(find(y>=0.9*y(end),1))-t(1); % 绘制跟踪误差和性能函数 figure plot(ess,Mp,'o') xlabel('稳态误差') ylabel('超调量') hold on plot(ess,tr,'*') xlabel('稳态误差') ylabel('调节时间') legend('超调量','调节时间')在这个程序的基础上,画出两条包络线,把跟踪误差控制在包络线范围内,给出具体matlab程序
时间: 2024-03-09 22:49:41 浏览: 15
以下是修改后的程序,包括了画出两条包络线和控制跟踪误差的具体过程:
```
% 定义反馈控制器
Kp = 1;
Ki = 0.5;
Kd = 0.2;
C = pid(Kp,Ki,Kd);
% 定义系统模型
s = tf('s');
G = 1/(s*(s+1)*(s+2));
% 设计闭环系统
T = feedback(C*G,1);
% 绘制脉冲响应函数
figure
impulse(T)
% 计算稳态误差
ess = 1/(1+dcgain(T));
% 计算超调量和调节时间
[y,t] = impulse(T);
Mp = max(y)/abs(y(end));
tr = t(find(y>=0.9*y(end),1))-t(1);
% 绘制跟踪误差和性能函数
figure
plot(ess,Mp,'o')
xlabel('稳态误差')
ylabel('超调量')
hold on
plot(ess,tr,'*')
xlabel('稳态误差')
ylabel('调节时间')
legend('超调量','调节时间')
% 计算包络线
t1 = 0:0.1:tr;
e1 = 0.1*ones(size(t1));
Mp1 = exp(-pi*sqrt(-log(0.1)^2/(pi^2+log(0.1)^2)));
e2 = Mp1*ones(size(t1));
plot(e1,t1,'r--')
plot(e2,t1,'r--')
% 控制跟踪误差
tol = 0.05; % 容差
t2 = linspace(0,tr);
e3 = Mp1*exp(-pi*t2/tr)*tol;
plot(e3,t2,'g--')
% 标注图像
text(ess+0.05,Mp+0.05,'当前点')
title('控制跟踪误差')
```
其中,计算包络线的部分使用了超调量和调节时间公式中的公式:
$$M_p = e^{-\frac{\pi \xi}{\sqrt{1-\xi^2}}}$$
其中,$\xi$ 是阻尼比,可以通过以下公式计算:
$$\xi = \frac{-\ln(0.1)}{\sqrt{\pi^2+\ln^2(0.1)}}$$
控制跟踪误差的部分使用了公式:
$$e(t) = M_p e^{-\frac{\pi t}{T_r}} \cdot \text{tol}$$
其中,$M_p$ 和 $T_r$ 分别是超调量和调节时间,$\text{tol}$ 是容差,这里取为 $0.05$。