1.41.210.8U0.60.40.2000.511.522.5t (s)33.544.55
(3) 根据最少拍无纹波系统实现的前提条件(即被控对象在连续域中的传递函数G0(s)中,至少必须包含m-1个积分环节)可知,不能按等速度和等加速度设计最小拍无纹波系统。
e?s6.6 已知被控对象的传递函数为G?s??,采样周期T=1s,试用大
2s?1s?1????林算法设计D(z),判断是否会出现振铃现象?
解:设等效闭环系统的时间常数T0=1s。 ① 广义对象HG(z):
1e?sHG(z)?(1?z)?[]
s(2s?1)(s?1)?1
?z?1(1?z?1)?[1]
s(s?1)(2s?1)114?] ?z?1(1?z?1)?[?ss?12s?1T?1szz2z?z?1(1?z?1)[??]z?1z?e?1z?e?1/2 zz2z?z?1(1?z?1)[??]z?1z?0.368z?0.607
z?1112?[??]zz?1z?0.368z?0.607 z?1112?[??]zz?1z?0.368z?0.607
?z?11.761z?0.094z(z?1)(z?0.368)(z?0.607) 1.761z?0.094z(z?0.368)(z?0.607) 1.761(z?0.053)z(z?0.368)(z?0.607)
?
?
② 取T0 = 1s,滞后1个采样周期。则
e?s?(s)?s?1
1e?s?(z)?(1?z)?[]
ss?1?1
?z?1(1?z?1)?[1] s(s?1)11?z?1(1?z?1)?[?]
ss?1zz?z?1(1?z?1)[?]z?1z?e?1 11?(1?z?1)[?]z?1z?0.368
?z?10.632z(z?1)(z?0.368) 0.632z(z?0.368) ?(z)
HG(z)[1??(z)]0.632z(z?0.368)(z?0.607)z(z?0.368)z(z?0.368)1.761z?0.094z2?0.368z?0.632 0.632(z?0.607)z(z?0.368)1.761z?0.094z2?0.368z?0.632
?
③ 求D(z)。
D(z)????0.359(z?0.607)z(z?0.368)z?0.053(z?1)(z?0.632)
U(z)?C(z)R(z)?(z)?, HG(z)HG(z)已知在单位阶跃输入下,U(z) =D(z)R(z)。由D(z)的表达式可知,U(z)有位于左
半单位圆内的极点z1 = -0.053 。所以会产生振铃现象。 消除方法:令z1 =1,代入D(z),可以得到:
D(z)??0.359(z?0.607)z(z?0.368)
1.053(z?1)(z?0.632)
z2?1.2z?0.56.7 已知数字控制器的脉冲传递函数为D(z)?2,试用直接程序方
2z?1.4z?2法、串联程序法和并联程序法实现D(z)。 解:
直接程序设计法:
u(k)??0.7u(k?1)?u(k?2)?0.5e(k)?0.6e(k?1)?0.25e(k?2) #include
float e=0,e_1=0,e_2=0; float uk=0;
float uk_1=0, uk_2=0; float u(int k) {
if(k<0) return(0); else {
e=get_e();
uk =-0.7*uk_1+uk_2+0.5*e+0.6*e_1+0.25*e_2;; uk_2=uk_1; uk_1= uk; e_2=e_1;e_1=e; return(uk); } }
串联程序设计法
0.5?0.6z?1?0.25z?21D(z)?
1?0.71z?11?1.41z?1u1?k??0.7u1?k?1??0.5e?k??0.6e?k?1??0.25e?k?2?u?k???1.41u?k?1??u1?k?# include
# include
float e=0,e_1=0, e_2=0; float u1=0, u1_1=0; float u=0, u_1=0; float uk(int k) {
if (k<0) return(0); else
{
e=get_e();
u1=0.71*u1_1+0.5*e+0.6*e_1+0.25*e_2; u=-1.41*u_1+u1;
e_2=e_1;e_1=e; u1_1=u1; u_1=u; return (u); }
并联程序设计法
0.5?0.6z?10.25z?2D(z)??
1?0.7z?1?z?21?0.7z?1?z?2u1(k)??0.7u1(k?1)?u1(k?2)?0.5e(k)?0.6e(k?1) u2?k???0.7u2?k?1??u2?k?2??0.25e?k?2? #include
float e=0,e_1=0,e_2=0; float uk=0;
float u1=0, u1_1=0, u1_2=0; float u2=0, u2_1=0, u2_2=0; float u(int k) {
if(k<0) return(0); else {
e=get_e();
u1=-0.7*u1_1+u1_2+0.5e+0.6e_1; u2=-0.7*u2_1+u2_2+0.25*e_2; uk=u1+u2;
u1_2=u1_1; u1_1=u1; u2_2=u2_1; u2_1=u2; e_2=e_1; e_1=e; return(uk);
} }
第七章 习题
7.1 直线OE的起点在原点O(0,0), 终点为E(7,3),用逐点比较法对该直线段进行插补。试完成下列问题。 (1)求出需要的插补循环数总数;
(2)按下面给定的表格形式表述完成插补的计算过程;