(10)校正前阶跃响应的动态性能指标: 程序代码如下: >> num=10; den=[0.2 1 0 0]; G1=tf(num,den);
G2=feedback(G1,1,-1); [y,t]=step(G2); C=dcgain(G2); [max_y,k]=max(y); tp=t(k)
%求峰值时间 输出峰值时间代码: tp = 3.5499
求超调量的程序代码:
>> max_overshoot=100*(max_y-C)/C 输出超调量:
max_overshoot = 811.9662 求上升时间的程序代码: > > r1=1;
while(y(r1)<0.1*C) r1=r1+1; end r2=1;
while(y(r2)<0.9*C) r2=r2+1;
16
end
tr=t(r2)-t(r1)
输出上升时间: tr = 0.3622
求调节时间的程序代码: >> s=length(t);
while y(s)>0.98*C&&y(s)<1.02*C s=s-1; end ts=t(s)
输出调节时间: ts = 3.9846
(11)系统校正前的稳态误差:
程序代码如下: >> s=tf('s')
>>G=10/s/s/(0.2*s+1); Gc=feedback(G,1)
输出校正前的闭环传递函数: Transfer function: 10 ------------------ 0.2 s^3 + s^2 + 10
求稳态误差的程序代码: >> ess=1-dcgain(Gc) 输出稳态误差: ess = 0
(12)校正后阶跃响应的动态性能指标: 程序代码如下:
>> num=conv(10,conv([1.56 1],[0.1802 1]));
den=conv([1 0],conv([1 0],conv([0.00966 1],conv([0.03284 1],[0.2 1])))); >> G1=tf(num,den); G2=feedback(G1,1,-1); [y,t]=step(G2); C=dcgain(G2); [max_y,k]=max(y);
tp=t(k) %求峰值时间的程序代码 输出峰值时间的程序代码:
17
tp = 0.2182
求超调量的程序代码:
>> max_overshoot=100*(max_y-C)/C 输出超调量:
max_overshoot = 15.5918 求上升时间的程序代码: >> r1=1;
while(y(r1)<0.1*C) r1=r1+1; end r2=1;
while(y(r2)<0.9*C) r2=r2+1; end
tr=t(r2)-t(r1) 输出上升时间: tr = 0.0818
求调节时间的程序代码: >> s=length(t);
while y(s)>0.98*C&&y(s)<1.02*C s=s-1; end ts=t(s)
输出调节时间: ts = 1.2000
(12)校正后的系统稳态误差: 程序代码如下: >> s=tf('s')
>>G=(10*(0.1802*s+1)*(1.56*s+1))/s/(0.2*s+1)/(0.009666*s+1)/(0.03284*s+1); Gc=feedback(G,1)
输出校正后的闭环传递函数: Transfer function:
2.811 s^2 + 17.4 s + 10 -------------------------------------------------------
6.349e-005 s^4 + 0.008819 s^3 + 3.054 s^2 + 18.4 s + 10 求稳态误差的程序代码如下: >> ess=1-dcgain(Gc) 输出稳态误差: ess = 0
比较求出的系统校正前与校正后的阶跃响应的动态性能指标σ%、tr、tp、ts以及稳态误差的值,分析其变化:
18
从上述程序计算得的校正前后的动态系能指标可看出校前的峰值时间tp、超调量%σ、上升时间tr、调节时间ts等均过大,尤其是超调量%σ高达811.966严重超标,可看出系统校正前系统是相当不稳定的。而经过两级超前网络校正后的系统动态性能指标中可看出,校正后的峰值时间tp、超调量%σ、上升时间tr、调节时间ts等均变小了。上升时间tr、峰值时间tp变小了说明系统响应的初始阶段变快了。调节时间ts变小了,说明系统过度过程持续的时间变小了,系统的快速性变好了。超调量%σ变小了,反应出系统响应过程的平稳性变好了。
(13)求校正前的根轨迹 程序代码如下:
>> num=10;den=[0.2 1 0 0]; G0=tf(num,den); rlocus(G0)
校正前的根轨迹图:
(14)求校正前分离点及在该点的增益:
程序代码如下: >> num=10; den=[0.2 1 0 0]; rlocus(num,den);
>> [k,p]=rlocfind(num,den)
19
Select a point in the graphics window %此为上述程序输入matlab软件后自动生成的提醒
手动选择分离点后程序输出的结果 selected_point = 0.0118 - 0.0311i k = 1.1075e-004
p = -5.0002 0.0001 + 0.0333i 0.0001 - 0.0333i
由上述程序可知,当我将十字光标点在图示中的分离点时,程序会自动生成该点的坐标,以及该点出的相应的增益K*。在校正前的根轨迹中选中分离点,程序中输出该点坐标(近似于分离点的坐标)为(0.0118,-0.0311i),该点的增益为K*=1.1075e-004。
(15)校正后的根轨迹: 程序代码如下:
>> num=conv(10,conv([1.56 1],[0.1802 1]));
den=conv([1 0],conv([1 0],conv([0.00966 1],conv([0.03284 1],[0.2 1])))); rlocus(num,den);
>> [k,p]=rlocfind(num,den)
Select a point in the graphics window %此为上述程序输入matlab软件后自动生成的提醒
手动选择第一个分离点后程序输出的结果: selected_point = -12.0867 + 0.0621i k = 0.5244 p = -106.3641 -12.3701 -12.1002 -7.4381 -0.6979
用于选择第二个分离点的程序代码: >> [k,p]=rlocfind(num,den)
Select a point in the graphics window
手动选择第二个分离点后程序输出的结果: selected_point = -8.4469 + 0.0621i k = 0.5134 p = -106.3081
20