程序设计

现在我们来编制简单对象的控制软件。编制步骤区分为下列两步。

(i)用PASCAL编写程序。

(ii)把在(i)中得到的程序进行编译,展开成汇编语言,控制对象如图4.24所示。水平面上的质点(质量为m),在力“的作用下作滑动运动,质点的位置用电位器(当然也可以用编码器)测量,通过ADC输入到PCOM中。输出量通过DAC和功率放大器再输送到马达中.若对PCOM中的ADC用ior进行读数,则质点的位置可以用32位的整数形式得到,当在DAC中用32位的整数写人时,即可构成产生力的装置。

捕获.JPG

控制算法若设质点的位置为x,则运动方程式为

m元=(41)

如果改写成状态变量形式,x₁△x,x₂全t,则得到

捕获.JPG

则变成下列形式:

=Ax十Bw

若轨迹规划为

x*(t)=[xi(t)x*(x)]

则为了得到x*所需要的力*必须满足

*一Ax*+B*(4.4)

捕获.JPG

为了保证1→C时△x→0,A+BF的特征值必须具有项实部。满足这个条的F通常有无穷多个,从这些F中到底选取哪一个是一个重要问题。解决这个问题的方法之一是选择F使得评价函数具有最小值。至于如何选择评价函数,这里将不对这个问题进行讨论。在工程上,通常都是通过实际操作,根据运行误差进行抉择。总之,不管怎样,总是要从1→0时,△x→0的解中寻求正确答案,这一点是不会改变的。

(4.9)式中A十BF的特征值,可以通过下列特征方程式进行求解:

det(A十BF一λ)=0(4.10)

若对该式进行计算,则得到

捕获.JPG

(411)式的解全都具有负实部的条件是f<0,f₂<0.

根据以上讨论,可以导出下列控制规律:

捕获.JPG

控制用程序这个例子可以作为控制的一种特殊情况,它是在x*=0,u*=0,x=△x→0,#=△n的情况下编写程序的,编出的程序列于图4.25中,因为采样同隔短,所以可以作为

 

1pTogramcontro1;

2varx1,x2,1x1,:lpteger;

3tintfig,errflg:boolean;

4proceduretimerint;interrupt;

5begin

6iftintf]gthenerrf]g;开true

7elsetintflg:=tTue

8end;

9procedurefeedback

10conststīme=5(*samplingtfme*)

11fp1-10:(*feedbackgain*)

12fv1异-80;

13begin

141xl:x1;

15x1=ioread(1);

16x2:a(x11x1)dìvstime17:=fpI*x1+fvI*x2;

18iowrite(1,u)

19end;

20begin

21x1;=ioread(1);

22tintflg:false;

23errflg;=false;

24enbint;

25whifenoterrf1gdo

26iftintflgtheobegin

27feedback;

28tintfig=false

29end

30end.

图4,25质点的控制程序

连续系统进行处理。这里在使用PASCAL语言时,还配备了作为标准过程的ioread,iowrite和enbint,ioread是一个接受来自以参数表示地址的10设备数据的过程。iowrite表示的过程则是把第二个参数表示的数据。送到第一个参数表示的地址的

10设各。enbint表示的过程是使中断屏蔽im为1,并进人允许中断状态,作为大范围变量,备有x1,x2,1x1,u,tintflg,errflg.在x1中存放着最新采样位置数据,在1x1中存放着比x1超前一次的采样位置数据。这里,在使用的装置中没有速度传感器。因此速度量要从x1和1x1中估计出来(逋过简单的差分),估计值放到x2中,u为控制量。tintflg表示进行定时中断时的true,与此对应,当处理全部进行完了时,变成false,errflg表示当产生某种误差时,在这个例子中,则表示对于定时中断处理尚未完全结束而再次进行定时中断时,变为true.在执行这个程序时,首先要从21—23行中变量的初始化开始。为了从第20行开始执行程序,必须将这个人口地址写成0地址,但是这项工作是由编译程序来完成的,在下面的第24行中,变成为允许中断状态,errflg为false(不产生误差),tintflg为true(存在定时中断),这时执行feedback。当im=1(允许中断),从定时器发出中断要求时,程序的执行转移到timerint这种过程。为此,产生中断时,在跳转前的表(地址1)中,timerint的入口地址必须写进去。根据写出的proc-eduretimerint和后面的interrupt,编译程序也能完成这些工作。过程timerint使tintflg为true,从而具有定时中断并且将这种状态记忆下来。此外,对于定时中断处理,当其尚未结束时,若再次发生定时中断,则此时误差的记忆也能由timerint子程序完成。

至于feedback程序,它是在第15行将质点的位置读入,在第16行估计质点的速度。计算这两个量与反馈增益的线性组合,然后在第18行中,把求得的#送进马达中。

编译程序将图4.25上的程序正文读人,并且变换成排列有序的指令。‘对于这里列举的例子,其变换结果列于图4.26和图4.27中。地址0和地址1分别是复位时和产生中断时的跳转地址,即地址25(h)和02(H)。从地址2,开始,引入程序的代码和常数,从地

址40(₃开始变成为变量区。如果把它们存人PCOM的存贮器,则图4.24中的质点在x=x=0附近成为稳定的。

 

 

2

 

 

 

 

 

8

9

10

f1

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

timerinte0

entpushafjp

usha

p0pa

jp

timerinte1pushaPOpB

timerint_e2reti

timerintC1

feedback_e0ent

pusha

popa

2

70

timerinttinerint_c71

timerinte2

timerint_c70

 

 

 

 

2

66

68

lor1

pQpa66

pusha66

 

30 3Ee32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

 

popa

pusha

iow

ret

feedbackC

5

-10

80

controle0

entior

popa.pusha

pOpapusha

pOpaenl

Contro1e1prsha

not

fjppushafjp

cup

pusha

ujpcónrrol_e2

ret

controh_c

0

69

69

1

 

 

 

 

 

8

I6f

contro!_c

70

.controI_c

71

 

7

control_e270

Cottrole

0.feedbackcontrol_ccohtrol

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e0

pusha6847

sub48

pushafeedback_o49

div50

p0pa6751

pushafeedback_c+152

pusha66

mul53

pushafeedback_c+2

pusha6754

muIadd

图4.26经过编译程序得到的结果(左边数字为地址)

 

这一节讨论的程序是非常简单的程序,实际的程序要复杂得多,但是,为了掌握将机械与计算机相结合的必要知识,这个例子还是非常重要的。此外,在图4.25中25—29行那样的条件成立以前,是不会执行无意义的命令的。当计算机的功能未充分发挥时,还可以再让它作些工作。关于这个问题,将在第五章中加以说明,在那里将介绍一种并行程序设计方案。

捕获.JPG

标签: 读数整数程序

随便看看