计算机控制技术--甄红卫作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机控制技术课作业
姓名:甄红卫(S0908*******)
专业:机电2班
指导教师:张立杰教授
日期:2010年1月11日
1.已知单位负反馈系统,被控对象的传递函数为G (s )=
)
15.0(10
+s s ,试利用模拟法设
计一个数字控制器D (z ),使闭环系统满足下列性能指标:
a) 静态速度误差系统Kv ≥101-s b) 超调量%25%≤σ c) 调节时间s t s 1≤ 具体过程要求:(1)先用传统模拟法(校正环节)设计出D (s );(2)将D (s )离散化为D (z );(3)分别检验是否满足要求性能指标(其中对超调量和调节时间要有仿真研究,要有仿真曲线);(4)并写出数字控制器的具体实现——差分方程 (5) 如果采用数字PID 控制器,利用位置型控制算法,Matlab 仿真研究,试确定PID 控制器参数。
解:采用根轨迹超前校正的解析法进行计算
○
1求校正器增益Kc : 根据控制论
110
lim ()()101(0.51)
z V c c p t s K sG s G s s
k t s s +==≥++ 可得:1c
k ≥,取c k =1
○
2校验原系统的阶跃响应超调量是否满足要求: 在MATLAB 命令窗口中输入 s1=tf(10,[0.5 1 0]); sys=feedback(s1,1);
step(sys)
图1
可以得到原系统的阶跃响应曲线图,如上图1所示。
由曲线可知,系统的阶跃响应超调量为49%,调节时间为3.82s,没有满足要求,所以需要进行校正。
○3确定期望极点位置:
根据超调量ζ,在MATLAB命令窗口中输入:
sigma=0.25;
zeta=((log(1/sigma))^2/((pi)^2+(log(1/sigma))^2))^(1/2)
运行后有:
zeta =0.4037
取ζ=0.6,计算可得W n=5
在MATLAB命令窗口中输入以下语句求系统的主导极点:
zeta=0.6;wn=5;
p=[1 2*zeta*wn wn*wn];
roots(p)
执行后得到:
ans =
-3.0000 + 4.0000i
-3.0000 - 4.0000i
即系统的主导极点:S1
,2
=-3.0000 ± 4.0000i
○4求校正器的传递函数
根据根轨迹解析法校正理论,编制如下程序:
kc=1;
s_1= -3.0000 + 4.0000i;
nk1=10;
dk1=conv([1 0],[0.5 1]);
ngv=polyval(nk1,s_1);dgv=polyval(dk1,s_1);
g=ngv/dgv;zetag=angle(g);zetag_d=zetag*180/pi;
mg=abs(g);ms=abs(s_1);
zetas=angle(s_1);zetas_d=zetas*180/pi;
tz=(sin(zetas)-kc*mg*sin(zetag-zetas))/(kc*mg*ms*sin(zetag));
tp=-(kc*mg*sin(zetas)+sin(zetag+zetas))/(ms*sin(zetag));
nk=[tz,1];dk=[tp,1];
Gc=tf(nk,dk)
运行程序后,得到校正器传递函数:
Transfer function:
0.2025 s + 1
------------
0.05 s + 1
即校正传递函数:
0.2025 s + 1
0.05 s + 1
c
G=
○5校验校正器
编制如下程序
global y t nc dc
n1=10;d1=conv([1 0],[0.5 1]); s1=tf(n1,d1);
Gc=tf([0.2025 1],[0.05 1]); sys=feedback(s1*Gc,1);
step(sys)
[y,t]=step(sys);
[mp,tf]=max(y);
cs=length(t);
yss=y(cs);
sigma=(mp-yss)/yss
sigma =
0.1845
tp=t(tf)
tp =
0.5890
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);cs=length(t);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);
if t2<tp
if t1>t2
ts=t1
end
elseif t2>tp,
if t2<t1, ts=t2 else ts=t1 end end
ts =0.9386
可获得系统校正后的响应曲线,如图2所示
图2
以及系统校正后的各项性能指标: 超调量:sigma=0.1845 峰值时间:tp=0.5890 调节时间:ts=0.9386
由以上参数可知,校正后系统满足要求。
(2)校正器传递函数的离散化:
采用零阶保持器法离散化D(s)系统中加入加零阶保持器s
e s H Ts
--=1)(0(程序见附
录1),其中采样周期取T=0.1s,可得)]()([)(0s D s H Z z D ==
-9
4.05 z - 3.05
z - 2.061e
由
)()()(z D z E z U =得=)
()
(z E z U 4.05 z - 3.05
z - 2.061e-009
即有
11)(05.3)(05.4)(009-2.061e )(---+=z z E z E z z U z U
转化到时域内,则得其差分方程为
)1(05.3)(05.4)1(009-2.061e )(--+-=k e k e k u k u
校正后离散系统阶跃响应曲线如图3所示
图3
由图3可知调节时间为ts=0.8s<1s ,超调量%27%=σ>%25,显然加零阶保持器离
散系统与校正后的连续系统相比,快速性和瞬态特性变化显著。
2.计算机控制系统如下图所示,对象的传递函数2
()(0.51)
G s s s =
+,保持器模型为
s
e s H Ts
--=1)(0,采样周期T=0.5s ,系统输入为分别单位速度函数和单位阶越函数时,
试设计最少拍调节器D(z),并计算输出响应()y k 、控制信号()u k 和误差()e k ,并用仿真曲线分别表示系统的输出响应()y k 、控制信号()u k 和误差()e k 。
解:广义对象的Z 传递函数为: )
15.0(2
1)(+-=-s s s e s HG Ts
变换得
()()()()()121
12221121111112
()(0.51)21
11221111110.368(10.717)
,0.5(1)(10.368)
Ts T e HG z Z s s s z Z s s s Tz z z z e z z z T s
z z ------------⎡⎤-=⎢⎥+⎣⎦
⎡⎤=--+
⎢⎥+⎣⎦
⎡⎤⎢⎥=--+⎢⎥---⎣⎦
+==-- 易知,HG (z )的零点:0.717(单位圆内),0(单位圆内);极点:1(单位圆上),0.368(单位圆内)。
根据稳定性要求G (z )中z=1的极点应包含在)(z G e 的零点中。
(1) 系统输入为单位速度函数R(z)= 211
)1(---z Tz 时
选择: )2()(11---=z z z G c
()21)1()(1--=-=z z G z G c e
则
1
1
1
1
1112
()1
()()1()
(1)(10.368)(2)0.368(10.717)(1)c c G z D z HG z G z z z z z z z z -------=
----=
+-
111112
12
(10.368)(2)0.368(10.717)(1)5.44 4.72210.2820.718z z z z z z z z ----------=
+--+=
--
单位速度输入时,
误差 ()(
)
()
12
11
2
111)()(----=--==Tz z Tz z
z R z G z E e
输出响应 ....)432()
1()2()()()(4322
11
1
1
+++=--==-------z z z T z Tz z z z R z G z Y c 控制信号 ()()111
11
(10.368)(2)()0.368(10.717)(1)
z z U z D z E z Tz z z -------==+- 1.3960.169
4.20910.717T z z z ⎛⎫=-+ ⎪-+⎝⎭
转化为差分方程为:
,1
()0,0,2,3,4...T k e k k =⎧=⎨
=⎩
0,0,1
(),
2,3k y k kT k =⎧=⎨
=⎩
()()
1
1.394,0() 5.772,1
0.169 4.2090.717,2,3k T k u k T k T k -⎧
=⎪
⎪
==⎨⎪-+⨯-=⎪⎩
最少拍随动系统单位速度输入时,经过两个采样周期,即2≥k ,()()kT r kT y =。
1)系统输出响应()y k
编制如下程序:
dnum1=[5.44 -4.722 1];dden1=[1 -0.282 -0.718];Ts=0.5; sysd1=tf(dnum1,dden1,Ts); num2=[2];den2=[0.5 1 0]; sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh'); sysd=sysd1*sysd2;
sysbd=feedback(sysd,1);
[dnum dden]=tfdata(sysbd,'v'); t=0:.5:6;u=t;
y=dlsim(dnum,dden,u); stem(t,y,'r','filled') axis([0,6,0,6]) grid
输出响应仿真曲线如下:
T
y (k )
图2-1单位速度输入时输出响应曲线
2)控制信号()u k
编制如下程序:
dnum1=[5.44 -4.722 1];dden1=[1 -0.282 -0.718];Ts=0.5; sysd1=tf(dnum1,dden1,Ts); num2=[2];den2=[0.5 1 0]; sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh'); sysbd=feedback(sysd1,sysd2); [dnum dden]=tfdata(sysbd,'v'); t=0:.5:10;u=t;
y=dlsim(dnum,dden,u); stem(t,y,'r','filled') axis([0,8,0,3]) grid
控制信号仿真曲线如下:
图2-2 单位速度输入时控制信号仿真曲线3)误差()
e k
编制如下程序:
dnum1=[5.44 -4.722 1];dden1=[1 -0.282 -0.718];Ts=0.5;
sysd1=tf(dnum1,dden1,Ts);
num2=[2];den2=[0.5 1 0];
sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh');
sysd=sysd1*sysd2;
sysbd=feedback(1,sysd);
[dnum dden]=tfdata(sysbd,'v');
t=0:.5:6;u=t;
y=dlsim(dnum,dden,u);
stem(t,y,'r','filled')
axis([0,6,0,1])
grid
误差仿真曲线如下:
图2-3 单位速度输入时误差仿真曲线
图2-4 单位速度输入时Simulink 模块框图
(2) 系统输入为单位阶跃函数R(z)= 1
11
--z
时 同样由于HG(z)包含一个单位圆上的极点z=1, 选择:
1()c G z z -=,1()1()1e c G z G z z -=-=-
()()()1111
11
1
1
11(10.368)()1
()()1()10.36810.71710.368 2.71710.7170.36810.717c c z z G z z D z HG z G z z
z z z
z
z -----------==--+--=
=++
误差 ()
11
1
()()()111e E z G z R z z z
--==-=- 输出响应 11234
1
()()()....1c z Y z G z R z z z z z z ------===++++- 控制信号 ()()()
1
110.368()0.36810.717z U z D z E z z ---==+
2.7171
0.7170.717
z z z =
-++
转化为差分方程:
⎩⎨
⎧===...3,2,1........00.......
1)(k k k e ()0,
01,1,2,3...
k y k k =⎧=⎨
=⎩
()1
2.717,0() 2.9480.717,1,2,3k k u k k -=⎧⎪
=⎨-⨯-=⎪⎩
1)系统输出响应()y k
编制如下程序:
dnum1=[2.72 -1];dden1=[1 0.718];Ts=0.5;
sysd1=tf(dnum1,dden1,Ts); num2=[2];den2=[0.5 1 0]; sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh'); sysd=sysd1*sysd2;
sysbd=feedback(sysd,1);
[dnum dden]=tfdata(sysbd,'v'); t=0:0.5:5
y=dstep(dnum,dden,t) stem(t,y,'r','filled') grid
输出响应仿真曲线如下:
图2-5 单位阶跃输入时输出响应曲线
2)控制信号()u k
编制如下程序:
dnum1=[2.72 -1];dden1=[1 0.718];Ts=0.5; sysd1=tf(dnum1,dden1,Ts); num2=[2];den2=[0.5 1 0]; sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh'); sysbd=feedback(sysd1,sysd2); [dnum dden]=tfdata(sysbd,'v'); t=0:0.5:10
y=dstep(dnum,dden,t) stem(t,y,'r','filled')
grid
控制信号仿真曲线如下:
图2-6 单位阶跃输入时控制信号仿真曲线3)误差()
e k
编制如下程序:
dnum1=[2.717 -1];dden1=[1 0.717];Ts=0.5;
sysd1=tf(dnum1,dden1,Ts);
num2=[2];den2=[0.5 1 0];
sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh');
sysd=sysd1*sysd2;
sysbd=feedback(1,sysd);
[dnum dden]=tfdata(sysbd,'v');
t=0:0.5:5
y=dstep(dnum,dden,t)
stem(t,y,'r','filled')
grid
输出响应仿真曲线如下:
图2-7 单位阶跃输入时误差仿真曲线
图2-8 单位阶跃输入时Simulink 模块框图
3.在上图所示的计算机控制系统中,被控对象的传递函数2
2.1
()( 1.252)
G s s s =
+,经采样(T=1s )和零阶保持器,试求其对于单位阶越输入的最少拍调节器D(z),并计算输出响应()y k 、控制信号()u k 和误差()e k ,并用仿真曲线分别表示系统的输出响应()y k 、控制信号()u k 和误差()e k 。
解:广义对象的Z 传递函数为: 2
1 2.1
()( 1.252)
Ts e HG s s s s --=+ 变换得
()()()()()()()2
13221
1322 1.252111111112
1 2.1
()( 1.252)1.677 1.34 1.07 1.071 1.2521.677 1.34 1.07 1.07111110.265(1 2.78)10.2(1)(10.2Ts T e HG z Z s s s Z z s s s s Tz Tz z e z z z z z z z z --------------⎡⎤-=⎢⎥+⎣⎦⎡⎤⎛⎫=--+- ⎪
⎢⎥+⎝⎭⎣⎦
⎡⎤⎢⎥=--+-⎢⎥----⎣⎦++=
--1
,186)
T s
z -= 易知,()HG z 存在1z -因子,
并有单位圆外零点: 2.78z =-。
因此闭环z 传递函数()c G z 应包含()1
1
1 2.78z
z --+,即把()HG z 的单位圆外零点和1
z
-因子作为()c G z 的零点和因子,可选
择:
()()
11
1 2.78c G z az z --=+ (1) 根据单位阶跃输入,误差z 传递函数()e G z 应选为()
1
1z --,又因为()()1c e G z G z =-,
()e G z 和()c G z 应该是阶次相同的多项式。
因此()e G z 中应包含()101b b z -+,即
()()()1
10
11e G z z
b
b z -=-+ (2)
解式(1)和(2),可得:010.265,1,0.735a b b ===
则 ()()
110.2651 2.78c G z z z --=+
()()()11110.735e G z z z --=-+
有限拍调节器
()()()()1
1
1
1
1212
()1
()()1()
110.28610.73510.21 1.2860.28610.9350.147c c G z D z HG z G z z z z z z z z z --------=
---=++-+=
++ 系统输入为单位阶跃函数R(z)=
1
11
--z 时, 输出响应 ()()()c Y z G z R z =
()
111123410.26510.27810.265....z z z z z z z ------=+-=++++
即 ()()(
)()00,0.265,23
1
y y T y T y T ===== 由于闭环z 传递函数包含了单位圆外零点,所以系统的调节时间延长到两拍,即22s T T s ==。
误差()()1111
1
()()()110.73510.7351e E z G z R z z z z z
----==-+=+- 即 ()()()()01,0.735,230e e T e T e T ===== 控制信号 ()()()U z D z E z =
()()()()()()()()()()
()()1
1
1
1
1
1
1
1
1
1
2
1234110.2861110.73510.73510.21110.28610.21 1.4830.54720.5470.20.5470.2z z z z z z z z z z z z z z ----------------=-+++---=
+=-+-⨯-+⨯-+
即
()()21,01.486,10.5470.2,2,3,k k u kT k k -⎧=⎪⎪
=-=⎨⎪⨯=⎪⎩
(1)系统输出响应()y k
编制如下程序:
dnum1=[1 -1.286 0.286];dden1=[1 0.935 0.147];Ts=1; sysd1=tf(dnum1,dden1,Ts);
num2=[2.1];den2=[1 1.252 0 0]; sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh'); sysd=sysd1*sysd2;
sysbd=feedback(sysd,1);
[dnum dden]=tfdata(sysbd,'v'); t=0:5
y=dstep(dnum,dden,t) stem(t,y,'r','filled') grid
输出响应仿真曲线如下:
图3-1 单位阶跃输入时输出响应仿真曲线
(2)控制信号()
u k
编制如下程序:
dnum1=[1 -1.286 0.286];dden1=[1 0.935 0.147];Ts=1;
sysd1=tf(dnum1,dden1,Ts);
num2=[2.1];den2=[1 1.252 0 0];
sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh');
sysbd=feedback(sysd1,sysd2);
[dnum dden]=tfdata(sysbd,'v');
t=0:5
y=dstep(dnum,dden,t)
stem(t,y,'r','filled')
grid
控制信号仿真曲线如下:
图3-2 单位阶跃输入时控制信号仿真曲线(3)误差()
e k
编制如下程序:
dnum1=[1 -1.286 0.286];dden1=[1 0.935 0.147];Ts=1;
sysd1=tf(dnum1,dden1,Ts);
num2=[2.1];den2=[1 1.252 0 0];
sys2=tf(num2,den2);
sysd2=c2d(sys2,Ts,'zoh');
sysd3=sysd1*sysd2;
sysbd=feedback(1,sysd3);
[dnum dden]=tfdata(sysbd,'v');
t=0:5
y=dstep(dnum,dden,t)
stem(t,y,'r','filled')
grid
输出响应仿真曲线如下:
图3-3 单位阶跃输入时误差仿真曲线
图3-4 单位阶跃输入时Simulink模块框图。