660 likes | 909 Views
获得控制系统的瞬态响应和稳态响应 对系统的瞬态和稳态性能分析 根轨迹绘制和分析. 第五章 时域分析、零极点分析和根轨迹法. 产生信号 gensig(). [u,t]=gensig(type,Ta) [u,t]=gensig(type,Ta,Tf,T) Type :信号序列. sin 正弦; square 方波; pulse 脉冲 Ta :信号周期 Tf :信号的持续时间 T :采样时间. 例子:. 产生一个周期为5秒,持续时间为30秒,采样为0 .1 秒的方波 . [u,t]=gensig('square',5,30,0.1); plot(t,u)
E N D
获得控制系统的瞬态响应和稳态响应 对系统的瞬态和稳态性能分析 根轨迹绘制和分析 第五章 时域分析、零极点分析和根轨迹法
产生信号gensig() • [u,t]=gensig(type,Ta) • [u,t]=gensig(type,Ta,Tf,T) • Type:信号序列.sin正弦;square方波;pulse脉冲 • Ta:信号周期 • Tf:信号的持续时间 • T:采样时间
例子: • 产生一个周期为5秒,持续时间为30秒,采样为0.1秒的方波. • [u,t]=gensig('square',5,30,0.1); • plot(t,u) • Axis([0,30,-0.5,1.5])
产生正弦波: • [u,t]=gensig('sin',5,30,0.1); • plot(t,u) • Axis([0,30,-1.5,1.5])
5.1 系统的时域分析 时域分析法是研究系统对典型输入的时间响应曲线,常用的输入信号有: • 阶跃信号step • 脉冲信号impulse • 任一信号lsim
1. step(): 计算系统对单位阶跃输入的响应 • y=step(num,den) • step(num,den) • [y,t,x]=step(num,den,t) [y,t,x] = step(num,den,t) y(t)=时间输出响应 x(t)=时间状态响应 the state trajectory x t=仿真时间 G(s)=num/den t=计算阶跃 响应时间
step的其他调用形式 • 无左边参数调用,绘制仿真计算图形。 • step(sys);step(sys,t);step(sys1,sys2,…,t) • 有左边参数调用,返回仿真计算结果。 • y=step(sys,t) • [y,t]=step(sys) • [y,t,x]=step(sys) • 使用help step命令,了解函数的调用方法。
step(sys) t = 0:dt:Tfinal step(sys,t) step(sys1,sys2,...,sysN) step(sys1,sys2,...,sysN,t) step(sys1,'PlotStyle1',...,sysN,'PlotStyleN') [y,t,x] = step(sys) a = [-0.5572 -0.7814;0.7814 0]; b = [1 -1;0 2]; c = [1.9691 6.4493]; sys = ss(a,b,c,0); step(sys)
例子: • a1=[-0.5572 -0.7814;0.7814 0]; • b1=[1 -1;0 2]; • c1=[1.9691 6.4493]; • sys1=ss(a1,b1,c1,0); • a2=[-0.8572 -0.7814;0.7814 0]; • b2=[3 -1;0 2]; • c2=[6.9691 6.4493]; • sys2=ss(a2,b2,c2,0); • step(sys1,sys2)
G=1/(s2+2s+1) 例5-1 num=1;y=zeros(200,1);i=0; for bc=0.1:0.1:1 den=[1,2*bc,1];sys=tf(num,den);t=[0:0.1:19.9]; i=i+1;y(:,i)=step(sys,t); end plot(y) legend('zeta=0.1','zeta=0.2','zeta=0.3','zeta=0.4','zeta=0.5','zeta=0.6','zeta=0.7','zeta=0.8','zeta=0.9','zeta=1.0',-1) 注意:Lengend:pos = -1表示 places the legend outside the axes boundary on the right side.
例5-1 mesh(y)
2. impulse() 计算系统对单位脉冲输入的响应 调用方法与step()函数类似,用help impulse命令例了解其调用规则 • y=impulse(num,den) • impulse(num,den) • [y,t,x]=impulse(num,den,t) t=计算脉冲 响应时间 [y,t,x]=impulse(num,den,t) y(t)=时间输出响应 x(t)=时间状态响应 t=仿真时间 G(s)=num/den
例5-2 分析系统的脉冲响应 num=1;y=zeros(200,1);i=0; for bc=0.1:0.1:1 den=[1,2*bc,1];t=[0:0.1:19.9]';sys=tf(num,den); i=i+1;y(:,i)=impulse(sys,t); end plot(y) legend('zeta=0.1','zeta=0.2','zeta=0.3','zeta=0.4','zeta=0.5','zeta=0.6','zeta=0.7','zeta=0.8','zeta=0.9','zeta=1.0',-1)
3. 其他输入下的时域响应 sys=系统模型 • initial() 零输入响应 [y,t,x]=initial(sys,x(0)) • help initial命令了解命令的使用方法。 x0=初始状态 initial(sys,x0) initial(sys,x0,t) initial(sys1,sys2,...,sysN,x0) initial(sys1,sys2,...,sysN,x0,t) initial(sys1,'PlotStyle1',...,sysN,'PlotStyleN',x0) [y,t,x] = initial(sys,x0)
a = [-0.5572 -0.7814;0.7814 0]; c = [1.9691 6.4493]; x0 = [1 ; 0]; sys = ss(a,[],c,[]); initial(sys,x0)
lsim()计算系统对任意输入的响应 • [y,t,x]=lsim(sys,u,t,x0) • y=lsim(sys,u,t) • lsim(sys,u,t) x0=初始 状态 [y,t,x]=lsim(sys,u,t,x0) sys=系统模型 y(t)=时间输出响应 x(t)=时间状态响应 t=计算信号 响应时间 u=输入
Lsim(num,den,u,t) • u为给定输入序列构成的矩阵,它的每列对应一个输入,每行对应一个时间点,其行数与时间t的长度相等。
例子:对离散系统G(z)=0.632/(z^2-1.368z+0.568),输入信号为幅值正负1的方波信号,求输出信号。例子:对离散系统G(z)=0.632/(z^2-1.368z+0.568),输入信号为幅值正负1的方波信号,求输出信号。 num=0.632; den=[1 -1.368 0.568]; u1=[ones(1,50),-1*ones(1,50)]; u=[u1 u1 u1]; figure(1) dlsim(num,den,u)
例5-3 系统对斜坡输入的响应 G=1/(s2+2s+1) close t=[0:0.1:10]; num=[1]; zeta=0.4; den=[1 2*zeta 1]; u=t; %单位斜坡输入 y=lsim(num,den,u,t); plot(t,y,'b-',t,u,'r:'); legend('zeta=0.4','u=t',0)
5.2 系统动态及稳态性能的时域分析 1. 稳定性分析MATLAB实现的方法 MATLAB提供了直接求取系统所有零极点的函数,因此可以直接根据零极点的分布情况对系统的稳定性及是否为最小相位系统进行判断。 roots()、 pzmap()
已知开环传函 对系统闭环稳定性判别 k=100;z=[-2];p=[0,-1,-20]; [n1,d1]=zp2tf(z,p,k) n1 = 0 0 100 200 d1 = 1 21 20 0 >> P=n1+d1 P = 1 21 120 200 >> roots(P) ans = -12.8990 -5.0000 -3.1010
G=tf(n1,d1) sys=feedback(G,1) Transfer function: 100 s + 200 -------------------------- s^3 + 21 s^2 + 120 s + 200 >> sys1=zpk(sys) Zero/pole/gain: 100 (s+2) ------------------------ (s+12.9) (s+5) (s+3.101) >> sys1.p{1} ans = -12.8990 -5.0000 -3.1010 >> roots(sys.den{1}) ans = -12.8990 -5.0000 -3.1010 >> G=ss(sys) >> eig(G.a)
2. 稳态值 K=dcgain(num,den)%k为稳态增益,即:当s趋近于零时num(s)/den(s)=k 对于状态空间 K=dcgain(a,b,c,d)
单位阶跃响应 单位斜坡响应 3. 稳态误差目标值与稳态响应之差,称为稳态误差。
4. 峰值时间Tp和超调量 Tp:0到阶跃响应曲线h(t)超过稳态值而达第一个峰值之间的时间 [mp,tf]=max(y); cs=length(t); yss=y(cs); sigma=100*(mp-yss)/yss tp=t(tf) sys=tf(1.25,[1 1 0]) Gc=feedback(sys,1) [y,t]=step(Gc)
sigma = 20.9121 tp = 3.0920 >> yss yss = 0.9987
二阶系统的超调量的计算 sigma=exp(-pi*zeta/(1-(zeta)^2)^(1/2))*100 zeta=((log(1/sigma))^2/((pi)^2+(log(1/sigma))^2))^(1/2)
5. 调节时间Ts Ts:进入稳态值附近±5%或±2%的误差带而不再超出的最小时间 if t2<tp if t1>t2 ts=t1 end elseif t2>tp if t2<t1 ts=t2 else ts=t1 end end cs=length(t) i=cs+1; n=0; while n==0,i=i-1; if i==1,n=1; elseif y(i)>1.05*yss n=1; end end t1=t(i); j=cs+1; n=0; while n==0,j=j-1; if j==1,n=1; elseif y(j)<0.95*yss n=1; end end t2=t(j);
t1=t(i);j=cs+1;n=0;while n==0,j=j-1; if j==1,n=1; elseif y(j)<0.95*yssn=1; endendt2=t(j);if t2<tp if t1>t2 ts=t1 endelseif t2>tp if t2<t1 ts=t2 else ts=t1 endend • 定义函数,求超调量sigma,峰值时间tp和调节时间ts • function[sigma,tp,ts]=ste(y,t)%函数定义 • [mp,tf]=max(y); • cs=length(t); • yss=y(cs); • sigma=100*(mp-yss)/yss • tp=t(tf) • cs=length(t) • i=cs+1; • n=0; • while n==0,i=i-1; • if i==1,n=1; • elseif y(i)>1.05*yss • n=1; • end • end
sigma = 20.9121 tp = 3.0920 ts = 4.6380 • G为系统开环传递函数,求超调量sigma,峰值时间tp和调节时间ts • global y t • sys1=tf(1.25,[1 1 0]) • sys=feedback(sys1,1) • [y,t]=step(sys); • [sigma,tp,ts]=ste(y,t)
5.3 系统时域响应的解析解算法 • 部分分式展开方法 • 传递函数G(s)含有n个互异极点,可展开为部分分式: • 将其Laplace逆变换,得输出:
因此,可以通过G(s)*R(s)的部分分式展开而求出系统的解析解。因此,可以通过G(s)*R(s)的部分分式展开而求出系统的解析解。 • 求留数函数[r,p,k]=residue(num,den)可以得出各系数。 • 请注意,此解法得出的是解析解,而不是数值解。
系统有重极点的计算 • 传递函数G(s)的第j个极点Pj是m重的,则展开中含有下面各项: • 对应的Laplace逆变换为:
5.4 根轨迹分析法 根轨迹:开环系统的某一参数从零变到无穷大时,闭环系统特征方程的根在s平面的轨迹。应用MATLAB可以绘制精确的根轨迹图,我们可以采用根轨迹法对控制系统进行设计和校正。 • 绘制根轨迹图 • 根轨迹分析 • 校正装置
1. 绘制根轨迹图 • rlocus() • 调用之前必须将特征方程写成下面的形式:
rlocus() • rlocus(num,den), rlocus(sys) • rlocus(num,den,K), rlocus(sys,K) • [r,K]=rlocus(num,den), [r,K]=rlocus(sys) • r=rlocus(num,den), r=rlocus(sys) • r=rlocus(num,den,K), r=rlocus(sys,K) r=复根向量 K=增益向量 1+K*(num/den)=0 [r,K]=rlocus(num,den)
R(s) K(s+1) s(s+2) C(s) - 1 (s+3) 例5-5 >> num=[1 1];den=[1 5 6 0];rlocus(num,den) >> [r,k]=rlocus(num,den) >> r=rlocus(num,den,10) r = -2.1056 + 2.8714i -2.1056 - 2.8714i -0.7887
2. rlocfind() • 了解特定的复根对应的增益K的取值 • 只有运行了rlocus函数并得到根轨迹后,才能合法调用 • 运行rlocfind函数后,MATLAB会在根轨迹图上产生‘+’提示符,通过鼠标将提示符移动到根轨迹相应的位置确定,所选的K值就会在命令窗口显示
例5-6特定的根对应的增益K >> rlocus(num,den) >> [k,poles]=rlocfind(num,den) Select a point in the graphics window selected_point = -0.3212 + 0.0000i k = 2.1281 poles = -2.3394 + 1.0735i -2.3394 - 1.0735i -0.3212
num=[1 1];den=[1 5 6 0]; rlocus(num,den) n=0; while n<3 figure(1) [k,poles]=rlocfind(num,den) n1=k*num;syso=tf(n1,den) sys=feedback(syso,1) figure(2) step(sys) n=n+1 end 计算不同K值时的单位阶跃响应 系统零点对瞬态响应的作用,减弱了实数极点的影响,主导极点为复极点。
例5-7 num=[0 0 1 0.4];den=[1 3.6 0 0];r=rlocus(num,den);plot(r,'o') rlocus(num,den); k1=[0:0.2:4.2]; k2=[4.2:0.002:4.4]; k3=[4.4:0.02:10]; k4=[10:5:200]; k=[k1 k2 k3 k4]; r=rlocus(num,den,k); plot(r,'o') v=[-5 1 -5 5];axis(v)
3. sgrid() 或grid() >> sgrid >>grid • 在根轨迹[GH]平面绘制阻尼比和等固有频率网格, • 阻尼比从0.1到1;固有频率从0到10rad/s。 • sgrid(‘new’):是先清屏,再画格线。 • sgrid(z,wn):则绘制由用户指定的阻尼比矢量z、自然振荡频率wn的格线。
例5-9 num=1; den=conv([0.01 1 0],[0.02 1]); rlocus(num,den) sgrid 同样可以 rlocus(num,den),grid
4. 基于根轨迹的系统设计工具 • rltool • rltool(g) g为系统,例如 g=tf(num.den) 图形用户界面系统设计工具(SISO Design for System FeedbackConfig)
利用根轨迹设计工具可查看某个K值的阶跃响应曲线,BODE图,NYQUIST图,脉冲响应曲线等利用根轨迹设计工具可查看某个K值的阶跃响应曲线,BODE图,NYQUIST图,脉冲响应曲线等 • 根轨迹表明参数(增益)变化的影响。实际中,只调整增益不能获得所希望的性能。因此必须通过引入适当的校正环节,来改造原来的根轨迹。 • 增加零极点,对根轨迹的影响,由此构成校正环节。 • 应用的实质是通过采用校正环节改变根轨迹,从而将一对主导闭环极点配置在需要的位置。