计算机控制 下载本文

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 #include int k=0;

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 int k=0;

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 #include int k=0;

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)按下面给定的表格形式表述完成插补的计算过程;